インデントおよび行末は EditorConfig で始末する

公開:2020/09/22
更新:2020/10/12
2 min読了の目安(約2500字IDEAアイデア記事

この記事は Qiita から移行・再構成したものです。

EditorConfig はテキストエディタや IDE (Integrated Development Environment; 統合開発環境) などで文字コードやインデントや改行コードなどの設定を共有するための仕組みで,メジャーなエディタや IDE なら既定で組み込まれているか拡張機能で導入することができる。これによって開発環境や個人設定の差異によるコーデイング・スタイルの混乱を抑えることができる。

EditorConfig による設定

EditorConfig を有効にするにはプロジェクトのトップ・フォルダに .editorconfig ファイルを置けばよい。たとえば私がよく使う .editorconfig ファイルの中身はこんな感じ。

.editorconfig
root = true

[*]
end_of_line = lf
charset = utf-8
indent_style = tab
indent_size = 4
tab_width = 4
trim_trailing_whitespace = false
insert_final_newline = true

[*.go]
trim_trailing_whitespace = true

[*.md]
indent_style = space
indent_size = 4

[*.yml]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true

EditorConfig はフォルダを遡って .editorconfig ファイルを探し,フォルダの上から順番に評価していく。 root = true の記述がないとどこまでも上の階層に遡っていくので,プロジェクトのトップ・フォルダの .editorconfig ファイルには必ずこれを記述すること。

  • [...] は対象となるファイルを指定している。 [*] なら全てのファイルが対象, [*.go] は拡張子が go のファイルが対象となる
  • indent_style はインデントのスタイルを指定する。 tab または space を指定する
  • indent_size はインデントの幅を指定する。 indent_styletab の場合は tab_width で指定するようだ
  • end_of_line は改行コードを指定する。 lf, cr, crlf から選択できる
  • chaset は文字エンコーディングを指定する。 latin1, utf-8, utf-8-bom, utf-16be or utf-16le から選択できる。残念ながらこれ以外の文字エンコーディングについてはエディタ側の実装に依存する
  • trim_trailing_whitespacetrue にすると行末の空白文字を削除してくれる
  • insert_final_newlinetrue にするとファイルの末尾が改行文字ではない場合に補完してくれる

詳しい仕様については仕様書ページを参考にどうぞ。ただしエディタや IDE によっては全ての機能を網羅していない場合があるのでご注意を。

EditorConfig によるコーディング規約の統一

こういう仕組みがあればドキュメントで「コーディング規約」を周知しなくても .editorconfig ファイルをリポジトリに放りこんでおけば済む[1]。というかリポジトリを作ったらまず .editorconfig ファイルをセットするよう習慣づけるべきだろう。

まぁ,最近は Go や Rust みたいに公式の整形ツールが用意されている言語もあるので[2],昔ほどの需要はないかもしれないけど。

参考

脚注
  1. それでも,曖昧な記述を許容する言語ではコーディング規約がないと困るかもしれないが。 ↩︎

  2. GitHub で見かける Go パッケージでは pull request を発行する前に gofmt などで整形することを要求しているものもある。 ↩︎