はじめに
今回この内容を試してみた動機は
- レビューを依頼する手間を減らしたい
- 軽微なリファクタを検出したい
- ケアレスミスを減らした
といった感じです。
そこで「どの程度までAIに任せられるのか?」という疑問が生じたので今後のためにも、個人的によく使っているChatGPTで試してみした。
使用ツール
- ChatGPT(GPT-5 Mini)
- 検証コード例:ViewModelやRepositoryなど簡単なKotlinコード
実践例
class MainViewModel : ViewModel() {
private val _count = MutableLiveData(0)
val count: LiveData<Int> = _count
fun count() {
_count.value = _count.value!! + 1
}
}
上記コードをレビューしてください。
ChatGPTの回答
レビューの観点は 安全性・可読性・Android開発のベストプラクティス です。
1. 安全性の観点から
問題点
_count.value = _count.value!! + 1
- !! 演算子は NullPointerException を投げる可能性があります
- LiveDataは非同期更新される場合もあるため、!! の使用は危険
改善例
_count.value = (_count.value ?: 0) + 1
- _count.value が null の場合でも 0 として扱える
- 安全にインクリメント可能
2. パフォーマンス・スレッド安全性
- LiveData はメインスレッドでしか value を更新できません
- バックグラウンドスレッドで更新する場合は postValue() を使う
- 現状はメインスレッド前提なら問題なし
3. 可読性・設計の観点
LiveData ではなく StateFlow / MutableStateFlow を使う選択肢もあり
- Kotlin Coroutine を使ったモダンな状態管理
- フロー型の方が Compose や非同期処理との相性が良い
class MainViewModel : ViewModel() {
private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count
fun count() {
_count.value += 1
}
}
利点
- 非同期対応が容易
- LiveData よりも Compose や Flow と親和性が高い
まとめ(レビュー結果)
| 観点 | 問題点 | 推奨改善 |
|---|---|---|
| Null安全 | _count.value!! でNPEリスク | (_count.value ?: 0) + 1 |
| スレッド安全 | メインスレッド以外で更新不可 | バックグラウンドなら postValue() 使用 |
| モダン設計 | LiveDataよりStateFlowが望ましい | MutableStateFlow を使用 |
| 可読性 | コード短くシンプル | 命名・アクセス制御は問題なし |
総評
- 小規模でシンプルなViewModelとしては問題なし
- Null安全やモダンフローへの置き換えで、より堅牢・可読性の高いコードにできる
使ってみた感想
思っていたよりも使えそう?な感じがする。
動機にあるケアレスミスの削減や軽微なリファクタには使えそう。
プログラミング初心者やAndroid開発初心者のコードレビューとしては十分使えそうな印象でした。
まとめ&もっと上手な使い方
- レビューを依頼する際に注目して見てほしい箇所や具体的な観点を伝えることも合わせてコメントすると、例のように長文にならなくて済むと思います。
「パフォーマンス面を中心に」
「安全性を重視して」
「Jetpack Compose向けコードとして」
「テストしやすさに注目して」
など
- 段階的にレビューしてもらうと精度が上がる
ステップ1:問題点を列挙
ステップ2:修正例を提案
ステップ3:修正後コードを再レビュー
- 誤指摘も出るため“ペアレビューツール”として使うのが現実的、プロジェクト独自の機構などがある場合はリファクタリングなど簡単なものに注力させた方がいいかも