タブ・スペース戦争

www.gizmodo.jp

なんかこの海外ドラマ面白そう・・・。

さて、タブ・スペース戦争も昔の話って感じで、いつ頃からか思うようになった事。

所感

 まず、インデントはタブの方が楽だと思って使ってました。その考えはその時からずっと変わらないだろうとも思ってました。思ってたんですけど、いつ頃だったかインデントにスペースを使っているプロジェクトに関わる事になって考えを改める事になりました。最初に関わった時はやれやれって思っていたんですけど、でもそれを使い続けていても特に不便を感じなかったという事があるんですね。 そうして私はインデントにスペースを使うことへの抵抗がなくなっていき、もうどっちでもいいかなという感じで見れるようになりました。 とりあえず統一されている方がいいのはありますが、混在される場合は・・・混在させて使ってる人は本当にそれが使いやすいのか、個人的にはまだ疑問がありますが、それも自由に選択できる方がいいとは思います。
プロジェクトでルールが決まってるなら何も考えずに相手に合わせるだけです。

理由

 まず、タブの問題が何かといえば環境によって表示が異なってくるという点なのでしょう。大体[幅:2/4/8]にされてるとしてタブはどの幅に設定されてたのかな?と他人には分からない事だとか。 それが社内や決められたチーム内での開発であれば同じ開発環境と設定などのルールを決められるので合わせない人がいても合わせてってお願いする程度だと思うんですが、 OSSの開発になると、開発環境は人それぞれで統一されない事が殆どなんですね。だから見た目がタブ幅の設定などに影響されないスペースを選択する方が良いという事になってきます。まだ見ぬ多くの人の事を考えてスペースを選択する。 例えば、作った本人としてのAさんの環境では揃えられたコードが見れたとしても、それを見る他のNさんの環境では表示が崩れるという事があり得るので。 OSSでは特に環境の違いがバラバラになる事を勘案して、共有されるコードについてはインデントをスペースにする方が全体への配慮として優しいかもですね。

でも

 でも自分の好きなスタイルで開発したいですよねー。プロジェクトには合わせなければならないけど、それでもスペースorタブ自分の好きなスタイルで開発したい。問題ないです! 自分の好きなスタイルで自由にやっちゃいましょうー。それは単に自分のローカル環境でだけちょっと変換してやればいいだけの事ですから。共有物に余分な変更を入れなければローカルでは好きにできるってわけです。
 エディタとフォーマッターを使って解決です。チェックアウトしたものを自分好みに自動整形、共有する前に元の形に合わせて自動整形する。gitでも設定してできそう(課題:分からないから後でやれたらやりたい)。(とりあえず計算資源が安くなってるっていいね) 例えば空白インデントがルールだったら、行先頭に空白n個があったらタブに変換する、元に戻してから共有する。 コミットする前にフォーマッターを挟むように示し合わせておくのもいいね。
 そもそも、スペースを使ってても不便を感じなかったのはエディタの力が大きいですね。コーディングに特化したエディターはコーディングをしやすくするための工夫が沢山考えだされてきて、インデントという概念も昇華してきているのでスペースでもタブ感覚で操作してくれるようになってるし、中にはvi操作にするプラグインなどもあって慣れてしまえばテキストの操作がより効率的にできるようになります。慣れるまでがちと大変かもですが。*1
そんな感じでたまに新発見があると、いつまでたってもチュートリアルが終わらない感じになるですね。

C系ならclang-formatかな、
http://clang.llvm.org/docs/ClangFormat.html
web系だとprettierがいいらしい。わかんないけど
https://github.com/prettier/prettier

差分の心配もそんなないかな、gitならタブ・スペース無視するオプションがあるし。 (設定の方は後で調べておきたい。)

(:エディタの話忘れてた、後で入れておきたい。)

*1:emacsは昔トライしてみたんですがメタキーがちょっと...、憧れのemacs