Slide 1

Slide 1 text

Gemini でコードレビュー知見を 見える化 2025/12/08 ZOZO.swift #1 株式会社ZOZO
 ZOZOTOWN開発本部 ZOZOTOWN開発2部 iOSブロック
 テックリード
 森口友也 Copyright © ZOZO, Inc. 1

Slide 2

Slide 2 text

© ZOZO, Inc. 株式会社ZOZO ZOZOTOWN開発本部 ZOZOTOWN開発2部 iOSブロック テックリード lap/らぷ id: laprasdrum 2023年 中途入社 ZOZOTOWN iOSチーム内の要件設計・コーディングのフォ ローアップ、社内外への情報発信をメインに活動中 現在テックリードとして iOS に関する全社横断活動を兼務 2

Slide 3

Slide 3 text

© ZOZO, Inc. ● ファッションEC ● 1,600以上のショップ、9,000以上のブランドの取り扱い ● 常時107万点以上の商品アイテム数と毎日平均2,700点以上の新着 商品を掲載(2025年9月末時点) ● ブランド古着のファッションゾーン「ZOZOUSED」や コスメ専門モール「ZOZOCOSME」、シューズ専門ゾーン 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン 「ZOZOVILLA」を展開 ● 即日配送サービス ● ギフトラッピングサービス ● ツケ払い など https://zozo.jp/ 3

Slide 4

Slide 4 text

© ZOZO, Inc. コードレビュー、してますか? 4

Slide 5

Slide 5 text

© ZOZO, Inc. コードレビュー、 全員で してますか? 5

Slide 6

Slide 6 text

© ZOZO, Inc. 不安だから毎回あの人に見てもらってる レビューするけどあの人のレビューを待ってから 新卒・入社直後のメンバーはいつレビューする? 6

Slide 7

Slide 7 text

© ZOZO, Inc. 良いレビューはチームみんなに届いてほしい 7

Slide 8

Slide 8 text

© ZOZO, Inc. レビューの観点を チーム成長としての学びに繋げたい 8

Slide 9

Slide 9 text

© ZOZO, Inc. 週次サイクルを考える レビューコメントを集計 レビュー観点の傾向を分析 チーム共有・振り返り 開発ルールのアップデート コードレビュー 9

Slide 10

Slide 10 text

© ZOZO, Inc. 週次サイクルを考える レビューコメントを集計 レビュー観点の傾向を分析 チーム共有・振り返り 開発ルールのアップデート コードレビュー 自動化・AI に任せよう 10

Slide 11

Slide 11 text

© ZOZO, Inc. 週次サイクルを考える レビューコメントを集計 レビュー観点の傾向を分析 チーム共有・振り返り 開発ルールのアップデート コードレビュー レビュアー同士の学びにも 新卒メンバーの見取り稽古にもなりそう 11

Slide 12

Slide 12 text

© ZOZO, Inc. 週次サイクルを考える レビューコメントを集計 レビュー観点の傾向を分析 チーム共有・振り返り 開発ルールのアップデート コードレビュー 各レビュアー毎のレビューの質向上だけでなく コードを書くときのセルフレビューの質向上に繋がるかも 12

Slide 13

Slide 13 text

© ZOZO, Inc. やってみました 13

Slide 14

Slide 14 text

© ZOZO, Inc. ● 直近1週間内に更新された PR 一覧を取得 ● 該当 PR からコメント・レビューコメントを抽出 ○ PR 作者・Bot のコメントは除外 ○ LGTM Only コメントも除外 ● 分析用データとして Markdown で出力 ● 上記の処理を週1で GitHub Actions で実行 レビューコメントを集計する 14

Slide 15

Slide 15 text

© ZOZO, Inc. ● 試作したが該当の PR の取得結果が期待通りにならなかった ● 実行結果が冪等ではない ● 期待する結果が明確に定義できるものは確実に取得できる手法がよい ● Shellscript の実装は AI と伴走しました Q. MCP 経由で AI エージェントに取得させていますか? A. 愚直に API を呼び出して集計する Shellscript を実装しました 15

Slide 16

Slide 16 text

© ZOZO, Inc. Answer the following question in Japanese with Slack mrkdwn format, and output outline is like ':mag: Review trends', ':pencil: Development guideline updates', ':robot_face: Linter updates' : You're an fluent iOS senior engineer and good at following up your members skill. Read @pr-review-comments.md which summarizes the last 7 days pull request reviews and comments from your members. Based on the file, output review comment trends, perspectives that should be extracted as development guidelines, points that @.swiftlint.yml should be modified and suggest the basic rules or create SwiftLint custom rules and provide code if necessary. Assume SwiftLint version is ${{ env.SWIFTLINT_VERSION }}. レビュー観点の傾向を分析 Gemini にプロンプトを渡して Slack に結果を投稿する GitHub Actions を実行 16

Slide 17

Slide 17 text

© ZOZO, Inc. Answer the following question in Japanese with Slack mrkdwn format, and output outline is like ':mag: Review trends', ':pencil: Development guideline updates', ':robot_face: Linter updates' : You're an fluent iOS senior engineer and good at following up your members skill. Read @pr-review-comments.md which summarizes the last 7 days pull request reviews and comments from your members. Based on the file, output review comment trends, perspectives that should be extracted as development guidelines, points that @.swiftlint.yml should be modified and suggest the basic rules or create SwiftLint custom rules and provide code if necessary. Assume SwiftLint version is ${{ env.SWIFTLINT_VERSION }}. 英語で命令 (日本語だと解釈がズ レることがあった) 日本語での返答を指定 Slack 書式で出力 17

Slide 18

Slide 18 text

