Nuxt.jsの基本3（生産性）

## 入る前に、
こんにちは
いよいよ、Nuxt.js関連記事の最終章になります。
今まで、フロント側の開発について、CSR/SSRや、Universal Appについて、その中のNuxt.jsについて、あれこれ見てみました。

最後は、このNuxt.jsを使ってチームレベルで開発する時、よく話が出る、LINTについて調べてみましょう。
そして、どんな感じで使えばいいのかまで自分がの経験をもとに紹介したいです。

1. [Nuxt.jsの基本1.（SSR, CSR, Universalなど…）
](https://qiita.com/KIMSeongJoo/items/82f618723b44ba6ed7d7)
1. [Nuxt.jsの基本2（Nuxt.jsについて）](https://qiita.com/KIMSeongJoo/items/b4ae6778d78e08b9d5c6)
1. [Nuxt.jsの基本2.5（軽く経験するNuxt.js）](https://qiita.com/KIMSeongJoo/items/382b2d1f6e2c0d6c11b3)

## Lint?
それではLintは何でしょうかね？
_Lintチェックした？ Lintチェック自動に回せる仕組みを入れたいです。_
という話、現場で良くしたことあると思います。
（もちろんそんなことは当たり前とか、そんなことに時間使う暇はないよ。などの場合があるかもしれません。）

ここで話してるLintは[ここ](https://ja.wikipedia.org/wiki/Lint)を見ると、
> コンパイラよりも詳細かつ厳密なチェックを行うプログラムである。静的解析ツールとも呼ばれる。

のように案内してます。　言葉とおりです。
そして、そのLint作業を行ってくれるツールをLinterだといいます。
Goでは、[go-lint](https://github.com/golang/lint), [golangci-lint](https://golangci-lint.run/)などが有名だし、よく使われてます。
PHPでも[phpmd](https://phpmd.org/documentation/creating-a-ruleset.html), [phpcs](https://github.com/squizlabs/PHP_CodeSniffer)などがあります。

それの、JS版としてよく使うのが、[ESLint](https://eslint.org/)になります。
そして、そのESLintとペアとして、よく使うのが[Prettier](https://prettier.io/)というツールです。
これは、ESLintから指摘されてものを自動的に修正をサポートしてくれるツールになります。

## インストール
基本的に、ESLint、Prettier両方ともNuxtアプリをインストールする時から入れるのが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76353/5ea007c2-17d7-9c77-15a9-55b8bd345945.png)

ここで、選択することで、すでに入れられる方法と
`Yarn`, `NPM`を使って後からインストールする方法もあります。

#### ESLint
https://eslint.org/docs/user-guide/getting-started

#### Prettier
https://prettier.io/docs/en/install.html

インストールは、公式ドキュメントを参考してください。

## 使い方
それぞれインストールが終わったら、`package.json`にとあるコマンドが追加される・追加したと思います。

```json
{
...
    "lint:js": "eslint --ext \".js,.vue\" --ignore-path .gitignore .",
    "lint:prettier": "prettier --check .",
    "lint": "yarn lint:js && yarn lint:prettier",
    "lintfix": "prettier --write --list-different . && yarn lint:js --fix",
...
}
```

必ずこのように書かれてる必要はないです。
この中でよく使うのは、`lint` と `lintfix` になると思います。軽く説明すると、
`lint` は、`.js`, `.vue`ファイルのLintチェックを行う。
`lintfix` は、　Lintエラーに対しての`prettier`を使って自動修正を行われる。
という処理です。

## 設定ファイル
これらを確認するもとになる、設定ファイルがあります。
eslintの場合、`eslintrc.js`, prettierの場合 `.prettierrc`になります。
[それ](https://eslint.org/docs/user-guide/configuring/)[ぞれ](https://prettier.io/docs/en/configuration.html)の公式ドキュメントを見る限り、ファイルの拡張子は`javascript`, `json`, `yaml` をサポートしてるので、読みやすい、管理しやすいものを選択していれることをおすすめします。
（`json`形式がよく使われますが、個人的にはコメントアウトが使える`yaml`をよく使います。)

eslintの[公式ドキュメント](https://eslint.org/docs/user-guide/configuring/ignoring-code#ignored-file-warnings)では除外処理についても案内してます。パス、パターン、特定ファイルなどの指定がそれぞれできるので、テストファイルや、特定`.js` ファイルなどの場外しながら管理するのもありだと思います。

もちろん prettierも除外ができます。　prettierの場合、`.prettierignore` というファイルで管理してます。
こちらももちろん、特定パス、ファイル、拡張子などが指定できるので参考してください。

### 細かい設定について、
詳細設定は、公式ドキュメントを読むか、Qiitaなどで検索して必要な部分を追加で入れてください。
特に設定がない場合、ESLintの場合、[recommended](https://eslint.org/docs/rules/)というものとして処理します。　これが不便だと思ったら、eslintrcファイルのrule 部分を入れて、不要だと入れてください。

```json
{
    "no-cond-assign" : false
}
// 項目名：false ←このように書くことで該当項目をOFFするのができます。
```

項目によって、On/OFF以外に、Warningというものがあります。
言葉通りにエラーではないが、注意して！　的なものとして、Lint結果をCLI上に案内します。

そして、項目によってより細かいオプション指定が可能なものもあります。それも少し書き方が異なるので、指定するときには公式ドキュメントをよく確認してみてください。


## TIPS
これらは普段開発するときにはあんま気にしてないはずです。
PR作成し、レビュー依頼する時が一番気づく時かな…と思います。ｗ
なので、気付きづらい部分を普段の開発プロセスの中から指摘してくれるようにサポートができます。
[Git Pre-Commit](https://pre-commit.com/)というものと、[Github Actions](https://github.co.jp/features/actions)があると思います。
Actionsは、もう、CI/CDレベルの話になるので、自分的にはPre-Commitをおすすめします。

使い方は、こちらもQiita内で検索するとかなりいい記事が多いのでご参考してください。
ようするに、Commit処理をHookとしてなにかの処理を入れるものです。
もちろんPushをHookとして、なにかするのも可能なので、色々拡張して使ってみてください。

うちのチームでは、Pre-commitを使って、Lint処理を確認します。
なんのなくPre-commitだけをHookにすると、全ファイルが対処になるので、[lint-staged](https://github.com/okonet/lint-staged) というものと一緒に合わせて使います。
こちらは、gitの`staged`状態になってる(git add したファイルのみ）が検査対象になります。　もちろんデプロイするときには全体検査をもう一度行います。


## まとめ、
今回の記事では本当に軽く書いてみました。
細かい設定の説明や案内まで書くのは無駄だと思ったので、簡単にこのような理由でこんなことを使います、参考してください。ぐらいのレベルで書いてみました。

Lint処理は普段Nuxt.js以外でもよく使うものです。　説明でも書いたとおりに言語ごとサポートしてるものがあるぐらいです。
その分チームレベルの開発でコードの可読性は生産性管理的に、大事なものだと思います。
Pre-commitや、Lint-stagedなどのツールも他のPJでもよく活用できると思います。必要だと思う部分はどんな言語でも似てると思いますので…Nuxt.jsだけじゃなく他の言語のコードベースを運用してるのであればぜひ検討してみてください。

自分は今回のPJを担当しながらいろんな失敗を経験しました。
あるときには失敗で落ち込んでたりしましたが、当時のPJが終了したり、この記事を書きながら過去を考えてみたらまぁまぁいい勉強になったチャレンジだと思います。

いつもやりたいことをやらせてくれるマネジャーさんに感謝の心を込めて記事を完了したいと思います。
Nuxt.jsて何だ？どう使えばいいんだろうと悩みがあったエンジニアさんたちに少しでも約立つ情報が載せられたら嬉しいです。
かなり長い記事、ここまで読んでいただいてありがとうございます。
また新しいSubjectを持って戻ります！