nuxt.svg

【Nuxt 2】Prettierの導入

Nuxt2
VSCode

Prettier とは

Prettier は、コードフォーマッターの 1 つです。 HTML や JavaScript などのソースコードに対し、インデントやタブサイズなどを設定に基づき整形してくれます。

Prettier

Prettier は、vue ファイルにも適用できるため、NuxtJS プロジェクトにおいてもコードの統一性を図るために利用できます。

Prettier の導入

以下コマンドで、NuxtJS に Prettier をインストールします。

$ npm install -D prettier

次に Prettier 用の設定ファイルとして.prettierrc.json(または.prettierrc)をプロジェクトのルートフォルダに作成します。

.prettierrc.json
{
  "semi": false,
  "singleQuote": true
}

設定内容については後述しますが、上記は以下のような設定となります。

  • 末尾のセミコロンはつけない
  • 文字列はシングルクォート

最後に Prettier 実行用のコマンドを設定します。 package.jsonの"scripts"に以下を追記します。

package.json
"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

項目名デフォルト値説明
printWidth801 行の文字数を設定。超えた場合は折り返す(改行する)。
useTabsfalseタブ文字を使用するか。使用しない(falseの)場合は、tabWidthで設定した数のスペースとなる。
tabWidth2useTabsfalseの場合のスペースの数。
semitrueコード末尾にセミコロンを設定するか。
singleQuotefalse文字列の表現としてシングルクォートを使用するか。falseの場合はダブルクォートとなる。
quotePropsas-neededオブジェクトのプロパティにクォートを付けるかの設定。
as-needed: クォートが必要なもののみ設定。
consistent: 1 つでもクォートが必要なプロパティがある場合はすべてにクォートを設定。
preserve: 入力したままで変更なし。
trailingCommaes5オブジェクトの最後のプロパティなどにカンマを付けるかの設定。
es5: ES5 のルールに従い付ける
none: カンマは付けない
all: すべてにカンマを付ける
bracketSpacingtrueオブジェクトの{}の間にスペースを入れるかの設定。
true:{ foo: bar }
false:{foo: bar}
bracketLintfalseHTML タグを改行した場合の>の位置の設定。詳細は下記。
arrowParensalwaysアロー関数において、単体パラメータ―の場合に()を付けるかの設定。
always: 付ける。(x) => {}
avoid: 付けない。x => {}
vueIndentScriptAndStylefalsevue ファイルにおいて、<sctipt><style>の定義にインデントを必要とするかの設定。
EndOfLinelf改行文字を設定。設定値はlfcrlfcrauto

bracketLintについては、truefalseで以下の違いがあります。

  • 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 については、以下別の記事で紹介していますので、参考にしてください。

【Nuxt 2】ESLint の導入

ESLint には、--fixオプションにより特定のルールに対してコードフォーマットができます。 それでも Prettier を併用するのは、Prettier の方がコードフォーマットとして優秀だからです。 コードフォーマットは Prettier で行い、その後のフォーマットチェックは ESLint で行うようにします。

ESLint と併用するためには、eslint-config-prettierをインストールする必要があります。

$ npm install -D eslint-config-prettier

これは、ESLint のルールの中で、上記 Prettier の設定項目に含まれているものは無視するといったものです。 ESLint の設定ファイルである.eslintrc.jsextends'prettier'を追記します。 その他のextendsがある場合は、一番最後になるように追記してください。

.eslintrc.js
module.exports = {
  extends: [
    '@nuxtjs',
    'prettier'
  ]
}

ESLint と Prettier を一緒に実行するために、以下のようにpackage.jsonscriptsにコマンドを定義します。

package.json
"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を作成します。

.vscode/setting.json
{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode"
}

editor.formatOnSaveでファイル保存のタイミングでコードフォーマットを行うかを設定します。 editor.defaultFormatterで使用するコードフォーマッターを指定します。 今回は Prettier を使用するため上記の設定となります。 Prettier でコードフォーマットを行う場合は、.prettierrc.jsonに従って行われます。

ファイル毎にフォーマッターを分けたい場合は、以下のようにします。

.vscode/setting.json
{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": null,
  "[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[vue]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  }
}