はじめに
一貫して明白で、品質に優れ、保守しやすいコードを記述することは、好条件に恵まれていたとしても、ある程度の訓練を要する技術です。コーディング標準には、コードの記述方法に関する規則と推奨事項が提示され、適切なコーディング習慣も記載されています。最近、コーディング標準は、アジャイル開発の重要なベストプラクティスとして普及してきたため、ソフトウェア開発においてその重要性が見直され、認知度が上がってきました。
Checkstyleは、コーディング標準とベストプラクティスの実践を支援するオープンソースツールです。スタンドアロンツールとして使用すると、総合的なコード品質のレポートを生成できます。また、開発者の作業環境に組み込んで、記述しているコードに関する、リアルタイムのビジュアルなフィードバックを提供することもできます。
コーディング標準
コーディング標準は、言うまでもなく、多くの開発環境における重要なベストプラクティスです。この標準には、古くからの伝統と規則に加えて、ソフトウェアの記述方法のベストプラクティスが盛り込まれています。その推奨事項は、コードのレイアウトや、クラスや変数の名前付けの標準的な方法を定義するという単純なものから、コードの信頼性やパフォーマンスを高めるためのものまで、多岐にわたります。
しかしながら、Vrije大学(アムステルダム)のコンピュータサイエンスの教授であり、Minixオペレーティングシステムの作成者であるAndrew S. Tanenbaumは、「標準の良い点は、多くの選択肢が用意されていることである」と述べています。各企業、チーム、個人の開発者は、長い間に、それぞれ異なるプログラミング方法や習慣を確立しています。異なるプログラミングスタイルや規則を使用する開発者が、共通のコードベースで共同作業を行う場合に、問題が生じます。
実際、インデントや命名規則など、多くの標準は、ほとんどが勝手に行われています。Sunのコーディング規則では、中括弧は命令の直後に指定することが推奨されています。
while (i < 10) {
i++;
}
一方、多くのC++開発者は、改行してから中括弧を指定します。
while (i < 10)
{
i++;
}
どちらのスタイルの方が適切であるかを示す、本当に客観的な理由はありません。重要なのは、プロジェクト内で適切に定義され、認められたスタイルを使用することです。コーディング標準が認識されることで、チームや会社が一致して共同作業を行うことができます。チームメンバが、確立された一連のコーディング標準を理解すれば、コードのレイアウトや変数の命名規則などの細部に頭を悩ますことなく、本来のコーディング作業に集中できます。新しいプロジェクトチームの場合は、プロジェクトの開始時に、if
文の後のどの位置に中括弧を置くかといった、地球を揺るがすほど重要な決定に割く時間を削減できます。
標準を一貫して使用することで、チームや会社内の「チームワーク」も高まります。また、一貫性をもって配置され、周知の規則に従っているコードは、理解しやすく、保守も簡単です。
Sunによって、Java言語に関するコーディング規則のセットが定義されており、これは業界で広く受け入れられています。多くの企業やオープンソースプロジェクトも独自のコーディング規則のセットを公開していますが、ほとんどの場合、Sun規則がベースになっています。いくつかの典型的なコーディング標準を、以下に示します。
- コメント
- すべてのクラス、メソッド、および変数についてJavadocコメントを記述します。
- 命名規則
- クラス名は名詞で、大文字と小文字が混在する文字列ですが、内部の各単語の先頭文字は大文字で指定します(
MyClass
)。 - 変数名は名詞で、大文字と小文字が混在する文字列ですが、小文字で始まり、内部の各単語の先頭文字は大文字で指定します(
myVariable
)。 - 定数は、すべて大文字で指定し、単語間は下線で区切ります(
MY_CONSTANT_VALUE
)。 - インデント
- インデントはタブではなくスペースで指定します。
- 宣言
- 1行ごとに1つの宣言を、コメントを付けて指定します。以下に例を示します。
- 文
- 複合文の左中括弧は、複合文が開始する行の末尾に指定します。右中括弧は改行して指定し、複合文の先頭に合わせてインデントします。以下に例を示します。
- ベストプラクティス
- 変更する必要がない、変数およびパラメータの最終的なキーワードを使用します。
- ループ内では変数を指定しません。
int classNumber; // The child's class, from 1 to 8 int age; // The child's age
int classNumber, age;
while (i < 10) {
i++;
}
開発チームのすべてのメンバと、会社やプロジェクトで適用する規則について話し合うとよいでしょう。各ルールを明確にして、判断します。ルールの基になる目的は何でしょうか。ルールは組織的に適用されるのでしょうか、それとも例外はあり得るのでしょうか。多くのベストプラクティスと同様、コーディング標準が効果を発揮するためには、チーム全体がこれを適切に理解する必要があります。
Checkstyleについて
Checkstyleは、Javaコードに対してコーディング規則とベストプラクティスルールを適用するためのオープンソースツールです。Javaソースコードを分析して、標準違反を報告することにより動作します。プラグインを通じて好きなIDEに統合できるため、開発者は、公式標準の違反を即時に確認し、訂正することができます。また、見つかった違反をまとめたプロジェクト全体のレポートを生成することもできます。
Checkstyleには、コードの形式や命名規則から、EJBベストプラクティスやコードの複雑なメトリクスに至るまで、多様な範囲の問題を扱う120を超えるルールと標準を含んだ、標準的なSun規則が最初から組み込まれています。Checkstyleは、以下のものに関連する標準をサポートします。
- Javadocコメント
- 命名規則
- ファイルヘッダー
- Import文
- 空白
- 修飾子
- ブロック
- コーディングの問題
- クラスの設計
- J2EE
- その他の問題