Prettier でコードフォーマットを統一しよう

<img width="664" alt="e7cff7c9-98e6-d810-5512-f306a7e84abd.png" src="https://qiita-image-store.s3.amazonaws.com/0/174142/4c658088-7015-a7f5-14d8-bf0cb0b47d2f.png">

## :warning: :warning: :warning:

- 元々 Qiita:Team に投げた文章であるため、表現が身内を意識したものが多くあります

## Prettier とは

- [Prettier · Opinionated Code Formatter](https://prettier.io/)
- コードフォーマッタ
- HTML, CSS, Sass, JavaScript, TypeScript, JSX, JSON, Markdown に対応している（弊社で使っているやつでいうと）
- 対応についてはここ見て [What is Prettier? · Prettier](https://prettier.io/docs/en/index.html)
- これ入れたら、あーインデントずれてるー とかなくなるし
- マークアップエンジニア、フロントエンドエンジニアは導入したらよいのではないかと思って筆をとった次第
- JS の代表的なプロジェクトで使われている

<img width="915" alt="06280f0a-cf7c-5333-df9c-b76d28df465f.png" src="https://qiita-image-store.s3.amazonaws.com/0/174142/71feafc1-79f6-3629-2089-bed553f61ea3.png">

- 個人的にはこれからずっと使っていくつもり

## コードフォーマッタとは

- コードを整形してくれる
- :point_down: :point_down: :point_down: 
- ミスって `<head>`, `<body>` を `<html>` で囲っていないのは見逃してくれ

![6d93d35c-420e-0eea-1d5c-81c6198edd10.gif](https://qiita-image-store.s3.amazonaws.com/0/174142/544b7b1b-381e-98c1-5976-d6acd0d920ee.gif)


- HTML, CSS ではインデントを整えたり無駄な空白を削除したり、というのが多いけど、特に JS で効果的だと感じた
- JavaScript の例 :point_down: 

![2ef6b998-9bb1-8fa3-0e41-8d09986f3f03.gif](https://qiita-image-store.s3.amazonaws.com/0/174142/8a63d267-f65b-a4b2-6817-2b6bd7c4f99d.gif)

- これが

```js
var aaaa =              'aaaaaa'


foo({ aa: 111, bbb: 4234242,})

foo(111, 
    {
        hogehoge: fooo
    }
)
```

- こうなっているんす

```js
var aaaa = "aaaaaa";

foo({ aa: 111, bbb: 4234242 });

foo(111, {
  hogehoge: fooo
});
```

- :innocent::v:
- 最後の foo の引数のオブジェクトのところポイント高いっすね

## 導入

- ここに書いてある https://prettier.io/docs/en/install.html
- `npm install --save-dev --save-exact prettier` をプロジェクト単位でしたら良いです（yarn を使いたい人は上のリンク見て）
- `gulp` や `sass` と入れ方いっしょ
- これで導入できたんだけど、これでは CLI から使えるのみ
- `./node_modules/prettier/bin/prettier.js index.css` とかで使えるだけってこと
- エディタと連携させたい！ エディタ上でフォーマットしてほしい！ ファイル保存時にフォーマットしてほしい！

## エディタとの連携

- 弊社マークアップエンジニア、フロントエンドエンジニアが使っているエディタはだいたいサポートされていると思います
- サポートされているエディタの例
    - Atom
    - Sublime Text
    - Vim
    - Visual Studio Code
    - 完全版はここ → [Editor Integration · Prettier](https://prettier.io/docs/en/editors.html)
- この記事では、特に多いと思われる Sublime Text での導入方法を書きます
- 他 使っている人はここ見て → [Editor Integration · Prettier](https://prettier.io/docs/en/editors.html)

### Sublime Text での導入

- Package Control から「JsPrettier」インストールで
- Package Control をインストールしていない人はここ :point_down: 見て
- [Sublime Text 3のインストールと初期設定 \- Qiita](https://qiita.com/lunatea/items/53f4adcc6ea3f316e781#package-control-%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- `cmd + shift + p` から 「Install Package」 > 「JsPrettier」で

<img width="613" alt="00f00913-49db-64c0-ad11-209eee0bdef9.png" src="https://qiita-image-store.s3.amazonaws.com/0/174142/b8886b0c-42eb-8c15-62d2-d12fe0e3dd19.png">


### Sublime Text で使う

#### コマンドで実行する

- `cmd + shift + p` でコマンドパレットを開いてから「format」で「JsPrettier: Format Code」を選択する

![8ecbe29c-a92a-11ed-3671-2316c88cf88f.gif](https://qiita-image-store.s3.amazonaws.com/0/174142/bdac6941-9f1e-665d-64b8-663c56645804.gif)


### ファイル保存時に実行するには

- 設定で有効にする必要がある
- 「Sublime Text」>「Package Settings」> 「JsPrettier」>「Settings - Default」から設定ファイルを開く

<img width="838" alt="30515530-d32b-3cf1-42b0-5fe66666a04e.png" src="https://qiita-image-store.s3.amazonaws.com/0/174142/b9908b38-7877-e06b-082d-ba23877a2f7b.png">

- `"auto_format_on_save"` を `true` にする
- （コメントでデフォルト値書いてあるし、上書きしちゃっていいでしょ）

<img width="649" alt="5d965fa8-cb8d-c09d-448e-b687d800d1c0.png" src="https://qiita-image-store.s3.amazonaws.com/0/174142/f46c0e47-2bc9-9fe5-a68c-9623750cdd22.png">


## こまかな話

### prettier に無視してほしい

- 例えば意味のある形式がフォーマットされちゃって困るとき

```js
matrix(
  1, 0, 0,
  0, 1, 0,
  0, 0, 1
)
```

↓

```js
matrix(1, 0, 0, 0, 1, 0, 0, 0, 1);
```

- コメントで教えます

```js
// prettier-ignore
matrix(
  1, 0, 0,
  0, 1, 0,
  0, 0, 1
)
```

↓

```js
// prettier-ignore
matrix(
  1, 0, 0,
  0, 1, 0,
  0, 0, 1
)
```

- CSS ならこんな

```css
/* prettier-ignore */
.my    ugly rule
{

}
```

- 詳しくはここ見て
- [Ignoring Code · Prettier](https://prettier.io/docs/en/ignore.html)

## 終わりに

 - 便利そうやからみんな入れてほしい
 - **こういうフォーマットになってほしい！と指定する設定まわりはまた次回書きます**（気持ちが高ぶれば）
 - EditorConfig と共存できます
 - **便利そうやからみんな入れてほしい**