Dev Study
← 解説「Prettier — 整形の議論を終わらせるフォーマッタ」に戻る

サンプルコードで身につける: Prettier — 整形の議論を終わらせるフォーマッタ

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1Prettierの導入と一括整形

Prettierは開発時だけ使う道具なので-Dで入れます。--writeは整形して上書き、--checkは整形済みかの確認だけを行います。--checkはCIで「整形されていないコードを弾く」用途に使います。

# 開発用の依存として Prettier をインストール
npm install -D prettier

# プロジェクト全体を整形して上書きする
npx prettier --write .

# 整形済みかどうかを確認だけする(CI 向け。書き換えはしない)
npx prettier --check .
# => 未整形のファイルがあると一覧表示され、終了コードが 1 になる

2.prettierrc.jsonでルールを一度だけ決める

設定ファイルをリポジトリに含めると、全員のエディタとCIが同じルールで整形します。項目は少なく、迷ったら既定値のままで十分です。決めた後は見た目の議論をしないのがポイントです。

// .prettierrc.json — チームで一度だけ決める整形ルール
{
  "printWidth": 100,
  "singleQuote": true,
  "tabWidth": 2,
  "semi": true,
  "trailingComma": "all"
}

// このファイルをリポジトリに含めることで、
// 全員のエディタ・CI が同じルールで整形するようになる

3整形前と整形後 — 差分から見た目の議論が消える

どんな書き方で保存しても、Prettierを通すと同じ形に揃います。書いた人のクセが差分に現れなくなるので、レビューでは変更の中身だけを見ればよくなります。

// ── Before: 書いた人のクセが出ているコード ──
// const user={name:"Tanaka",age:28,roles:["admin","editor"]}
// function isAdmin(u:{roles:string[]}){return u.roles.includes("admin")}

// ── After: Prettier を通した後(誰が書いても必ずこの形になる)──
const user = { name: 'Tanaka', age: 28, roles: ['admin', 'editor'] };

function isAdmin(u: { roles: string[] }): boolean {
  return u.roles.includes('admin');
}

4保存時整形のエディタ設定(VS Code)

保存のたびに自動整形されるようにすれば、整形コマンドの実行を忘れる心配がなくなります。この設定を.vscode/settings.jsonとしてリポジトリに含めると、チーム全員に同じ動きが行き渡ります。

// .vscode/settings.json — 保存時に Prettier で自動整形する
{
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true
}

// ・拡張機能「Prettier - Code formatter」のインストールが前提
// ・このファイルをリポジトリに含めれば、チーム全員が同じ動きになる

5ESLintとの衝突を避ける — 役割分担の仕上げ

ESLintにも整形系のルールがあるため、そのままではPrettierと指摘が衝突することがあります。eslint-config-prettierを最後に適用すると、ESLint側の整形系ルールが無効になり、整形はPrettierに一本化されます。

# ESLint の整形系ルールを無効化する設定を導入
npm install -D eslint-config-prettier

# eslint.config.js の設定配列の最後に追加する:
#   import prettierConfig from 'eslint-config-prettier';
#   export default [ ...既存の設定, prettierConfig ];

# 役割分担の完成形:
#   ESLint   → 品質(バグの芽・危険な書き方)だけを見る
#   Prettier → 見た目(整形)だけを受け持つ
#   → 同じ行に2つの道具が別々の指摘をする状態がなくなる