チームでRuby on Railsを使ったWebシステムを開発するなら、コーディング規約に従ったプログラミングを求められます。この場合のコーディング規約とは面倒な規則ではありません。チームメンバーに見せたり後から見直しする際に読み易くしたり、ミスに気が付きやすくするためのルールです。うまく活用すれば効率よくプログラミングできます。
今回はコーディング規約の基本とRubyのプログラミングでコーディング規約にしたいポイントについて解説します。
そもそもコーディング規約とは
Rubyには公式のコーディング規約はありませんが、他の人のプログラムを見る機会の多いチームで開発するプロジェクトではコーディング規約は必須です。ではそもそもコーディング規約とは何でしょうか。次からコーディング規約の基本について解説します。
プログラマが守るルール
コーディング規約とは、プログラムを作る際にプログラマに守らせるルールを集めたものです。なおプログラミング言語は、コンピューターが処理する内容を人が読み書きできるようにしたものです。そしてプログラミングの文法さえ守っていれば、自由に記述できます。
プログラミング言語によっては、長いプログラムを1行で書くことが可能です。しかし、それではメンテナンスができません。他の人がそのプログラムを読み、その一部を書き換えられるように、一定のルールが必要です。そして、そのようなプログラマに守らせたい、プログラミングのルールがコーディング規約です。
コーディング規約の目的とは
コーディング規約を決めている会社がたくさんありますが、その規約にはプログラマが守るべきルールが幾つも記載されています。では、なぜこれだけのルールが必要なのでしょうか。それはコーディング規約が、プログラムの保守性を保ち、プログラムの品質の一定に保つために必要とされるからです。
例えば自分が日常的に書いているプログラムのフォーマットと同じフォーマットでチームメンバーが書いていれば、メンバーが書いたコードをレビューしたり、修正する時間を短縮できます。さらに記述ミスに気が付きやすい書き方をしていれば、プログラムを書いている最中に気付くことも可能です。
そのためチームでソフトウェアを開発する場合、コーディング規約に従ってコードを記述するのが常識と言えるでしょう。
Rubyのコーディング規約とは
プログラミング言語によっては、その文法にコーディング規約が組み込まれており、そのようなプログラミング言語を使えば自然にコーディング規約に従ったプログラムを作れます。しかし、Rubyにはそのような仕組みはありません。
プロジェクトにRubyを使う場合、プログラマがそれぞれが所属する組織の決めたコーディング規約に従う必要があります。もし、自分の職場で文書化されたコーディング規約があれば、それに従ってください。
なお、Rubyの公式なコーディング規約はありませんが、推奨されているコーディング規約ならあります。もし、明確なコーディング規約の無い組織で働く場合は、最低限、推奨されているコーディング規約に従いましょう。
Rubyコーディング規約の概要
Rubyには公式なコーディング規約はありませんが、Rubyの普及と発展のために活動しているRuby Associationでは、参考となるコーディング規約を紹介しています。その参考となるコーディング規約の概要について紹介します。
読みやすい書き方
コーディング規約としてよく用いられるルールが読みやすい書き方に関する規約です。繰り返し処理やif構文でインデントを設定したり、演算子の前後などにスペースを挿入し、区切りとなる場所に改行を入れるといった、書き方がこれに該当します。
例えば下記の例を見てください。Rubyのコーディング規約を無視したプログラムの例と同じ処理をRubyのコーディング規約を考慮して書いたプログラムの例です。読みやすいと感じるのではないでしょうか。
Rubyのコーディング規約を無視したプログラムの例
time.each do |item| msg="time: "+String(item) if(item==max)then puts(msg+" MAX") else puts(msg) end end
Rubyのコーディング規約を考慮したプログラムの例
time.each do |item| msg = "time: " + String(item) if( item == max ) then puts(msg + " MAX") else puts(msg) end end
クラスやメソッドの命名規則
チームメンバーの書いたプログラムを読んで際、クラス名や変数名が一目で区別できれば、書かれた内容を追うのも容易です。そのためRubyのコーディング規約では、クラスやメソッドの命名規則も推奨しています。
具体的には次の命名規則を検討してください。
- モジュール名・クラス名
単語の一文字目を大文字にする。もし複数の単語を組み合わせる場合は’_’などの区切文字は使用しない。
例:ExampleClass - メソッド名
すべて小文字とする。もし複数の単語を組み合わせる場合は’_’などの区切り文字を使う。
例:add_string - 変数
ローカル変数の変数名は全て小文字とし、数を数える変数にi, j, kや、クラス名を省略したものを変数名にする。また、インスタンス変数など複数のメソッドで共通に使えう変数では、小文字の複数の単語を_’などの区切り文字で結合して使用する。
例:i, j, k, ec, @instance_valiable, @@class_valiable
ミスを防ぐための工夫
プログラムを書いていると、自分の意図した使われ方では正常に動くものの、意図しない使われ方をされると誤動作する処理を書いてしまうことがよくあります。そして、プログラムコードの書き方を工夫するだけで、そういったミスに気が付くケースもあります。
そのようなプログラミングでミスを防ぐための工夫も、コーディング規約の重要な役割です。先ほど紹介したスペースや改行を使うことも、プログラムを読みやすくすることでミスを見つけやすくする工夫の1つです。さらに、次のようなことをコーディング規約として決めるケースがあります。
例えば、for構文を使わずにeachメソッドなどを使う、条件によってif構文とunless構文を使い分ける、3項演算子をネストしないなど、コーディング規約として検討してください。
Rubyのコーディング規約を使ってもらうには
Rubyに限らずチームでWebシステムを開発するなら、コーディング規約を守ることが大事です。とはいえ、単に使ったから守れと命令しても、なかなか守ってもらえません。そこでRubyのコーディング規約を使ってもらうために、組織的にやってほしいことを紹介します。
コーディング規約を使う理由を示す
ルールを守るのは、そのルールが必要だとみんなが理解しているからです。これはコーディング規約を守ってもらう場合にも言えることです。
会社の決まり事として、または上司が決めたこととして、チームメンバーに守れと命令しても、なぜ守らなければならないか理解できなければ、必ず守らない人が現れます。もしコーディング規約を作るのであれば、なぜ、それが必要なのかをメンバーに理解してもらいましょう。
Rubyのスタイルに合っているか
プログラミング言語やフレームワークにより、コーディング規約が少しずつ違います。そのため違うプログラミング言語で利用されているコーディング規約がRuby on Railsによるシステム開発でも使えるとは限りません。場合によっては無駄なことをさせられている、と思われてしまいます。
そのためRuby on Railsを使うプロジェクトでは、Rubyのプログラミングに合ったコーディング規約でなければなりません。また、人に守らせるだけではなく、エディタなどに組み込むことで、コーディング規約に合っているかを自動でチェックできるものを目指しましょう。
見直しされていくもの
Rubyはまだ改善が継続されており、プログラミングに使うツールも毎年のように新しいものが登場しています。このようにプログラミング環境は変化が早く、もし、古い開発環境を前提に作られたコーディング規約を今も使っているのなら、今の状況に合っていないかもしれません。
コーディング規約とは、運用しながら常に見直し、今のプログラミングスタイルに合わせて変えていくものです。もし今使っているコーディング規約に疑問を感じたらチームで相談し、より良いコーディング規約に変えていける組織にしていきましょう。
まとめ
今回解説したようにコーディング規約を設定し、それをも守ってRubyのプログラムを書くことで、読みやすくミスを避けられる記述が可能です。また、チームメンバーの作ったプログラムを参考にしたり、レビューなどでチェックする際にも効果的です。ぜひ、コーディング規約を利用してください。
なお、Rubyは今も改善が続けられており、毎年のように新しいプログラミング環境が提案されています。もし新しい技術を導入したら、それに合わせてコーディング規約の見直しも必要です。Rubyのプログラミングにとって何が良いかという視点でコーディング規約を見直せる職場にしていきましょう。
Rubyのコーディング規約に興味のある方は、下記のサイトを参考にしてください。
コーディング規約