公式サイトの内容を意訳しました。構成が同じなので、見比べて理解を深めることができると思います。
EditorConfigって何?
EditorConfigは、異なるエディタやIDEを使用する複数の開発者が同じプロジェクトで作業する際に、一貫したコーディングスタイルを維持するのに役立ちます。EditorConfigプロジェクトは、コーディングスタイルを定義する .editorconfigファイル と、その定義を反映してソースコードのスタイルを修正する テキストエディタプラグイン のセットで構成されます。
コーディング規約とは別の話
コーディング規約は、目視前提の論理的なスタイルに関するルールや作法を指します。一方、EditorConfigは、改行コードやインデントに用いるホワイトスペースの数、エンコードなど、見た目では分かりにくい物理的なスタイルを揃えるためのツールであり、開発環境の違いにより発生する意図しない差分を防ぎます。
EditorConfigはシンプルなので、Gitなどのバージョン管理システムと相性がよいです。
EditorConfigファイルの見た目はどんな感じ?
EditorConfigの正式な仕様も参考にしてください。
サンプルファイル
以下は、PythonとJavaScriptファイルの改行スタイルとインデントスタイルを設定する例の.editorconfig
ファイルです。
# 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
より実用的なEditorConfigファイルの例については、Wikiをご覧ください。
EditorConfigファイルを使用するさまざまな公式プロジェクト
.editorconfigファイルはどこに配置するのがよいですか?
エディタでファイルを開くと、EditorConfigプラグインは開いたファイルのディレクトリおよびすべての親ディレクトリ内の.editorconfig
という名前のファイルを探します。.editorconfig
ファイルの検索は、最上位のディレクトリに到達するかroot=true
と指定されたEditorConfigファイルが見つかると停止します。
root=true
の指定がないとルートまでたどります。プロジェクトトップに配置する .editorconfig
には記述しておくことをおすすめします。
EditorConfigファイルは上から下へと読み取られ、直近のルールが優先されます。該当するEditorConfigセクションのプロパティは読み取られた順に適用されるため、より近いファイルのプロパティが優先されます。
Windowsユーザー向け: Windows Explorerで.editorconfig
ファイルを作成できない場合は、.editorconfig.
(末尾のドットに注意)という名前のファイルを作成してください。自動的に.editorconfig
にリネームされます。
ファイル形式の詳細
EditorConfigファイルは、Python ConfigParserライブラリで使用されるINI形式と互換性があります。以下に、その特徴と使用方法を説明します。
セクション名
- セクション名は
[
と]
で囲まれます。 - ファイルパスのグロブパターンとして記述され、大文字小文字を区別します。
- パターン形式は.gitignoreに似ています。
- ファイルパスの区切り文字には前方スラッシュ(
/
)を使用します。
コメント
- コメントはシャープ(
#
)またはセミコロン(;
)で始まります。 - コメントは独立した行に記述します。
EditorConfigファイル自体のエンコードと行区切り
- UTF-8エンコードで記述します。
- 行区切りには
CRLF
またはLF
を使用します。
ルールの優先順位
- EditorConfigファイルは上から下へと順に読み取られます。
- 最後に読み取られたルールが反映されます。
以下に、ファイルパスのグロブパターンと現在サポートされているEditorConfigプロパティについて説明します。
ワイルドカードパターン
セクション名でワイルドカードとして認識される特殊文字は以下の通りです。
ワイルドカード | 説明 |
---|---|
* |
パスセパレータ(/ )を除く任意の文字列に一致 |
** |
パスセパレータ(/ )も含めた任意の文字列に一致下層のディレクトリも含めたマッチング |
? |
任意の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の間の任意の整数に一致 num1とnum2は正または負のいずれか |
これらの特殊文字はバックスラッシュでエスケープし、ワイルドカードパターンとして解釈されないようにできます。
複数の拡張子に対応したい場合
-
[*.{css,scss,js,ts}]
正しい書き方 -
[{*.css,*.scss,*.js,*.ts}]
これも可 -
[*.css,*.scss,*.js,*.ts]
認識されない書き方
サポートされているプロパティ
主なプロパティを下記に列挙します。Wikiにはプロパティの完全なリストがありますので、興味があればご覧ください。エディタによってはプロパティのサポートが完全でないことがあります。
プロパティ | 説明 |
---|---|
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 を設定します。 |
翻訳者注: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
- GitLab
- PHPStorm
- Vim
- Neovim
- TortoiseGit
- EmEditor
- PyCharm
- WebStorm
- Visual Studio Professional
- RubyMine
- Rider
- ReSharper
- elementary Code
- Gitea
- MonoDevelop
- Nova
- CodeLite
- KTextEditor
- Komodo
- Kakoune
- GNOME Builder
- BBEdit
- Working Copy
- Gogs
- sourcehut
- SourcLair
- Code Crusader
- jdTextEdit
プラグインをダウンロードする
エディタ
以下のエディタでEditorConfigを使用するには、プラグインをインストールする必要があります。
- Visual Studio Code
- VSCodium
- Emacs
- NetBeans
- Notepad++
- AppCode
- Atom
- Brackets
- CLion
- Coda
- Code::Block
- Eclipse
- Far Manager
- Geany
- Gedit
- jEdit
- Lazarus
- Micro
- Pluma
- Sublime Text
- Textadept
- TextMate
ヘッドレスツール(※CLIコマンドってこと)
以下のヘッドレスツールでEditorConfigを使用するには、プラグインをインストールする必要があります。
EditorConfigへの貢献
フィードバックをお寄せください
このプロジェクトは他の開発者からのフィードバックを必要としています。このプロジェクトをより良くするためのアイデアをお聞かせください。
-
メ ーリングリストでEditorConfigチームにメールを送る
- editorconfig+subscribe@googlegroups.comにメールを送信して参加登録
- Issueトラッカーでバグを報告(まずFAQをご覧ください)。
- Twitterでのメッセージも歓迎
プラグインを作成する
EditorConfigプラグインは、EditorConfigのコアライブラリのいずれかを使用して開発できます。 EditorConfigのコアライブラリは、編集されているファイルを入力として受け取り、関連する.editorconfig
ファイルを検索および解析し、使用するプロパティを返します。 将来の互換性のために、エディタープラグインで未認識のプロパティやプロパティ値を無視してください。新しいプロパティと許可された値が今後追加される予定です。
EditorConfigのコアライブラリは、下記のプログラミング言語に対応しています:
- Cライブラリ
- Pythonライブラリ
- JavaScriptライブラリ
- Javaライブラリ: EditorConfig Core Javaおよびec4j
- Luaライブラリ
- .NETライブラリ
- Rubyライブラリ
- Goライブラリ
- Rustライブラリ
新しいプラグインの作成を計画している場合は、メーリングリストを使用してお知らせください。活動を支援するためプラグイン完成時にリンクを提供します。EditorConfigのコアをライブラリまたはコマンドラインインターフェースとして使用する場合は、Cライブラリのドキュメント、Pythonライブラリのドキュメント、またはJavaライブラリのドキュメントが役立つかもしれません。
詳細については、プラグインの作成方法Wikiページをご覧ください。
主な貢献者
コアライブラリ:
- EditorConfig C Core: Hong Xu および Trey Hunner
- EditorConfig Java Core: Dennis Ushakov
- ec4j: Peter Palaga および Angelo Zerr
- EditorConfig Javascript Core: Trey Hunner および Jed Mao
- EditorConfig Python Core: Trey Hunner
- EditorConfig .NET Core: Martijn Laarman
- EditorConfig Ruby Core: Joshua Peek および Brian Lopez
- EditorConfig Go Core: Greut および Andrey Nering
エディタープラグイン:
- Atomプラグイン: Sindre Sorhus
- Bracketsプラグイン: Chen-Heng Chang
- Code::Blocksプラグイン: Hong Xu
- Emacsプラグイン: Trey Hunner, Johan Sundström, 10sr
- Geanyプラグイン: Hong Xu
- Geditプラグイン: Trey Hunner
- GitHubブラウザ拡張: Ingvar Stepanyan
- JetBrainプラグイン: Kevin Bell, Dennis Ushakov
- jEditプラグイン: Hong Xu
- Microプラグイン: 10sr
- NetBeansプラグイン: Benny Neugebauer, Michael Koppen, Junichi Yamamoto
- Notepad++プラグイン: Hong Xu
- Sublime Textプラグイン: Sindre Sorhus
- TextMateプラグイン: Rob Brackett
- Vimプラグイン: Hong Xu, Trey Hunner
- Visual Studioプラグイン: William Swanson, nulltoken, Martijn Laarman, Arkadiy Shapkin, Jed Mao
- Visual Studio Code拡張: Jed Mao, Chris Dias
- Xcodeプラグイン: Marco Sero
EditorConfigのロゴはKat OnおよびAmon KeishimaTrey HunnerおよびHong Xu