EditorConfig公式サイトの解説を日本語に訳しました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94360/5b5fd14c-f1f1-4f42-c752-23f21063fbee.png)

https://editorconfig.org/

公式サイトの内容を意訳しました。構成が同じなので、見比べて理解を深めることができると思います。

## EditorConfigって何？

EditorConfigは、異なるエディタやIDEを使用する複数の開発者が同じプロジェクトで作業する際に、一貫したコーディングスタイルを維持するのに役立ちます。EditorConfigプロジェクトは、コーディングスタイルを定義する **.editorconfigファイル** と、その定義を反映してソースコードのスタイルを修正する **テキストエディタプラグイン** のセットで構成されます。

:::note info
**コーディング規約とは別の話**
コーディング規約は、目視前提の論理的なスタイルに関するルールや作法を指します。一方、EditorConfigは、改行コードやインデントに用いるホワイトスペースの数、エンコードなど、**見た目では分かりにくい**物理的なスタイルを揃えるためのツールであり、開発環境の違いにより発生する意図しない差分を防ぎます。
:::


EditorConfigはシンプルなので、Gitなどのバージョン管理システムと相性がよいです。

## EditorConfigファイルの見た目はどんな感じ？

:::note info
[EditorConfigの正式な仕様](https://spec.editorconfig.org/)も参考にしてください。
:::

### サンプルファイル

以下は、PythonとJavaScriptファイルの改行スタイルとインデントスタイルを設定する例の`.editorconfig`ファイルです。

```ini
# EditorConfigは素晴らしい: https://EditorConfig.org

# 最上位のEditorConfigファイル
root = true

# 各ファイルの末尾に改行を入れるUnixスタイルの改行
[*]
end_of_line = lf
insert_final_newline = true

# 波括弧展開記法を使用して複数のファイルに一致
# デフォルトの文字セットを設定
[*.{js,py}]
charset = utf-8

# 4スペースのインデント
[*.py]
indent_style = space
indent_size = 4

# タブによるインデント（サイズは指定されていない）
[Makefile]
indent_style = tab

# libディレクトリ内のすべてのJSファイルのインデントオーバーライド
[lib/**.js]
indent_style = space
indent_size = 2

# package.jsonまたは.travis.ymlという正確なファイル名に一致
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2
```

:::note info
より実用的なEditorConfigファイルの例については、Wikiをご覧ください。
[EditorConfigファイルを使用するさまざまな公式プロジェクト](https://github-com.translate.goog/editorconfig/editorconfig/wiki/Projects-Using-EditorConfig?_x_tr_sl=auto&_x_tr_tl=ja&_x_tr_hl=ja)
:::

### .editorconfigファイルはどこに配置するのがよいですか？

エディタでファイルを開くと、EditorConfigプラグインは開いたファイルのディレクトリおよびすべての親ディレクトリ内の`.editorconfig`という名前のファイルを探します。`.editorconfig`ファイルの検索は、最上位のディレクトリに到達するか`root=true`と指定されたEditorConfigファイルが見つかると停止します。

:::note warn
`root=true` の指定がないとルートまでたどります。プロジェクトトップに配置する `.editorconfig` には記述しておくことをおすすめします。
:::

EditorConfigファイルは上から下へと読み取られ、直近のルールが優先されます。該当するEditorConfigセクションのプロパティは読み取られた順に適用されるため、より近いファイルのプロパティが優先されます。

:::note info
**Windowsユーザー向け:** Windows Explorerで`.editorconfig`ファイルを作成できない場合は、`.editorconfig.`（末尾のドットに注意）という名前のファイルを作成してください。自動的に`.editorconfig`にリネームされます。
:::

### ファイル形式の詳細

EditorConfigファイルは、[Python ConfigParserライブラリ](https://docs.python.org/ja/3.8/library/configparser.html)で使用されるINI形式と互換性があります。以下に、その特徴と使用方法を説明します。

#### セクション名
  - セクション名は`[`と`]`で囲まれます。
  - ファイルパスの[グロブパターン](https://en.wikipedia.org/wiki/Glob_(programming))として記述され、大文字小文字を区別します。
  - パターン形式は[.gitignore](https://git-scm.com/docs/gitignore#_pattern_format)に似ています。
  - ファイルパスの区切り文字には前方スラッシュ（`/`）を使用します。

#### コメント
  - コメントはシャープ（`#`）またはセミコロン（`;`）で始まります。
  - コメントは独立した行に記述します。

#### EditorConfigファイル自体のエンコードと行区切り
  - UTF-8エンコードで記述します。
  - 行区切りには`CRLF`または`LF`を使用します。

#### ルールの優先順位
  - EditorConfigファイルは上から下へと順に読み取られます。
  - 最後に読み取られたルールが反映されます。

以下に、ファイルパスのグロブパターンと現在サポートされているEditorConfigプロパティについて説明します。

#### ワイルドカードパターン

セクション名でワイルドカードとして認識される特殊文字は以下の通りです。

| ワイルドカード | 説明                                                         |
| -------------- | ------------------------------------------------------------ |
| `*`            | パスセパレータ（`/`）を除く任意の文字列に一致                |
| `**`           | パスセパレータ（`/`）も含めた任意の文字列に一致<br>下層のディレクトリも含めたマッチング |
| `?`            | 任意の1文字に一致                                            |
| `[name]`       | _n,a,m,e_ の任意の1文字に一致                                   |
| `[!name]`      | _n,a,m,e_ に含まれない任意の1文字に一致                         |
| `{s1,s2,s3}`   | 指定された文字列のいずれかに一致（カンマで区切られる） (**EditorConfig Core 0.11.0以降で利用可能**) |
| `{num1..num2}` | num1とnum2の間の任意の整数に一致<br>num1とnum2は正または負のいずれか |

これらの特殊文字はバックスラッシュでエスケープし、ワイルドカードパターンとして解釈されないようにできます。

:::note warn
**複数の拡張子に対応したい場合**

- `[*.{css,scss,js,ts}]` 正しい書き方
- `[{*.css,*.scss,*.js,*.ts}]` これも可
- `[*.css,*.scss,*.js,*.ts]` 認識されない書き方
:::


#### サポートされているプロパティ

主なプロパティを下記に列挙します。Wikiには[プロパティの完全なリスト](https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties)がありますので、興味があればご覧ください。エディタによってはプロパティのサポートが完全でないことがあります。

| プロパティ                  | 説明                                                                                                                                          |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `indent_style`              | ハードタブまたはソフトタブを使用するために `tab` または `space` を設定します。                                                                |
| `indent_size`               | 各インデントレベルに使用される列数とソフトタブの幅を定義する整数。 `tab` に設定すると、**`tab_width`**（指定されている場合）の値が使用されます。  |
| `tab_width`                 | タブ文字を表すために使用される列数を定義する整数。これはデフォルトで **`indent_size`** の値となり、通常は指定する必要はありません。              |
| `end_of_line`               | 改行の表現方法を制御するために `lf`、`cr`、または `crlf` を設定します。                                                                        |
| `charset`                   | 文字セットを制御するために `latin1`、`utf-8`、`utf-8-bom`、`utf-16be`、または `utf-16le` を設定します。                                        |
| `trim_trailing_whitespace`  | 改行文字の前にある空白文字を削除するために `true` を設定し、削除しないようにするために `false` を設定します。                                   |
| `insert_final_newline`      | ファイルを保存する際に末尾に改行を追加するために `true` を設定し、追加しないようにするために `false` を設定します。                             |
| `root`                      | 特別なプロパティ。ファイルの最上部にセクション外で指定する必要があります。親ディレクトリの `.editorconfig` ファイルの検索を停止するために `root=true` を設定します。 |

:::note info
翻訳者注：csvに関しては、`charset` を `utf-8-bom` とすると、エクセルで読み書きできるようになります。
:::


プロパティとその値は大文字小文字を区別しません（内部的には小文字に変換します）。

プロパティが指定されていない場合、その部分にはEditorConfigの影響はありません。

任意のプロパティに対して `unset` という値を設定することで、そのプロパティの効果を削除できます。例えば、`indent_size = unset` と設定することで **`indent_size`** プロパティを未定義にし、エディタのデフォルト設定が使用されるようにできます。

あえて指定しない方がよい場合もあります。以下にその例を示します。

- **`tab_width`** は、 **`indent_size`** の値と異ならない限り、指定する必要はありません。
- **`indent_style`** が `tab` に設定されている場合は、 **`indent_size`** を指定せずにおくことで、ユーザーが好みのインデント幅でファイルを表示できます。表示に関してはユーザーの好みに任せるのがよいと考えられる場合は、指定しないでおきましょう。
- **`end_of_line`** など、プロジェクトで標準化されていないプロパティは、指定しないほうがよいかもしれません。

このように、状況に応じて特定のプロパティを指定しない方が適切な場合もあります。よく理解し、過剰にならない程度に適切に設定を行うことが重要です。

以下のリストは、有名な順（注目されている順）に並べ替えたものです。順位は一般的な知名度や使用頻度を考慮しており、エディタやサービスごとの認知度や人気度に基づいています。

---

## ネイティブにサポートされているエディタ及びサービス

下記のエディタ及びサービスにはEditorConfigのネイティブサポートが組み込まれており、プラグインなどによって別途に組み込む必要がありません。

* [GitHub](https://github.com/RReverser/github-editorconfig#readme)
* [GitLab](https://docs.gitlab.com/ee/user/project/web_ide/index.html#configure-the-web-ide)
* [PHPStorm](https://plugins.jetbrains.com/plugin/7294-editorconfig/)
* [Vim](https://www.vim.org/)
* [Neovim](https://neovim.io/)
* [TortoiseGit](https://tortoisegit.org/)
* [EmEditor](https://www.emeditor.com/text-editor-features/coding/editorconfig-support/)
* [PyCharm](https://plugins.jetbrains.com/plugin/7294-editorconfig/)
* [WebStorm](https://plugins.jetbrains.com/plugin/7294-editorconfig/)
* [Visual Studio Professional](https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes-v15.0#coding-convention-support-through-editorconfig)
* [RubyMine](https://plugins.jetbrains.com/plugin/7294-editorconfig/)
* [Rider](https://plugins.jetbrains.com/plugin/7294-editorconfig/)
* [ReSharper](https://plugins.jetbrains.com/plugin/7294-editorconfig/)
* [elementary Code](https://github.com/elementary/code#readme)
* [Gitea](https://gitea.io/)
* [MonoDevelop](https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-mac-relnotes-v7.5)
* [Nova](https://nova.app/)
* [CodeLite](https://github.com/eranif/codelite/tree/master/EditorConfigPlugin)
* [KTextEditor](https://api.kde.org/frameworks/ktexteditor/html/)
* [Komodo](https://www.activestate.com/blog/2015/07/editorconfig-your-komodo)
* [Kakoune](https://github.com/mawww/kakoune/wiki/EditorConfig/)
* [GNOME Builder](https://wiki.gnome.org/Apps/Builder/Features#EditorConfig)
* [BBEdit](http://barebones.com/support/technotes/editorconfig.html)
* [Working Copy](https://workingcopy.app/)
* [Gogs](https://gogs.io)
* [sourcehut](https://sourcehut.org/)
* [SourcLair](https://www.sourcelair.com/features/editorconfig)
* [Code Crusader](https://sourceforge.net/projects/codecrusader/)
* [jdTextEdit](https://gitlab.com/JakobDev/jdTextEdit)


## プラグインをダウンロードする

### エディタ

以下のエディタでEditorConfigを使用するには、プラグインをインストールする必要があります。

* [Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig)
* [VSCodium](https://open-vsx.org/extension/EditorConfig/EditorConfig)
* [Emacs](https://github.com/editorconfig/editorconfig-emacs#readme)
* [NetBeans](https://github.com/welovecoding/editorconfig-netbeans#readme)
* [Notepad++](https://github.com/editorconfig/editorconfig-notepad-plus-plus#readme)
* [AppCode](https://plugins.jetbrains.com/plugin/7294-editorconfig/)
* [Atom](https://github.com/sindresorhus/atom-editorconfig#readme)
* [Brackets](https://github.com/kidwm/brackets-editorconfig/)
* [CLion](https://plugins.jetbrains.com/plugin/7294-editorconfig/)
* [Coda](https://panic.com/coda/plugins.php#Plugins)
* [Code::Block](https://github.com/editorconfig/editorconfig-codeblocks#readme)
* [Eclipse](https://github.com/ncjones/editorconfig-eclipse#readme)
* [Far Manager](https://github.com/nightroman/FarNet/tree/master/EditorKit)
* [Geany](https://github.com/editorconfig/editorconfig-geany#readme)
* [Gedit](https://github.com/editorconfig/editorconfig-gedit#readme)
* [jEdit](https://github.com/editorconfig/editorconfig-jedit#readme)
* [Lazarus](https://github.com/skalogryz/editorConfig/tree/master/lazideext)
* [Micro](https://github.com/10sr/editorconfig-micro#readme)
* [Pluma](https://github.com/fszymanski/pluma-plugins/tree/master/editorconfig)
* [Sublime Text](https://github.com/sindresorhus/editorconfig-sublime#readme)
* [Textadept](https://github.com/editorconfig/editorconfig-textadept#readme)
* [TextMate](https://github.com/Mr0grog/editorconfig-textmate#readme)


### ヘッドレスツール（※CLIコマンドってこと）

以下のヘッドレスツールでEditorConfigを使用するには、プラグインをインストールする必要があります。

* [Apache Ant](https://github.com/ec4j/editorconfig-ant-tasks)
* [Gradle](https://github.com/ec4j/editorconfig-gradle-plugin)
* [Maven](https://ec4j.github.io/editorconfig-maven-plugin/)

## EditorConfigへの貢献

### フィードバックをお寄せください

このプロジェクトは他の開発者からのフィードバックを必要としています。このプロジェクトをより良くするためのアイデアをお聞かせください。

- [メ ーリングリスト](http://groups.google.com/group/editorconfig)でEditorConfigチームにメールを送る
    - [editorconfig+subscribe@googlegroups.com](mailto:editorconfig+subscribe@googlegroups.com)にメールを送信して参加登録
- [Issueトラッカー](https://github.com/editorconfig/editorconfig/issues)でバグを報告（まず[FAQ](https://github.com/editorconfig/editorconfig/wiki/FAQ)をご覧ください）。
- [Twitterでのメッセージ](https://twitter.com/EditorConfig)も歓迎

### プラグインを作成する

EditorConfigプラグインは、EditorConfigのコアライブラリのいずれかを使用して開発できます。 EditorConfigのコアライブラリは、編集されているファイルを入力として受け取り、関連する`.editorconfig`ファイルを検索および解析し、使用するプロパティを返します。 将来の互換性のために、エディタープラグインで未認識のプロパティやプロパティ値を無視してください。新しいプロパティと許可された値が今後追加される予定です。

EditorConfigのコアライブラリは、下記のプログラミング言語に対応しています：

*   [Cライブラリ](https://github.com/editorconfig/editorconfig-core-c#readme)
*   [Pythonライブラリ](https://github.com/editorconfig/editorconfig-core-py#readme)
*   [JavaScriptライブラリ](https://github.com/editorconfig/editorconfig-core-js#readme)
*   Javaライブラリ: [EditorConfig Core Java](https://github.com/editorconfig/editorconfig-core-java#readme)および[ec4j](https://github.com/ec4j/ec4j#readme)
*   [Luaライブラリ](https://github.com/editorconfig/editorconfig-core-lua#readme)
*   [.NETライブラリ](https://github.com/editorconfig/editorconfig-core-net#readme)
*   [Rubyライブラリ](https://github.com/editorconfig/editorconfig-core-ruby)
*   [Goライブラリ](https://github.com/editorconfig/editorconfig-core-go)
*   [Rustライブラリ](https://github.com/TheDaemoness/ec4rs)

新しいプラグインの作成を計画している場合は、[メーリングリスト](https://groups.google.com/group/editorconfig)を使用してお知らせください。活動を支援するためプラグイン完成時にリンクを提供します。EditorConfigのコアをライブラリまたはコマンドラインインターフェースとして使用する場合は、[Cライブラリのドキュメント](http://docs.editorconfig.org)、[Pythonライブラリのドキュメント](http://pydocs.editorconfig.org)、または[Javaライブラリのドキュメント](http://javadocs.editorconfig.org)が役立つかもしれません。

詳細については、[プラグインの作成方法Wikiページ](https://github.com/editorconfig/editorconfig/wiki/Plugin-How-To)をご覧ください。

### 主な貢献者

コアライブラリ:

*   EditorConfig C Core: [Hong Xu](http://www.topbug.net) および [Trey Hunner](http://treyhunner.com)
*   EditorConfig Java Core: [Dennis Ushakov](https://github.com/denofevil)
*   ec4j: [Peter Palaga](https://github.com/ppalaga) および [Angelo Zerr](https://angelozerr.wordpress.com/about)
*   EditorConfig Javascript Core: [Trey Hunner](http://treyhunner.com) および [Jed Mao](http://github.com/jedmao)
*   EditorConfig Python Core: [Trey Hunner](http://treyhunner.com)
*   EditorConfig .NET Core: [Martijn Laarman](http://localghost.io/)
*   EditorConfig Ruby Core: [Joshua Peek](https://github.com/josh) および [Brian Lopez](https://github.com/brianmario)
*   EditorConfig Go Core: [Greut](https://github.com/greut) および [Andrey Nering](https://github.com/andreynering)

エディタープラグイン:

*   Atomプラグイン: [Sindre Sorhus](http://sindresorhus.com)
*   Bracketsプラグイン: [Chen-Heng Chang](http://kidwm.net/)
*   Code::Blocksプラグイン: [Hong Xu](http://www.topbug.net)
*   Emacsプラグイン: [Trey Hunner](http://treyhunner.com), [Johan Sundström](http://ecmanaut.blogspot.com), [10sr](https://github.com/10sr)
*   Geanyプラグイン: [Hong Xu](http://www.topbug.net)
*   Geditプラグイン: [Trey Hunner](http://treyhunner.com)
*   GitHubブラウザ拡張: [Ingvar Stepanyan](http://rreverser.com)
*   JetBrainプラグイン: [Kevin Bell](https://github.com/bellkev/), [Dennis Ushakov](https://github.com/denofevil)
*   jEditプラグイン: [Hong Xu](http://www.topbug.net)
*   Microプラグイン: [10sr](https://github.com/10sr)
*   NetBeansプラグイン: [Benny Neugebauer](http://www.bennyn.de/), [Michael Koppen](http://beanbelt.blogspot.de/), [Junichi Yamamoto](http://junichi11.com/)
*   Notepad++プラグイン: [Hong Xu](http://www.topbug.net)
*   Sublime Textプラグイン: [Sindre Sorhus](http://sindresorhus.com)
*   TextMateプラグイン: [Rob Brackett](http://robbrackett.com)
*   Vimプラグイン: [Hong Xu](http://www.topbug.net), [Trey Hunner](http://treyhunner.com)
*   Visual Studioプラグイン: [William Swanson](http://www.swansontec.com), [nulltoken](https://github.com/nulltoken), [Martijn Laarman](http://localghost.io/), [Arkadiy Shapkin](http://kinddragon.blogspot.com), [Jed Mao](http://github.com/jedmao)
*   Visual Studio Code拡張: [Jed Mao](https://github.com/jedmao), [Chris Dias](https://github.com/chrisdias)
*   Xcodeプラグイン: [Marco Sero](http://marcosero.com/)

EditorConfigのロゴは[Kat On](http://squirrelmuffins.com)および[Amon KeishimaTrey Hunner](https://pittankopta.net/)および[Hong Xu](http://www.topbug.net)

[](http://www.topbug.net)