はじめに
GitHubでプルリクエストのコードレビューをしたりすると、たまにこんな赤い丸⛔️を見かけませんか?
これはファイルの末尾が改行文字で終わっていないことを示す警告マークです。
改行文字を \n
で可視化するなら、本来は
end\n
end\n
こうなっているべきなのに、実際は
end\n
end
こうなって保存されている、ということです。
実際問題、ファイル末尾が改行文字で終わっていないからといってプログラムがおかしな動きをするということは滅多にありません。
ですが、POSIX1の規格では「テキストファイルの末尾は改行文字で終わらないといけない」と決まっているため2、どこかで思いがけないトラブルが起きるかもしれません。
たとえば、上の画像に示したfizz_buzz.rb
は一見11行あるように見えますが、wcコマンドで行数を調べると「10行」と表示されます。
# ファイルの末尾が改行文字で終わっていない場合
$ wc fizz_buzz.rb
10 28 137 fizz_buzz.rb
ファイルの末尾が改行文字で終わっていれば11行と表示されます。
# ファイルの末尾が改行文字で終わっている場合
$ wc fizz_buzz.rb
11 28 138 fizz_buzz.rb
こんな感じでファイルの末尾が改行文字で終わっていないと「あれ?」と思うような不思議な挙動に遭遇する可能性があります。
とはいえ、人間がいちいちファイルの末尾は改行文字で終わらせようと努力するのは非効率です。
エディタやIDEの設定で自動的に改行文字が付与されるようにしましょう。
RubyMineで自動的に改行文字を付与する設定はどこ?
RubyMineであれば、
Settings > Editor > General > Ensure every saved file ends with a line break
のチェックをオンにすれば自動的に改行文字が付与されます。
RubyMineに限らず、JetBrains社製のIDEであればどれも同じ設定でいけるはずです。
- IntelliJ IDEA
- PyCharm
- WebStorm
- PhpStorm
- AppCode
- CLion
- DataGrip
- Rider
- GoLand
- etc
VS Codeの場合は?
VS Code (Visual Studio Code) の場合は、
Settings > "Insert Final Newline" で検索 > Insert Final Newline
のチェックをオンにすれば自動的に改行文字が付与されます。
Vimの場合は?
Vimはデフォルトで末尾に改行文字が付与されます。
あえてその動作をオフにするオプションもあるみたいですが、特別な理由がない限り、わざわざ設定する必要はないでしょう。
まとめ
というわけでこの記事ではRubyMine (およびJetBrains系IDE、VS Code、Vim) でファイルの末尾に改行文字を自動的に付与する設定を紹介しました。
一度設定を入れてしまえばあとは何も考えずに済むのですが、この設定を入れていない人も多いのか、コードレビューをしているとまあまあの頻度で「あの赤い丸⛔️」に遭遇します。
みなさんが使っているエディタやIDEで、ちゃんとこの設定が入っているかチェックしてみてください。
また、コードレビュー中に「あの赤い丸⛔️」を見かけたらこの記事のURLを教えて「ちゃんと設定しておこうね!」と伝えてやってください😄
-
Portable Operating System Interface=オペレーティングシステム (OS) の標準的なインタフェースおよび環境を定義するIEEE規格 ↩
-
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_206 ↩