【Nuxt 2】Prettierの導入
Prettier とは
Prettier は、コードフォーマッターの 1 つです。 HTML や JavaScript などのソースコードに対し、インデントやタブサイズなどを設定に基づき整形してくれます。
Prettier は、vue ファイルにも適用できるため、NuxtJS プロジェクトにおいてもコードの統一性を図るために利用できます。
Prettier の導入
以下コマンドで、NuxtJS に Prettier をインストールします。
$ npm install -D prettier
次に Prettier 用の設定ファイルとして.prettierrc.json
(または.prettierrc
)をプロジェクトのルートフォルダに作成します。
{
"semi": false,
"singleQuote": true
}
設定内容については後述しますが、上記は以下のような設定となります。
- 末尾のセミコロンはつけない
- 文字列はシングルクォート
最後に Prettier 実行用のコマンドを設定します。
package.json
の"scripts"に以下を追記します。
"scripts": {
"fmt": "prettier --write --ignore-path .gitignore ./**/*.{js,vue}"
}
prettier ./**/*.{js,vue,css}
とすることで、カレント配下のすべての js、vue ファイルが整形の対象となります。
--write
オプションは、整形した結果で対象のファイルを上書きするためのものです。
このオプションがない場合、整形結果がコンソールに出力されるだけでファイルに保存されません。
--ignore-path
オプションは、整形対象外のフォルダまたはファイルを設定したignore
ファイルを指定するためのものです。
通常は.prettierignore
を作成するのですが、Git 管理をしている場合は.gitignore
と内容が重複することが多いため、このオプションを使用します。
上記で設定したコマンドを実行することで、対象ファイルが整形されます。
$ npm run fmt
Prettier の設定項目
Prettier の設定として、.prettierrc.json
には以下の項目を記述します。
下記の設定項目は一部であり、詳細は以下のリンクを参照してください。
> Options · Prettier
項目名 | デフォルト値 | 説明 |
---|---|---|
printWidth | 80 | 1 行の文字数を設定。超えた場合は折り返す(改行する)。 |
useTabs | false | タブ文字を使用するか。使用しない(false の)場合は、tabWidth で設定した数のスペースとなる。 |
tabWidth | 2 | useTabs がfalse の場合のスペースの数。 |
semi | true | コード末尾にセミコロンを設定するか。 |
singleQuote | false | 文字列の表現としてシングルクォートを使用するか。false の場合はダブルクォートとなる。 |
quoteProps | as-needed | オブジェクトのプロパティにクォートを付けるかの設定。as-needed : クォートが必要なもののみ設定。consistent : 1 つでもクォートが必要なプロパティがある場合はすべてにクォートを設定。preserve : 入力したままで変更なし。 |
trailingComma | es5 | オブジェクトの最後のプロパティなどにカンマを付けるかの設定。es5 : ES5 のルールに従い付ける none : カンマは付けないall : すべてにカンマを付ける |
bracketSpacing | true | オブジェクトの{} の間にスペースを入れるかの設定。true :{ foo: bar } false :{foo: bar} |
bracketLint | false | HTML タグを改行した場合の> の位置の設定。詳細は下記。 |
arrowParens | always | アロー関数において、単体パラメータ―の場合に() を付けるかの設定。always : 付ける。(x) => {} avoid : 付けない。x => {} |
vueIndentScriptAndStyle | false | vue ファイルにおいて、<sctipt> 、<style> の定義にインデントを必要とするかの設定。 |
EndOfLine | lf | 改行文字を設定。設定値はlf 、crlf 、cr 、auto 。 |
bracketLint
については、true
、false
で以下の違いがあります。
true
<button className="prettier-class" id="prettier-id" onClick="{this.handleClick}" > Click Here </button>
false
<button className="prettier-class" id="prettier-id" onClick="{this.handleClick}" > Click Here </button>
ESLint との併用
Prettier は、ESLint と併用して使われることが多いです。 ESLint については、以下別の記事で紹介していますので、参考にしてください。
ESLint には、--fix
オプションにより特定のルールに対してコードフォーマットができます。
それでも Prettier を併用するのは、Prettier の方がコードフォーマットとして優秀だからです。
コードフォーマットは Prettier で行い、その後のフォーマットチェックは ESLint で行うようにします。
ESLint と併用するためには、eslint-config-prettier
をインストールする必要があります。
$ npm install -D eslint-config-prettier
これは、ESLint のルールの中で、上記 Prettier の設定項目に含まれているものは無視するといったものです。
ESLint の設定ファイルである.eslintrc.js
のextends
に'prettier'
を追記します。
その他のextends
がある場合は、一番最後になるように追記してください。
module.exports = {
extends: [
'@nuxtjs',
'prettier'
]
}
ESLint と Prettier を一緒に実行するために、以下のようにpackage.json
のscripts
にコマンドを定義します。
"scripts": {
"lint:js": "eslint --ext \".js,.vue\" --ignore-path .gitignore .",
"fmt": "prettier --write --ignore-path .gitignore ./**/*.{js,vue}",
"fix": "npm run lint:js && npm run fmt"
}
$ npm run fix
Visual Studio Code の設定
エディターとして Visual Studio Code(VSCode)を使用している場合、以下の Prettier の拡張機能をインストールすることで、Prettier を便利に使用することができます。
Prettier - Code formatter - Visual Studio Marketplace
エディタ共通の設定として Prettier の設定もできますが、ここではプロジェクトごとに設定を行うよう.vscode/setting.json
を作成します。
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
editor.formatOnSave
でファイル保存のタイミングでコードフォーマットを行うかを設定します。
editor.defaultFormatter
で使用するコードフォーマッターを指定します。
今回は Prettier を使用するため上記の設定となります。
Prettier でコードフォーマットを行う場合は、.prettierrc.json
に従って行われます。
ファイル毎にフォーマッターを分けたい場合は、以下のようにします。
{
"editor.formatOnSave": true,
"editor.defaultFormatter": null,
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}