Prettierがあっても.editorconfigが重要である理由

[![表紙](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967621/e3928c7d-7430-7cb5-f176-8912701466aa.png)](https://leapcell.io/?lc_t=q_editorcfg)

.editorconfig ファイルは、コードのフォーマットとファイルスタイルのルールを設定するために使用されます。これらのルールにより、異なる開発者が異なるエディターを使用していても、一貫したコードスタイルを維持することができます。.editorconfig ファイルでは主に次のようなプロパティを設定します：インデントスタイル、インデントサイズ、改行コード、文字エンコーディング、行末の空白、新しい行の追加など。

以下に、.editorconfig ファイルで使用可能な設定オプションとその詳細な説明を示します。

## .editorconfig ファイルの詳細

### root

現在の.editorconfig ファイルをプロジェクトのルート設定ファイルとして指定します。この値を`true`に設定すると、エディターはこのファイルを見つけた後、上位ディレクトリで他の.editorconfig ファイルを探すのを停止します。プロジェクトに複数の.editorconfig ファイルがある場合、この設定を使うことで現在の設定を最終的なものとすることができます。

```
root = true
```

### [pattern] - ファイルマッチングパターン

ルールが適用されるファイルタイプを定義します。ワイルドカードの`*`（任意の文字列）、`?`（1 文字）、および`{}`（複数のファイルタイプ）をサポートします。例えば、`[*.js]`はすべての JavaScript ファイルを、`[*.{html,css}]`は HTML と CSS ファイルをマッチします。

```
[*.js]
```

### indent_style

インデントスタイルを`space`（スペース）または`tab`（タブ）に設定します。これにより、異なるエディター間で一貫したインデント方式を使用できるため、コードの可読性が向上します。

```
indent_style = space
```

### indent_size

インデントのサイズを設定します。通常は正の整数値です。`tab`が設定された場合、インデントサイズは`tab_width`によって決まります。一般的なサイズとしては、2 または 4 スペースが使用されます。

```
indent_size = 4
```

### tab_width

タブ文字の表示幅を定義します。タブをインデントとして使用する場合の文字数に影響します。通常、`indent_size`と組み合わせて使用され、一貫したインデント表示を保証します。

```
tab_width = 4
```

### end_of_line

ファイルの改行コードを指定します。`lf`は Line Feed（\n）、`crlf`は Carriage Return and Line Feed（\r\n）、`cr`は Carriage Return（\r）を表します（`cr`はあまり使用されません）。クロスプラットフォーム開発では、改行コードを統一することでバージョン管理の衝突を減らすことができます。

```
end_of_line = lf
```

### charset

ファイルの文字エンコーディングを定義します。一般的なエンコーディングには`utf-8`、`utf-16`、`latin1`などがあります。多くの場合、さまざまな言語文字をサポートし、互換性の高い`utf-8`が推奨されます。

```
charset = utf-8
```

### trim_trailing_whitespace

行末の余分な空白を自動的に削除するかどうかを設定します。コードを整然と保ち、バージョン管理で無意味な変更を防ぐのに役立ちます。

```
trim_trailing_whitespace = true
```

### insert_final_newline

ファイルの末尾に新しい行を追加するかどうかを決定します。多くのコンパイラやツールチェーンは、ファイル末尾に改行があることを要求するため、これは良いコーディング習慣です。

```
insert_final_newline = true
```

### max_line_length

各行の最大長を設定します。これにより、狭いビューでもコードの可読性を確保できます。`off`に設定すると、行の長さに制限はありません。

```
max_line_length = 80
```

### unset

以前に設定されたプロパティをキャンセルし、デフォルト値に戻します。特定のファイルタイプのルールでグローバル設定を上書きするために使用されます。

```
indent_size = unset
```

以下は、さまざまなファイルタイプに対して具体的な設定を示す完全な.editorconfig ファイルの例です。

```
# 現在のディレクトリをルートとして設定
root = true

# すべてのファイルに適用される一般設定
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

# Markdownファイルの特殊設定
[*.md]
trim_trailing_whitespace = false
max_line_length = off

# Makefileファイルはタブインデントを使用
[Makefile]
indent_style = tab

# JavaScriptファイルのインデントサイズを2に設定
[*.js]
indent_size = 2
```

この.editorconfig ファイルの例は、異なるファイルタイプに対して統一されたコードスタイルとフォーマットを設定する方法を示しており、チームメンバーが異なるエディターを使用しても、一貫したコードスタイルを維持できるようにします。

## .editorconfig が Prettier のどの機能を補完するか？

1. **基本的なファイル形式の規則（コード以外のファイルにも対応）**  
   .editorconfig は、すべてのファイルタイプ（設定ファイル、Markdown、Makefile など）に適用可能で、インデント、文字エンコーディング、改行コードの基本ルールを提供します。一方、Prettier は主にコードファイルに焦点を当てています。

2. **文字エンコーディングと改行コードの管理**  
   .editorconfig は、文字エンコーディングや改行コード（LF や CRLF など）を統一設定できますが、Prettier はこうした低レベルのフォーマット問題を扱いません。

3. **エディター間での統一性の確保**  
   .editorconfig は、ほとんどのエディターや IDE をサポートしており、Prettier が有効でなくても基本的なファイル形式を一貫性のあるものに保つことができます。

4. **非プログラミング言語のファイル形式サポート**  
   .editorconfig は、ドキュメントファイルの基本フォーマットルールを提供し、Prettier がテキストファイルを十分にサポートしない部分を補完します。

## Prettier があっても.editorconfig が必要な理由

.editorconfig と Prettier は、それぞれ異なる焦点を持っており、補完的な関係にあります。.editorconfig は、インデントスタイル、文字エンコーディング、行末の空白処理など、ファイル全体の基本ルールを設定することに重点を置いています。これらの基本ルールは、プログラミング言語に限定されず、すべてのファイルタイプに適用可能です。これにより、Prettier が有効でない場合でも、チーム内で一貫したファイルスタイルを維持できます。

一方、Prettier はコードフォーマットの自動整形に特化しており、空行の位置や括弧のスタイルなど、より高度なコードフォーマット問題を扱います。したがって、両方を組み合わせることで、プロジェクト全体のファイル形式の規範性とコードスタイルの一貫性を確保できます。

また、クロスプラットフォーム開発では、異なる OS（Windows、macOS、Linux）がデフォルトで異なる改行コードを使用します。.editorconfig を使用することで、すべてのファイルの改行コードを統一し、システム差異によるバージョン管理の衝突を防ぐことができます。

## まとめ

.editorconfig は、ファイルレベルでの基本規範を提供し、すべてのファイルタイプに適用されます。一方、Prettier はコード自動整形ツールとして、コードスタイルの最適化に焦点を当てています。両者を組み合わせて使用することで、ファイルスタイルとコードフォーマットの一貫性を全面的に確保できます。

---

### [私たちはLeapcell、Node.jsプロジェクトのホスティングの最適解です。](https://leapcell.io/?lc_t=q_editorcfg)

[![Leapcell](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967621/6c043b02-b5df-f714-c76a-d0dc065b852f.png)](https://leapcell.io/?lc_t=q_editorcfg)

[Leapcell](https://leapcell.io/?lc_t=q_editorcfg)は、Webホスティング、非同期タスク、Redis向けの次世代サーバーレスプラットフォームです：

**複数言語サポート**

- Node.js、Python、Go、Rustで開発できます。

**無制限のプロジェクトデプロイ**

- 使用量に応じて料金を支払い、リクエストがなければ料金は発生しません。

**比類のないコスト効率**

- 使用量に応じた支払い、アイドル時間は課金されません。
- 例: $25で6.94Mリクエスト、平均応答時間60ms。

**洗練された開発者体験**

- 直感的なUIで簡単に設定できます。
- 完全自動化されたCI/CDパイプラインとGitOps統合。
- 実行可能なインサイトのためのリアルタイムのメトリクスとログ。

**簡単なスケーラビリティと高パフォーマンス**

- 高い同時実行性を容易に処理するためのオートスケーリング。
- ゼロ運用オーバーヘッド — 構築に集中できます。

[ドキュメントで詳細を確認！](https://docs.leapcell.io/)

[![Try Leapcell](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967621/0665a12e-43ca-104a-2a48-6830148267e1.png)](https://leapcell.io/?lc_t=q_editorcfg)

Xでフォローする：[@LeapcellHQ](https://x.com/LeapcellHQ)

---

[ブログでこの記事を読む](https://leapcell.io/blog/why-editorconfig-still-matters)