Prettierを使ってVSCodeでソースコードを自動整形する

## はじめに
コードを書く際はVSCodeを基本的には使っているんだけど、インデント(隙間)がバラバラだったりセミコロンのつけ忘れだったりと、適当に書いてたら美しくないコードができあがってしまう。自分が気をつけてればいいだけじゃんって言われればそれまでだけど、どうせなら自動で綺麗にしてくれないかなーと思ってると、どうやら「Prettier」ってものを入れるとコードを保存した時に勝手に綺麗にしてくれるらしいので試してみた。

## 目次
[1. Prettierとは](#1-Prettierとは)
[2. VSCodeへのPrettier導入方法](#2-vscodeへのprettier導入方法)
[3. 主な設定内容](#3-主な設定内容)
[4. ユーザとワークスペース](#4-ユーザとワークスペース)
[5. 対応していない言語で使うとどうなるのか](#5-対応していない言語で使うとどうなるのか)


## 1. Prettierとは
「はじめに」でも書いたんですが、Prettierはソースコードを整形してくれるものです。見た目を綺麗に整えてくれるといった方がわかりやすそうですね。こういうものを「コードフォーマッター」と呼ぶらしいです。  
読み方は「プリティア」です。イントネーションはプリキュアと一緒です。  
今回はVSCodeにPrettierを導入する方法について書きますが、例えばnpm installなどでプロジェクトに直接導入することもできるみたいです。チームで開発するとなると全員がVSCodeを使うとは限らないので、そっちの方がいいのかも、、、。方法についてはまた別記事で書きます。  
Prettierが対応しているものは以下の画像の通りです。VsCodeの拡張機能の詳細のところから取ってきました。
![スクリーンショット 2022-04-06 2.58.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/ac171931-4e74-1c37-c63f-675a40fe2f9b.png)
[公式サイト](https://prettier.io/)も見てみるとCommunity Pluginsという欄にも色々書かれていますね。このようにプラグインを入れればさらに多くの言語にも対応できそうです。VSCodeの拡張機能でプラグインを入れれるのかは勉強不足なのでわかりませんが、、、。
![スクリーンショット 2022-04-06 3.05.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/1e2b0322-c51d-9a14-c6a3-ab745b153af7.png)

## 2. VSCodeへのPrettier導入方法
やり方は非常に簡単です。  
まず、VSCode開いて拡張機能をインストールする画面にいきましょう。
![スクリーンショット 2022-04-06 1.32.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/ff6e2615-1548-fddd-9fac-29089ca87164.png)
検索のところで「prettier」と入力して「Prettier - Code formatter」をインストールします。最新バージョンを入れておけば問題ないはず。
![スクリーンショット 2022-04-06 1.36.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/1b2a1cc8-2c03-0186-89b2-2627004ee1d1.png)
これで完了と見せかけてまだ少しだけやることがあります。現状のままでは保存した瞬間にPrettierが自動で整形してくれるという設定にはなっていないので、それを設定しましょう。
「ctrl + ,」で設定を開いて、検索ボックスに「on save」と入力しましょう。
![スクリーンショット 2022-04-06 1.51.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/28528de0-b30e-7679-2405-2a349e58b6d0.png)
「Editor: Format On Save」というのがあるのでチェックボックスがあるのでチェックを入れると完了です。  

## 3. 主な設定内容
どのようなルールでコード整形するかは設定から変更することができるので、代表的なものを書いておきます。

- Tab Width
インデントを半角スペース何個分にするかの設定です。自分は2に設定するのがお気に入り。
![スクリーンショット 2022-04-06 2.03.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/d99ca1ea-9300-66fa-e9fe-f65f1dc4082b.png)
![スクリーンショット 2022-04-06 2.04.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/1d5be476-2f1c-b00c-650a-f3283aea196a.png)
※よく似たもので「Editor: Tab Size」というものがありますが、これはPrettierとは関係がありません。なので、Prettierがサポートしていないもの(.txt, .cなど)でtabを挿入した場合はこちらで設定したインデントが適用されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/8e76e34d-79a9-dde3-ae91-cca90c4829b9.png)
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/074a05a3-898c-8403-af5a-a9605df644f2.png)


- Print Width
1行に何文字まで入力できるかの設定です。この文字数を超えるようであれば改行してくれます。デフォルトが80なのでそのままにしてる人が多いようですが、最近のパソコンは画面サイズが大きいものが増えてきたので120にしている人もいるらしく、自分も120にしています。
![スクリーンショット 2022-04-06 2.16.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/8f512c9c-775d-d89d-cea3-6d81b44c8070.png)
![スクリーンショット 2022-04-06 2.17.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/020268cb-6304-440e-3d1c-a3c6b6900742.png)
※文字列などの改行できないものが設定した値よりも長い場合、それは改行されないようです。まあ当たり前っちゃ当たり前か。

- Single Quote
ダブルクォーテーションをすべてシングルクォーテーションに変えてくれます。ダブルクォーテーションだとエラーになる箇所が多々あるため、この設定はONにしておいた方がよさそう。JSXとそれ以外とでわかれているけど、どっちもONにしておいていいと思います。ちなみにJSXはReactで使うやつで、Javascriptの中にhtmlを書けるようにしたやつです。
![スクリーンショット 2022-04-06 2.33.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/e08e5000-3b69-60a5-30ff-d101fbbc7b00.png)
![スクリーンショット 2022-04-06 2.31.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/2109c357-5a62-eb4e-29df-a0ba4e8ef9d9.png)

- Semi
末尾にセミコロンをつけるかの設定です。デフォルトはオンになっています。個人的にはセミコロンがあった方が綺麗な感じがするのでオンのままでいいと思います。
![スクリーンショット 2022-04-06 2.37.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/891e433e-df8b-7fee-d3a8-281282ee21df.png)

- endOfLine
改行の文字コードをどれにするかの設定です。以下の4種類があります。デフォルトはlfです。
それぞれの文字コードの詳細については[この記事](https://qiita.com/numayo_factory/items/8b7708a84c9efb787c89)を参照してください。
  - auto(既存のものをそのまま保持)
  - lf (\n)
  - crlf (\r\n)
  - cr (\r)

  ![スクリーンショット 2022-04-06 13.40.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/e55bbd67-9f1b-adf9-f364-dba4ccc97d7d.png)


## 4. ユーザとワークスペース
「3. 設定」では説明を省いていましたが、VSCodeの設定には「ユーザ」と「ワークスペース」の2種類があります。
![スクリーンショット 2022-04-06 2.42.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/85b5be73-150c-75b4-fa6f-3c93ed381254.png)
どちらも設定する内容自体は変わらないのですが、影響範囲が異なります。  
ユーザで設定した内容は、すべてのプロジェクトで共通となります。例えばsample1とsample2というプロジェクトがあった場合、どちらにもユーザで設定した内容が反映されます。個人で開発する分にはこっちで十分かなー。  
一方、ワークスペースで設定した内容は、その設定したプロジェクト内のみで反映されます。ワークスペースで設定内容を変更すると.vscodeというフォルダがプロジェクトに追加され、そこのsettings.jsonに設定した内容が記されていきます。このとき、ユーザで設定した内容よりもワークスペースで設定した内容の方が優先されます。もちろん、設定内容は直接setting.jsonを編集することでも変更可能です。チーム開発を行なっている場合はこの.vscodeを全体で共有すれば人によってコードのフォーマットが統一できてよさそうですね。
![スクリーンショット 2022-04-06 2.51.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2616419/0511a92c-1924-4e16-f681-5f346b0265de.png)

## まとめ
Prettierを使うことでコードを書く上で考えることが減りました。やっぱりエンジニアとしては自動化できるところは自動化して便利に開発を進めていきたいです！