reluxのAndroidアプリコーディング規約
こんにちは。Androidアプリ開発を担当している赤池です。梅雨ですね。梅雨です。
弊社reluxのAndroidアプリは基本的にエンジニア一人体制で開発しています。 一人体制だとチーム開発によるコード統一性の乱れやコンフリクト等が生じない一方、他者にはわかりづいらい自分流の開発スタイルになりがちという問題があります。reluxのAndroidアプリのコードにも他者が見るとクエッションになりそうな箇所が見受けられたので(自分で言う!)、今後の複数人開発に備えコーディング規約の作成を進めています。
背景についての補足
話は変りまして、弊社開発グループでは月に一度「CLEAR」という日を設けております。 日頃なかなか時間を取ることができない品質改善のためのタスクを、この日は自分で好きに選んで行うことができます。 CLEARに関しては別のブログでも触れると思うので詳細は割愛しますが、コーディング規約はこの日のタスクの一つとして着手しました。
まずはじめに見るべきもの
みなさまAndroidアプリのコーディング規約はどうしていますか?独自に定めていますか? 実はAndroidアプリコーディング規約はGoogleがすでに制定しています。 こちらには「ガイドラインや推奨ではなく厳格な決まり」という記述があります。 AndroidのContributorにならないにせよ、従っておいて間違いないでしょう。
Code Style for Contributors | Android Open Source Project
また、GoogleはJavaに関するスタイルも定めてます。 前者でカバーしていない部分はこちらを参考にします。
規約の主な内容
reluxのサーバサイドのプログラムはPHPで書かれています。PHPのコーディング規約はPSRをベースにしているのですが、それとの違いを中心に規約内容をいくつかピックアップしてみます。
フィールド(メンバ変数)の命名規則
//非パブリック・非スタティックは頭にmを private int mPrivate //スタティックは頭にsを private static MyClass sSingleton; //定数は大文字と_のみ使用 public static final int SOME_CONSTANT = 42;
中括弧について
//中括弧で行を始めてはならない(改行しない) class MyClass { int func() { if (something) { // ... } else if (somethingElse) { // ... } else { // ... } } }
// 条件文には中括弧をつける if (condition) { body(); } // 一行で収まる場合はつけなくても構わない if (condition) body(); // これはNG if (condition) body();
インデントについて
//4スペース for (int i = 0; i < n; i++) { doSomething(i); } //関数呼び出しと引数を含む場合の改行は8スペース Instrument i = someLongExpression(that, wouldNotFit, on, one, line);
頭字語や略語は単語として扱う
//OK XmlHttpRequest //NG XMLHTTPRequest //OK getCustomerId //NG getCustomerID
まとめ
以上のように公式の規約に従うことだけで大部分はカバーできるので、あとは特に定めのないものやアプリケーション特有のものに関して付け加えていけばOKかと思います。 弊社ではリーダブルコードを題材にした社内勉強会を行っていますので、それらを参考にしながら仕上げていく予定です。