技術関係

「行末改行って必要?」「インデントのタブとスペースってどっちがいいの?」とかのコード規約の話

「ATOM」「SublimeText」 「Intellij IDEA」「Visual Studio Code」等、エディタには便利な機能が備わっています。

「行末改行挿入」や「タブのスペース変換」などもその機能に該当します。

 

そんな便利機能を

「とりあえず捗るらしいから設定しておく」

という感じで設定している方もエンジニア初心者の方も少なくないと思います。

 

自分も最初は分からず設定していましたが、ちゃんとした理由があります。

今回は「何でこんな設定をしているのか?」という疑問を解消するべく調べてみました。

スポンサーリンク
スポンサーリンク

インデントはタブかスペースか論争(2個?4個?)

言語や好みによってインデントのスペースは「2個派・4個派・8個派」などが存在します。

 

更に、文化によっては

「スペースでのインデント」ではなく「タブでインデント」

する事もあります。

 

Rubyからプログラミングを始めた自分は、勧められるがまま「スペース2個のインデント」を使用していました。

実際にRubyのスタイルガイドではスペース2個のインデントが推奨されています。
fortissimo1997/ruby-style-guide

言語とその規約次第で決まるものがほとんど

Rubyではスペース2個が主流です。

しかし、他の言語では全く違うインデントが主流の場合もあります。

つまりインデントのやり方で「スペースが悪い、タブが悪い」という話ではなく

何故そのルールなのか、というのは

「言語の規約やコミュニティの好み次第」

という事です。

 

一番やってはいけないのは、「インデント方法を混同させる」ことです。

実際の自分が行うプロジェクトの規約に則って、統一しましょう。

設定方法

ちなみに自分は現在「SublimeText」を使っていますが、Sublime Textでの設定はこんな感じ。

Preferences -> Settings 

"translate_tabs_to_spaces": true,
"tab_size": 2,

 

この設定で「Tab使用時」に「スペース2個でインデント」が行われるよう変換してくれます。

参考

「teratail」の質問から。回答が29も付いていて盛り上がってる議題
インデントにタブを使うことのデメリット

「Stack Overflow」の質問から。こちらでも慣習や規約の問題という回答あり。
Rails coding standards – Why 2 space indentation? / StackOverflow

行末の空白削除と改行は何故しなきゃいけないの?

次は「行末の空白削除と改行」について。

no new line at end of file は何故起こる?

よくありがなのがこれ。
GitHub上でのファイルが「No new line at end of file」と警告が出されています。


理由は明白で「コード行末に改行がないから」です。

対処方法はエディタで「行末の空白削除と改行」を設定するだけです。

またしても「SublimeText」だとこんな感じの設定値(他エディタは別途)

"ensure_newline_at_eof_on_save": true,
"trim_trailing_white_space_on_save": true,

 

どんなエディタでも同じような設定はありますが、やってることは

「行末の不要なスペースがある場合削除」かつ「行末に改行を自動挿入」

をする設定。

 

でも果たしてなんでこの設定が必要なんでしょうか?

なぜ行末空白削除と改行が必要なのか?

自分のプログラマーデビュー当初は、行末改行を入れずにレビューで指摘されていました。

手動で入れるのも手間なので、ここもエディタ側で設定しておいたほうがいいです。

 

しかし何で行末改行が必要なのか?と、疑問に思ったらこういうことらしいです。

テキストファイルとは、いくつかの行の集合である。そして、行とは改行コードで区切られるまでの、一連のテキストデータの連続である。

なぜ最終行に改行を入れるのですか? / teratail

 

この説明が一番しっくり来ました。

つまり、

 

「行+改行」があって初めて「行」になる

 

ということ。

POSIX

Stack Overflowにも同じような質問がありました。

Why should text files end with a newline? / StackOverflow

Because that’s how the POSIX standard defines a line:

それが「POSIX」という仕様に則った行の定義の仕方。

POSIXとは?
http://e-words.jp/w/POSIX.html

 

実際に「C, C++」では、改行なしのソースファイルだと未定義扱いになり誤作動を引き起こす、とのこと。

ちなみにRubyではそういった誤作動は起きませんが、慣習的に行末改行はしておきましょう。

参考

CとC++の規格での行末改行の話
[迷信] ソースファイルの末尾に } / 株式会社きじねこ

「何故rails g で作ったファイルに行末改行があるのか」
Why does Ruby on Rails generate add a blank line to the end of a file? / StackOverflow

まとめ

チームで開発するのであれば必ずそのプロジェクトの規約に則ってコードを書こう。

足並みを揃えないと無駄な差分発生など、開発に少なからず影響を与えます。

 

おわり

コメント

タイトルとURLをコピーしました