常日頃からコーディング規約について考えていますか?
僕は常日頃は考えていません。しかしコーディング規約は大切だと思っています。
なぜ大切だと思っているかを言語化しておきます。
Q. そもそもコーディング規約とはなんなのか
A. weblioから引用
コーディング規約とは、ソフトウェア開発において、企業やオープンソースコミュニティやあるいは特定のプロダクトごとに定められた、プログラムのコーディングに当たっての統一的なガイドラインのことである。
Q. なぜコーディング規約が必要なのか
A. コードを読むコストが下がるから
コードは書かれる回数よりも読まれる回数のほうが圧倒的に多いので、コーディングのコストは読むときに発生することになります。そのため、コードは読みやすくしておくべきなのです。読みやすくするためには、同じスタイルで統一されている方がよいということになります。
Q. どのコーディング規約が良いのか
A. 一般的に使われているもの
僕の考えた最強のコーディング規約であると嬉しいんですが、複数人で開発する場合は僕の考えた最強のコーディング規約と相手の考えたコーディング規約がぶつかる可能性があります。個人の好みによってぶつかります。
大事なのは、規約決めて揃えることが重要です。
できるだけ自分で作らず、一般的なコーディング規約を導入しましょう。(チームメンバーとモメることも減ります)
普段の開発は JavaScript
をよく使うので例を上げると、Airbnb JavaScript Style Guideを使います。
Q. どうコーディング規約を守っていくか
A. 機械的に判定してもらいCIを回す
一つ一つ覚えるのは厳しいので、機械的に判定してもらうのが最適です。
(感情に左右されない + 不毛なレビューを減らせます)
CircleCI などを利用してPRをマージするためにはコーディング規約が守られていないとだめといった形にするべきです。
普段の開発は JacaScript
をよく使うのでチェックするツールの例を上げると、ESLintを利用します。
Q. レベルが高いと自負している人は守らなくても良いか
A. 自負しないで守れ。
繰り返しになってしまいますが、コーディング規約の制定はメジャーなものをできるだけ踏襲して、機械的に判定してもらい続けるべきです。
例えば、新しく別の分野(言語が違うところ)から来た人がスーパーできる人だったとして(スーパーできる人は少なくとも規約の大切さを知ってるというツッコミはなしで) JavaScript
で書かれてるコードを C言語
的な規約(ガッツリ手続き型でオラついたり)で書き始めたらチームにとって害悪でしかないということがわかるかと思います。
Q. すでに書かれているコードはどうするのか
A. 触るな!
修正したいですが、既存のコードは今後二度と更新されない可能性があります。あとバグを埋め込む可能性があります。
コーディング規約を守っていないから修正する以外のタスクが来るまでは触らないようにします。
(やることなくて困ってる人がいる場合はやればいいと思いますが、そんな人いないはず)
Ruby
で開発する場合は Rubocop
を利用し rubocop --auto-gen-config
を実行することで現在の問題点を無視することができるようになります。
eslint
で同じようなことを行いたいので eslint-auto-gen-configを作りました。(eslint
の出力結果を overrides
の形式に書き換えてくれます)
まとめ
コーディング規約の大切さをなんとなくでもわかってもらえたかと思います。
規約はできるだけ一般的なものを利用し、守れているかは機械的に判断してもらう。これだけでコードを読む時間すなわちレビューのコストが下がるので、チームメンバーならば理解しやすい良いコードが生まれているはずです。