📝

コードレビューが苦手でも大丈夫!Copilotで変更概要作成、NotebookLMで“ながら学習”

に公開

職場に GitHub Copilot がやってきてから数ヶ月。コード生成だけでなく、**コードレビューの"下準備"**にも活かしています。

今回は、苦手意識があったコードレビューを 「AIで知識インプット」→「AIで変更概要の要約」 という流れで楽にする実践手順を紹介します。

ワークフロー全体像

フロー説明:

  • 🔵 事前準備(A→E):AIで技術知識をインプット
  • 🟡 音声学習(E):通勤中などスキマ時間を活用
  • 🟢 概要作成(F→I):Copilotで変更内容を自動要約
  • 🟣 レビュー(J):準備万端でコードレビューに臨む

環境・前提

  • エディタ:Android Studio(Copilot Chat 利用)
  • 対象:Android WebView Messaging(AndroidX WebKit)
    • 補足:本文では WebMessageListenerWebMessagePort の両方に触れます。Listener は安全な受信側の枠組み、Port は双方向通信の実体として利用します。
  • 目的:レビュー対象の変更点の「概要」を最短で把握する(実装の良し悪し判断は別工程)

コードレビューでの困りごと

長年アップデートが続くアプリでは機能が多岐にわたります。自分が詳しい領域なら問題ないのですが、未経験の技術が含まれる変更をレビューすると理解に時間がかかり、業務時間を圧迫しがちでした。

困ったら AI に助けてもらう

とはいえレビューは仕事。そこで最近は AI の力を借りています。やったことはシンプルで、

  1. 新しく触る技術を事前学習(NotebookLM の音声要約で“ながら学習”)
  2. 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 で生成した例)

https://open.spotify.com/episode/0Xe2LRPu8uG0I5uEsw0Xo7?si=gt9FqVLvTGuaXB2gwku6JQ

変更履歴の「概要」を 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関数に変換する拡張関数を実装

技術的な特徴

  1. セキュリティ:

    • WebMessagePortで特定オリジンにのみメッセージ送信
    • アクセストークンは暗号化キーを使用
  2. アーキテクチャ:

    • MVVM + Compose
    • Hilt DIを使用したDependency Injection
    • Kotlin Coroutines + RxJavaの併用
  3. 暫定実装の明示:

    • サーバー側実装後の削除可否を判断できるようにコメント記載

コミット履歴の流れ

  1. WebViewの骨組みとWebMessagePortの基礎
  2. トークン取得機能の追加
  3. Fragment化とUI統合
  4. Compose化
  5. リファクタリングとレビュー指摘対応

補足:冒頭で WebMessageListener を説明しましたが、今回の実装サンプルは Port を中心に双方向通信 を構成しています。用途に応じて Listener / Port を選択してください。

再現手順(チェックリスト)

  1. 対象技術を予習
  2. Claude 等で要点レポート → NotebookLM へ渡して音声要約 → 通勤・移動中に聴く
  3. レビュー対象ブランチに切り替え
  4. 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が職場に入ってきたばかりの時に試行錯誤した記録

https://zenn.dev/j____takumi/articles/how_to_use_copilot_in_my_job

私生活でも課金を開始し、ブログ執筆に活用

https://zenn.dev/j____takumi/articles/use_copilot_edit_articles

Discussion