コードレビューが苦手でも大丈夫!Copilotで変更概要作成、NotebookLMで“ながら学習”
職場に GitHub Copilot がやってきてから数ヶ月。コード生成だけでなく、**コードレビューの"下準備"**にも活かしています。
今回は、苦手意識があったコードレビューを 「AIで知識インプット」→「AIで変更概要の要約」 という流れで楽にする実践手順を紹介します。
ワークフロー全体像
フロー説明:
- 🔵 事前準備(A→E):AIで技術知識をインプット
- 🟡 音声学習(E):通勤中などスキマ時間を活用
- 🟢 概要作成(F→I):Copilotで変更内容を自動要約
- 🟣 レビュー(J):準備万端でコードレビューに臨む
環境・前提
- エディタ:Android Studio(Copilot Chat 利用)
- 対象:Android WebView Messaging(AndroidX WebKit)
-
補足:本文では
WebMessageListenerとWebMessagePortの両方に触れます。Listener は安全な受信側の枠組み、Port は双方向通信の実体として利用します。
-
補足:本文では
- 目的:レビュー対象の変更点の「概要」を最短で把握する(実装の良し悪し判断は別工程)
コードレビューでの困りごと
長年アップデートが続くアプリでは機能が多岐にわたります。自分が詳しい領域なら問題ないのですが、未経験の技術が含まれる変更をレビューすると理解に時間がかかり、業務時間を圧迫しがちでした。
困ったら AI に助けてもらう
とはいえレビューは仕事。そこで最近は AI の力を借りています。やったことはシンプルで、
- 新しく触る技術を事前学習(NotebookLM の音声要約で“ながら学習”)
- Git 変更履歴から Copilot に概要を作ってもらう
という 2 段構えです。
技術インプット:NotebookLM で音声要約を"聴く"
レビュー前に対象技術の理解を素早く深めます。今回は Android WebView Messaging が対象でした。
まず Claude(Sonnet 4.5)で要点レポートを作成し、それを NotebookLM に渡して音声概要を生成。移動中に“ラジオ感覚”で聴いてインプットします。
Android WebView Messaging 概要(要点)
- 何ができるか:WebView 内 JavaScript と Android ネイティブ間の双方向通信
-
安全性:
addJavascriptInterface()に比べ、許可オリジンやisMainFrame判定、JavaScriptReplyProxyにより安全性が高い -
実装の流れ:
androidx.webkit:webkitを追加 → 実行時に機能サポートをチェック → 許可オリジンを厳格指定(HTTPS) →WebViewCompat.addWebMessageListener()等で受送信を構成 - 運用の勘所:ワイルドカード禁止、HTTP 禁止、不要時は JS 無効化、ログアウト時は Cookie/Storage/キャッシュをクリア、Safe Browsing 有効化 など
Spotify の音声概要サンプル(NotebookLM で生成した例)
変更履歴の「概要」を Copilot に作らせる
レビュー対象ブランチへチェックアウトしたら、Copilot Chat にたった一行の指示を送ります。
Git の履歴から変更点の概要を要約してください。ソースの変更は行わないでください。
Copilot は必要な範囲で git コマンドを自動実行し、変更の全体像を要約してくれます。内部ログは長くなりがちなので、記事では代表的なコマンドだけを示します。
- git log --oneline -20:最近の履歴の把握
- git log --format="%h %s" --reverse origin/main..HEAD:対象範囲の一覧
- git diff --stat origin/main...HEAD:変更ファイルと規模感
- git diff origin/main...HEAD --name-only:変更ファイルの列挙
- git show --stat <commit>:個別コミットの詳細
IDE 側の「ファイルを読み取りました」等の機械的ログは読者にはノイズなので、記事では省略しています。
生成された「変更概要」
以下は Copilot で得られたアウトラインの体裁例です。
変更内容のまとめ
概要
WebViewでの認証を実装
WebとNative間で安全にアクセストークンをやり取りできる仕組みを構築しました。
主要な実装内容
1. WebViewの新規作成
-
WebViewFragment.kt(新規ファイル)- Compose化されたWebViewFragmentを実装
- WebMessagePortを使用してWeb側とネイティブ側で双方向通信を実現
- セキュリティ対策としてオリジンを制限
- ページ読み込み完了時に
window.os = 'android'を設定し、Android端末であることを通知
2. ViewModelの実装
-
WebViewViewModel.kt(新規ファイル)- アクセストークンの取得と送信を管理
- RxJavaの
FlowableをKotlin Coroutinesのsuspend関数に変換する拡張関数を実装
技術的な特徴
-
セキュリティ:
- WebMessagePortで特定オリジンにのみメッセージ送信
- アクセストークンは暗号化キーを使用
-
アーキテクチャ:
- MVVM + Compose
- Hilt DIを使用したDependency Injection
- Kotlin Coroutines + RxJavaの併用
-
暫定実装の明示:
- サーバー側実装後の削除可否を判断できるようにコメント記載
コミット履歴の流れ
- WebViewの骨組みとWebMessagePortの基礎
- トークン取得機能の追加
- Fragment化とUI統合
- Compose化
- リファクタリングとレビュー指摘対応
補足:冒頭で WebMessageListener を説明しましたが、今回の実装サンプルは Port を中心に双方向通信 を構成しています。用途に応じて Listener / Port を選択してください。
再現手順(チェックリスト)
- 対象技術を予習
- Claude 等で要点レポート → NotebookLM へ渡して音声要約 → 通勤・移動中に聴く
- レビュー対象ブランチに切り替え
- Copilot Chat へ前述の一行プロンプトを送る
1. git diff --stat / --name-only などの数字は引用して載せる
1. 概要を整形して貼る
1. 「概要 → 主要な実装 → 規模感 → コミットの流れ」の順で段落化
やってみてどうなったのか
このAIアシストを取り入れてから、コードレビューに対する苦手意識が和らぎました。
先に情報を簡単に仕入れるだけでも、どの観点でコードを読めば良いのかわかるのが、心の支柱となります。
また、軸を持ってレビューをすると何もなしで取り掛かるよりも、早くレビューをすることができるもの感じているメリットです。
概要を使う際の注意点
概要はわかりやすいですが、あくまでも参考資料として扱ってください。
細かいところは、自分の目で確認し内容が正しいものかを確認しましょう。
うまくいかなかったケース
VSCodeのworkSpace範囲に注意
Copilotがgit履歴を読み込めない場合、workSpaceの範囲がgitリポジトリのルートより狭い可能性があります。
例えば、プロジェクトのサブフォルダだけを開いている場合、.gitディレクトリが見つからずgit履歴にアクセスできません。
対処法:
- VSCodeで
.gitディレクトリがある階層(リポジトリのルート)をworkSpaceとして開く - 複数フォルダをworkSpaceに追加している場合は、gitリポジトリを含むフォルダが含まれているか確認
終わりに
私は職場にAIが入ってきてくれて、とても嬉しく思っています。今回のように下準備にかける時間を短縮して、本来やるべき業務に集中できる時間を増やせるのが、かなりありがたいです。
ここ数ヶ月Copilotを業務で使ってみて、心境が変わりました。
「ちゃんとAIを使いこなして、こうして記録に残していけば、AI時代の武器になるのではないか」と。
なので、今後も拙い文章ですが、AIと一緒にする開発の様子をお届けできるよう精進してまいります。
Copilot関連記事
Copilotが職場に入ってきたばかりの時に試行錯誤した記録
私生活でも課金を開始し、ブログ執筆に活用
Discussion