Prettierでコード整形を自動化しよう
このチュートリアルでは、コードフォーマッターの「Prettier」を使いTypeScriptのコードフォーマットを自動化することを学びます。
本章で学べること
本章ではPrettierを導入してコード整形を自動化することを目標に次のことを学びます。
- Prettierの導入方法
- Prettierの実行方法
- 整形ルールの設定方法
Prettierとは
Prettierはコードのフォーマットを自動整形するツールです。Prettierがサポートしている形式は幅広く次の形式をサポートしています。
また、プラグインを利用することでPHPなどの他の言語のフォーマットを行うこともできます。
- JavaScript
- TypeScript
- JSX
- Flow
- JSON
- HTML
- Vue
- Angular
- Ember
- Css
- Less
- SCSS
- styled-components
- styled-jsx
- GraphQL
- Markdown
- MDX
- YAML
- Svelte
なぜPrettierを導入するのか
複数人で開発していると、人によってインデントがズレていたり、オブジェクトの最後のカンマをつけるorつけないといったコードスタイルの違いが発生します。
ts// オブジェクトの最後にカンマが付いている// 文字列はダブルクォート// 行末にセミコロンが付いているconst user1 = {name: "太郎",age: 20,};// オブジェクトの最後にカンマが付かない// 文字列はシングルクォート// 行末にセミコロンが付かないconst user2 = {name: 'まさる',age: 30}
ts// オブジェクトの最後にカンマが付いている// 文字列はダブルクォート// 行末にセミコロンが付いているconst user1 = {name: "太郎",age: 20,};// オブジェクトの最後にカンマが付かない// 文字列はシングルクォート// 行末にセミコロンが付かないconst user2 = {name: 'まさる',age: 30}
手動でこれらのコードスタイルを統一するには、ガイドラインを作成してチーム内で共有をしてコードレビューで注意深くチェックする必要があります。また、新しいメンバーがチームに参加した際にはルールを共有する手間も発生します。
Prettierを導入してコード整形を自動化することで、簡単にコードのスタイルを統一することができます。開発者は細かいコードスタイルのことを意識する必要がなくなり開発に集中することができるようになるので、より効率的に開発をすることができます。
このチュートリアルに必要なもの
このチュートリアルで必要なものは次のとおりです。
- Node.js v16以上
- Yarn v1系 (このチュートリアルはv1.22.19で動作確認しています)
Node.jsの導入については、開発環境の準備をご覧ください。
パッケージ管理ツールとしてYarnを利用します。最初にインストールをしておきましょう。すでにインストール済みの方はここのステップはスキップして大丈夫です。
shellnpm install -g yarn
shellnpm install -g yarn
プロジェクトを作成する
このチュートリアルに使うプロジェクトを作成します。
shellmkdir prettier-tutorialcd prettier-tutorial
shellmkdir prettier-tutorialcd prettier-tutorial
プロジェクトのルートにpackage.jsonを作成してください。内容は次のようにします。
package.jsonjson{"name": "prettier-tutorial","license": "UNLICENSED"}
package.jsonjson{"name": "prettier-tutorial","license": "UNLICENSED"}
Prettierをインストール
Prettierは開発時にだけ使うパッケージなので-Dオプションをつけてインストールします。
shellyarn add -D 'prettier@^2'
shellyarn add -D 'prettier@^2'
バージョンを表示してインストールを確認してください。
shellyarn prettier -v2.8.1
shellyarn prettier -v2.8.1
TypeScriptを自動整形する
prettierコマンドを利用して、TypeScriptのファイルをPrettierで自動整形してみましょう。
最初にsrcディレクトリを作成して、src/helloWorld.tsを作成してください。
shellmkdir srctouch src/helloWorld.ts
shellmkdir srctouch src/helloWorld.ts
helloWorld.tsの内容を次のように変更します。
このコードは自動整形を確認するために、わざと見づらいコードになっています。
src/helloWorld.tstsconsthello = (name : string) => {console .log ("Hello,World "+name )}
src/helloWorld.tstsconsthello = (name : string) => {console .log ("Hello,World "+name )}
prettierコマンドを実行してみましょう。
コマンドはprettier [オプション] [ファイル/ディレクトリ]の形式で実行できます。
次の例ではsrcを引数で指定することでsrcディレクトリ配下のすべてファイルを対象として自動整形を実行します。
shellyarn prettier src
shellyarn prettier src
整形結果が表示されていますが、helloWorld.tsを確認するとファイル内容が変更されていないことに気づくと思います。prettierコマンドをオプションなしで実行した場合は整形結果だけが表示されて、ファイルの書き換えは実行されません。
ファイルの書き換えを一緒に実行する場合は--writeオプションを指定します。
shellyarn prettier --write src
shellyarn prettier --write src
実行後にhelloWorld.tsを確認してみると、次のようにコードが整形されているのが確認できます。
src/helloWorld.tstsconsthello = (name : string) => {console .log ("Hello,World " +name );};
src/helloWorld.tstsconsthello = (name : string) => {console .log ("Hello,World " +name );};
Prettierのデフォルトの整形ルール
Prettierはデフォルトの整形ルールが定義されています。先ほどの実行結果を見るとインデントが幅2つのスペースでインデントがされているのが分かります。
代表的な項目のデフォルト値は次のようになっています。
すべての項目のデフォルト値を確認したい場合は、Prettierの公式ドキュメントを参照してください。
| 項目 | デフォルト値 |
|---|---|
| 1行の最大文字数 | 80 |
| インデント幅 | 2 |
| インデント | スペース |
| セミコロン | つける |
| クォート | ダブルクォート |
Prettierの整形ルールを設定する
CLIオプションで設定
整形ルールはprettierコマンドを実行する時にオプションとして指定することができます。
先ほど整形したhelloWorld.tsを別の整形ルールで整形してみます。
shellyarn prettier --no-semi --tab-width 4 --write src
shellyarn prettier --no-semi --tab-width 4 --write src
整形されたコードを見るとセミコロンが消えて、インデント幅が2から4に変更されているのを確認できます。
src/helloWorld.tstsconsthello = (name : string) => {console .log ("Hello,World " +name )}
src/helloWorld.tstsconsthello = (name : string) => {console .log ("Hello,World " +name )}
設定ファイルを作成する
Prettierは整形ルールを設定ファイルに記述することもできます。
プロジェクトのルートに.prettierrcを作成します。
shelltouch .prettierrc
shelltouch .prettierrc
次に.prettierrcを次のように変更します。
.prettierrcjson{"tabWidth": 2,"semi": true,"singleQuote": true}
.prettierrcjson{"tabWidth": 2,"semi": true,"singleQuote": true}
設定ファイルが作成できたら、prettierコマンドを実行してみましょう。
Prettierはプロジェクトルートに.prettierrcが存在する場合は自動で設定ファイルを読み込んで整形ルールを設定してくれます。
shellyarn prettier --write src
shellyarn prettier --write src
設定ファイルで記述した整形ルールでhelloWorld.tsが変更されているのを確認できます。
src/helloWorld.tstsconsthello = (name : string) => {console .log ('Hello,World ' +name );};
src/helloWorld.tstsconsthello = (name : string) => {console .log ('Hello,World ' +name );};
上記の例ではJSONフォーマットで設定ファイルを作成しましたが、PrettierはJSON以外にもJS,YAML,TOMLのフォーマットをサポートしています。
prettier.config.jsjsmodule .exports = {tabWidth : 2,semi : true,singleQuote : true,};
prettier.config.jsjsmodule .exports = {tabWidth : 2,semi : true,singleQuote : true,};
.prettierrc.ymlyamltabWidth: 2semi: truesingleQuote: true
.prettierrc.ymlyamltabWidth: 2semi: truesingleQuote: true
.prettierrc.tomltomltabWidth = 2semi = truesingleQuote = true
.prettierrc.tomltomltabWidth = 2semi = truesingleQuote = true
.prettierrc以外でも自動で設定ファイルとして認識可能なファイル名がいくつか存在します。
フォーマットとファイル名の組み合わせは次のとおりです。
| フォーマット | ファイル名 |
|---|---|
| json | .prettierrc, .prettierrc.json, .prettierrc.json5 |
| js | .prettierrc.js, .prettierrc.cjs, prettier.config.js, prettier.config.cjs |
| yaml | .prettierrc, .prettierrc.yml, .prettierrc.yaml |
| toml | .prettierrc.toml |
他の整形ルールを確認する
ここで紹介した以外にもいくつかの整形ルールが存在します。
他の整形ルールやCLIコマンドのオプション名、設定ファイルのキー名などを確認したい場合はPrettierの公式ドキュメントをご参照ください。
どのような整形ルールがよいのか?
Prettierをプロジェクトに導入する時に整形ルールについて悩む場合があるかもしれません。
整形ルールについては好みの部分も大きいので、プロジェクトの開発者で話し合って決めるようにしましょう。整形ルールを変更したい場合はprettierコマンドを実行するだけなので、後から簡単に変更できる前提で決めてしまっても問題ありません。
特にこだわりが無い場合は、Prettierのデフォルトの整形ルールをそのまま利用するのがオススメです。
Prettierの自動整形を無効にする
prettier-ignoreをコメントとして記述することで、一部のコードをPrettierの自動整形の対象から除外することができます。
src/helloWorld.tstsconstboard1 = [1, 0, 0, 1];// prettier-ignoreconstboard2 = [1, 0,0, 1];
src/helloWorld.tstsconstboard1 = [1, 0, 0, 1];// prettier-ignoreconstboard2 = [1, 0,0, 1];