© ZOZO, Inc. Answer the following question in Japanese with Slack mrkdwn format, and output outline is like ':mag: Review trends', ':pencil: Development guideline updates', ':robot_face: Linter updates' : You're an fluent iOS senior engineer and good at following up your members skill. Read @pr-review-comments.md which summarizes the last 7 days pull request reviews and comments from your members. Based on the file, output review comment trends, perspectives that should be extracted as development guidelines, points that @.swiftlint.yml should be modified and suggest the basic rules or create SwiftLint custom rules and provide code if necessary. Assume SwiftLint version is ${{ env.SWIFTLINT_VERSION }}. 投稿の書式を指定 🔎 レビュー傾向 ✏ 開発ルール更新案 🤖 Linter 更新案 18

Slide 19

Slide 19 text

© ZOZO, Inc. Answer the following question in Japanese with Slack mrkdwn format, and output outline is like ':mag: Review trends', ':pencil: Development guideline updates', ':robot_face: Linter updates' : You're an fluent iOS senior engineer and good at following up your members skill. Read @pr-review-comments.md which summarizes the last 7 days pull request reviews and comments from your members. Based on the file, output review comment trends, perspectives that should be extracted as development guidelines, points that @.swiftlint.yml should be modified and suggest the basic rules or create SwiftLint custom rules and provide code if necessary. Assume SwiftLint version is ${{ env.SWIFTLINT_VERSION }}. AI エージェントのペル ソナを設定 メンバースキルのフォ ローアップに卓越した シニア iOS エンジニア を想定 19

Slide 20

Slide 20 text

© ZOZO, Inc. Answer the following question in Japanese with Slack mrkdwn format, and output outline is like ':mag: Review trends', ':pencil: Development guideline updates', ':robot_face: Linter updates' : You're an fluent iOS senior engineer and good at following up your members skill. Read @pr-review-comments.md which summarizes the last 7 days pull request reviews and comments from your members. Based on the file, output review comment trends, perspectives that should be extracted as development guidelines, points that @.swiftlint.yml should be modified and suggest the basic rules or create SwiftLint custom rules and provide code if necessary. Assume SwiftLint version is ${{ env.SWIFTLINT_VERSION }}. 先ほど出力したレビュー コメントファイルを読み 込ませる ファイル概要も説明する 20

Slide 21

Slide 21 text

© ZOZO, Inc. Answer the following question in Japanese with Slack mrkdwn format, and output outline is like ':mag: Review trends', ':pencil: Development guideline updates', ':robot_face: Linter updates' : You're an fluent iOS senior engineer and good at following up your members skill. Read @pr-review-comments.md which summarizes the last 7 days pull request reviews and comments from your members. Based on the file, output review comment trends, perspectives that should be extracted as development guidelines, points that @.swiftlint.yml should be modified and suggest the basic rules or create SwiftLint custom rules and provide code if necessary. Assume SwiftLint version is ${{ env.SWIFTLINT_VERSION }}. コメントファイルを元に 投稿書式の内容を出力さ せる Linter 改善案は SwiftLint の標準ルール 又はカスタムルールの提 案 SwiftLint バージョンは 環境変数で変更可能 21

Slide 22

Slide 22 text

© ZOZO, Inc. Slack へ投稿 22

Slide 23

Slide 23 text

© ZOZO, Inc. Slack へ投稿 23

Slide 24

Slide 24 text

© ZOZO, Inc. チーム共有・振り返り ● レビュアーが指摘の意図を語ってくれた ● 開発ルールの改定ポイント・理由をメンバー皆が観測できた ● 改定されたことで AI エージェントが賢くなった ● 把握してなかった SwiftLint の標準ルールが学べた ● .swiftlint.yml を初めて改修できたメンバーが現れた チームの週次定例で Slack 投稿をチェックしはじめて起こったこと 24

Slide 25

Slide 25 text

© ZOZO, Inc. 良いことばかりでもない 25

Slide 26

Slide 26 text

© ZOZO, Inc. チーム共有・振り返り ● レビュー傾向・開発ルール改善案が収束する ○ 同じことしか言わなくなる ● カスタムルールの提案は全く採用されなかった ○ 恒常的に発生するミスにもとづく指摘ではなかった ○ カスタムルールを活かすためあえて SwiftFormat 非採用だった チェックし続けてみた結果 26

Slide 27

Slide 27 text

© ZOZO, Inc. チーム共有・振り返り ● レビュー傾向・開発ルール改善案が収束する ○ 同じことしか言わなくなる => AI 学習用ドキュメント更新フローが必要 ● カスタムルールの提案は全く採用されなかった ○ 恒常的に発生するミスにもとづく指摘ではなかった ○ カスタムルールを活かすためあえて SwiftFormat 非採用だった ○ => 現行・将来のカスタムルール必要性の議論後 Linter 変更検討もあり チェックし続けてみた結果 27

Slide 28

Slide 28 text

© ZOZO, Inc. Q. Gemini を使ってるのは何故? ● Claude Code/Codex が選択肢に入ったのはその後 ● とはいえ、コード生成ではない分析系だと Gemini でも問題ないと判断 ○ 変更するモチベーションが上がらず ○ Gemini 3.0 Pro が正式に利用できれば分析の質は向上するかも ● どのエージェントを使うかより、エージェントを賢くするループの設計が大事 A. 導入当時の選択肢が Gemini しかなかったからです 28

Slide 29

Slide 29 text

© ZOZO, Inc. まとめ ● レビューコメントはチーム成長の材料 ● エンジニアリングにおける AI の価値はコード生成以外にもある ● 個人が強くなる手法だけでなく、チームが強くなる手法も ● AI エージェントを賢くするチーム活動で好循環を目指そう 29

Slide 30

Slide 30 text

No content