まくろぐ

EditorConfig でコーディングスタイルを統一する

更新:
作成:

EditorConfig とは

/p/7aoa6x5/img-001.png

EditorConfig.editorconfig ファイル)を導入すると、各種エディタ(Visual Studio、Android Studio、Vim など)に共通のコーディングスタイルを設定することができます。

ソフトウェア開発プロジェクトでは、通常なんらかのコーディングルールが決められています。 ただ、開発者ごとに使用するエディタ、IDE が異なると、設定方法を統一できないという問題が発生します。 EditorConfig は、特定のエディタに依存しない、コーディングスタイルを記述するためのフォーマット(およびツール群) です。

EditorConfig で設定可能な項目は、エンコーディング形式や改行コード、インデントサイズといったごく基本的な項目のみですが、最低限の記述スタイルをプロジェクト全体で素早く統一することができます。

EditorConfig の導入

設定ファイルの作成

EditorConfig の導入はとても簡単で、次のような設定ファイルをプロジェクトのルートに作成するだけです。

.editorconfig
# ここが最上位の設定ファイル
root = true

# 全種類のテキストファイルの基本設定
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

# あとは、ファイルの種類ごとに設定を上書き
[*.{js,jsx,ts,tsx}]
indent_size = 2

[*.yml]
indent_size = 2

[*.md]
trim_trailing_whitespace = false

各プロパティの内容は、ほぼ自明ですが、それぞれ次のような意味を持っています。

プロパティ名設定例説明
roottrue / falseこれがルートの設定ファイルなら true
indent_styletab / spaceインデントをタブにするかスペースにするか
indent_size4インデントのスペース数
end_of_linelf / cr / crlf改行コード
charsetutf-8 / utf-8-bom / latin1ファイルのエンコーディング形式
trim_trailing_whitespacetrue / false行末のスペースを削除するか
insert_final_newlinetrue / falseファイル末尾に空白行を入れるか

各エディタの EditorConfig プラグインは、編集中のファイルを起点にして、上位ディレクトリの .editorconfig ファイルを検索します。 上の設定例のように、root プロパティが true になっている .editorconfig ファイルが見つかると、それ以上ディレクトリを上って検索しないようになります。 プロジェクトのルートに置く設定ファイルには、root = true と記述しておくのがよいでしょう。

設定可能なプロパティの詳細は、下記サイトの一覧を参照してください。 max_line_length など、特定のエディタでしかサポートされていないプロパティもあります。

各エディタへのプラグイン導入

.editorconfig の設定に従って実際にフォーマットを行うには、各エディタに EditorConfig プラグインを導入する必要があります。

Visual Studio、Android Studio (IntelliJ IDEA) などは、最初からプラグインが組み込まれた状態でリリースされているので、特に何もインストールする必要はなく、.editorconfig ファイルを配置するだけで、フォーマット時 (Ctrl + Alt + L) の振る舞いに反映されます。 設定画面を見ると、デフォルトで EditorConfig が有効になっていることが分かります。

/p/7aoa6x5/img-002.png
図: Android Studio の設定画面

一方、Vim などのエディタでは、EditorConfig プラグインを別途インストールする必要があります。 各エディタのプラグインは下記からダウンロードできます。

(各エディタのアイコン画像をクリックすると、該当ページにジャンプします。分かりにくい…)

(おまけ)パターンに一致するファイルのルールをオーバーライドする

.editorconfig ファイルの中で、同じ名前のプロパティが複数個所で設定されている場合は、最後に見つかったものが優先的に使われます。 この性質を利用して、特定のファイルに対するルールだけをオーバーライドすることができます。

例えば、ユニットテスト関連のファイルだけルールを緩くしたいという場合は、次のような感じで設定値を上書きするようにします(優先度の高いものが下に来るように記述するのがポイントです)。

.editorconfig
# Kotlin のファイルは基本 100 文字で折り返し
[*.{kt,kts}]
max_line_length = 100

# 名前が Test で終わるファイルでは長い関数名を付けたいことがあるので折り返し制限しない
[*Test.kt]
max_line_length = off

# test ディレクトリ以下のファイルも同様に折り返し制限しない
[test/**.kt]
max_line_length = off

(おまけ)ktlint などのフォーマットツールでの利用

Kotlin の lint ツールである ktlint は、設定フリーなツール(デフォルトで Kotlin の標準的なルールに従う)として開発されていますが、プロジェクトに .editorconfig ファイルが存在する場合はその設定に従って Kotlin コードのスタイルチェック(および自動フォーマット)を行うようになっています。 例えば、EditorConfig の indent_size が定義されていると、ktlint はその設定に従ってインデントのチェックを行います。

ktlint のデフォルトのルールは、Standard rules のところに一覧があります。 それぞれのルールには ID が割り当てられており、.editorconfig 内で個別に無効化することができます。 例えば、ktlint はデフォルトでワイルドカードを使ったインポートを禁止 (ID: no-wildcard-imports) していますが、このルールを無効にするには、次のように disabled_rules でルール ID を指定します(カンマ区切りで複数指定可能です)。

.editorconfig
# ktlint のルールを無効化する
[*.{kt,kts}]
disabled_rules = no-wildcard-imports

関連記事

まくろぐ
サイトマップまくへのメッセージ