今年の11月からAndroidアプリを開発しています。
内容としては以下のような開発環境です。
- Kotlin 1.0.3
- Retrofit 2.0.2
- Android Studio 2.2.2
- gms:9.2.0
- google-service 3.0.0
- Git
- Bitbucket
- Slack
- Mac
そんな開発環境下で
- レビュワーからの同様の指摘を避け、品質の高いコードを書き、修正→レビューの頻度を最小限に抑える
- レビュワーのレビュー負担の軽減
- Androidアプリ開発の効率化
を目的に以下の内容をセルフチェックとして設けてみました。
初心者なので当たり前な内容がほとんどですが…
チェック内容
見た目
- ボタンレイアウトは統一されているか。ズレてないか。
- 表示漏れ/表記ゆれは発生していないか。
- 誤記はないか
- 見切れなどは発生していないか
- ダイアログなどで表示している文言はその処理の状態を表しているもしくはユーザーの満足度を下げる仕様になっていないか(実行中です…ではなく、検索中です…などの表現を用いているか、ダイアログの文言の速度は適切かどうか)
- ユーザーが欲しい情報を適切(過不足ない状態)かどうか
- 押しにくい、使いづらいなどのユーザーの満足度を下げる仕様になっていないか
- 同タイトルiOSアプリで同等の機能がある場合はそれを参考にテキストの半角/全角、小文字/大文字の違いを意識して書いてるか確認する(UI周りで多い)
- ゲームを除く、「ターゲットユーザーが使うであろうAndroidアプリ」、「ユーザー属性に関係なくCMなどをやってる人気アプリ」などをDLして実現予定の機能と同様の機能があった場合、それを参考にする
- マテリアルデザインを利用する場合、マニュアルを踏襲した実装内容になっているか確認する
基本
-
gmsバージョンのアップグレードは慎重に行われているか。現行のバージョンにより近いバージョンで対応出来ないか確認する(大幅なアップデートで意図しない権限が付与されている場合がある)(例:バージョンが9.2.0でも実現出来ることを9.6.0などにしていないか)
-
変数定義がvalになっているか(値設定時にエラーが出る場合は対象外)
-
typoがないか
-
メソッド名が動詞+実現したいこと+小文字から始まるキャメルケースの命名に沿っているか
-
使われていない変数/メソッドが存在しないか
-
インデント半角空白4の設定で行われているか
-
不要なimportが入っていないか(ctl + alt + Oで最適化になる)
-
使ってないコードが無いか(XML含む)
-
kotlinExtension(Kotlinだと「import kotlinx.android.synthetic.main.fragment_search_tag_dialog.*」などと指定すればbindView不要)が適用されているか。不要なbindViewが混入されていないか
-
Androidのライフサイクルを無視した実装方法になっていないか
-
不要な改行コードが入っていないか
-
無理矢理ワンライナーで書いてみづらいコードになってないか
-
if(){}ではなくif() { } などスペースなどを空け、見やすいコードになっているか
-
git のcommitが適切かどうか(不要なものはgit rebase などでまとめる。コメントの内容が分かりづらい場合はgit rebase --amendで直す)
-
デグレがないか確認する(リファクタリングの意図以外で修正しなくても良い部分が修正されていないか確認する)
-
ファイル名とクラスが一致しており「ファイル名は頭大文字のキャメルケース」になっているか確認
実装部分
-
actvityで使用しているfragmentManagerになっているか(Fragment内で記述する場合はchildFragmentManager)
-
オプショナルの「?」や「!!」を不要に使っていないか
-
observableを新たに作る場合はflatMapを使い、作る必要がなく単純なtransformの場合はMapを用いる
-
viewTypeが一つにも関わらずgetItemViewTypeをoverrideしてないか
-
不要なtoListが使用されていないか
-
定数や固定値が「なんの固定値か」が理解しやすい名称になっているか
-
挿入する値の初期値が決まっている場合は型定義は不要で直接値を代入する書き方になっているか(var intent = Intent(this, MainActivity::class.java))
-
メソッド名や、変数名がわかりづらくなっていないか。処理内容を端的に表現している名前になっているか。
-
tvStatus.textなどのテキストの値設定の場合、コード重複を避けるため tvStatus.text = when (item.status) {
"contacting" -> holder.itemView.context.getString(R.string.contacting_message)といった内容に纏められないか確認する -
複数箇所で呼ばれる場合、Utilオブジェクトを作成し、そこから呼び出す方法を検討する
-
reciverで受け取る値や内容が変更となった場合はクラス名をリファクタリングする(Android Studioのリファクタリング機能を活用)
その他
適宜、以下の内容を確認し、現行のAndroidアプリ開発と照らし合わせてリストに追加すべき内容があれば追加、
またはその後のレビューでチェック内容以外の指摘があった場合は追加していく。