【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 fmtPrettier の設定項目
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 fixVisual 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"
}
}