Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CIを整備してメンテナンスを生成AIに任せる

 CIを整備してメンテナンスを生成AIに任せる

* https://github.com/rerost/issue-creator
* https://github.com/rerost/giro

この2つのメンテを生成AIにまかせている話です!

Avatar for Hazumi Ichijo

Hazumi Ichijo

July 16, 2025
Tweet

More Decks by Hazumi Ichijo

Other Decks in Programming

Transcript

  1. Copyright © Henry, Inc. All rights reserved. ヘンリー x はてな

    合同技術勉強会 一條端澄 (@rerost/hazumirr) CIを整備してメンテナンスを 生成AIに任せる
  2. Copyright © Henry, Inc. All rights reserved. 自己紹介 一條 端澄

    (X: @hazumirr, GitHub: @rerost) 株式会社ヘンリー エンジニア 趣味 • 小さいツールを長くメンテする • CI/CD周りの改善・パフォーマンス改善
  3. Copyright © Henry, Inc. All rights reserved. 自己紹介 一條 端澄

    (X: @hazumirr, GitHub: @rerost) 株式会社ヘンリー エンジニア 趣味 • 小さいツールを長くメンテする • CI/CD周りの改善・パフォーマンス改善 => 今日はこの趣味の話をします
  4. Copyright © Henry, Inc. All rights reserved. メンテし続けているツール: issue-creator •

    issue-creator ◦ GitHubのissue/discussionをテンプレートissueを元に定期的に作る くん ◦ GitHub Actionsで利用可能 ◦ 日付・過去issueのリンク・etc.. が埋め込める ◦ 週の振り返りなどで利用(マネーフォワードさんでも利用) ▪ https://moneyforward-dev.jp/entry/2022/07/21/start-wit h-github-discussion/#GitHub-Actions
  5. Copyright © Henry, Inc. All rights reserved. メンテし続けているツール: giro •

    giro ◦ gRPCでReflectionが実装されていない言語でもJSONを使ってAPI Callできるくん ◦ 構成要素 ▪ protoc plugin: .protoファイルからReflectionサーバを生成 ▪ CLI: ReflectionサーバとAPIサーバが別でもリクエストできるよ うにするくん
  6. Copyright © Henry, Inc. All rights reserved. 疑問 • 僕の要求:

    これらのツールを「動かし続ける」ことができる • 動かし続ける: 以下の2つを満たせる ◦ 実行結果が変わらない ◦ 依存ライブラリで脆弱性が発覚・対応された後に、1週間程度で対応できる この要求は、僕がメンテせずとも生成AIで達成できるのでは? • 利用者に提供している機能が明確(=> CLIで入出力のパターンが少ない) • 実装がオープンになっている(=> 情報管理を考えなくて良い)
  7. Copyright © Henry, Inc. All rights reserved. アプローチ CI: 落ちていた

    CI: 通っていた 実際: 壊れていた 陽性 偽陰性 実際: 壊れていなかった 偽陽性 陰性 基本CIですべてチェックするようにし、偽陰性を減らし、偽陽性は許容 • 偽陰性: ツールの利用者(人間)の時間を奪うので守る • 偽陽性: 壊れたものをリリースするよりマシ。対応コストは生成AIが払う ◦ Flaky Testは許容する。Retryなどの管理は生成AIに任せる
  8. Copyright © Henry, Inc. All rights reserved. アプローチ フェーズを以下に分けて進めた 1.

    CIの整備。人間が開発し、手元で確認・CIの確認しマージ • E2Eテスト・設定ファイルのバリデーションを整備 2. CIの品質の確認。Renovateで依存ライブラリを上げ、手元で確認・CIの確認しマージ • 偽陽性: 人間が対応 / 偽陰性: 人間が検知し、人間がテストケースを追加 3. コードを書く主体を生成AIに。Renovate/生成AIに変更させ、CIで確認。 見逃したとしてもリリース後1週間以内に問題に気づける体制 • 偽陽性: 生成AIが対応 / 偽陰性: 人間が検知し、人間/生成AIがテストケースを追加
  9. Copyright © Henry, Inc. All rights reserved. Tips • テストケースも読む手間を減らしたいので、人間の可読性に振る

    • 偽陰性を見つけたいので、できるだけ広くE2Eテストに振る • 例: ◦ issue-creator: 実際のGitHub APIでテストする。テストケースをGitHubの issueに追加 ◦ giro: gRPCサーバを立ててテストする。テストケースを google/go-cmdtestで記述
  10. Copyright © Henry, Inc. All rights reserved. Tips $ giro

    host rerost.giro.v1.TestService localhost:5000 $ giro call rerost.giro.v1.TestService/Echo {"message":"Test"} --metadata=key1:val1:key2:val2 {"message":"Test", "metadata":{"metadata":{":authority":{"value":["localhost:5000"]}, "content-type":{"value":["application/grpc"]}, "key1":{"value":["val1"]}, "key2":{"value":["val2"]}, "user-agent":{"value":["grpc-go/1.73.0"]}}}} google/go-cmdtest を使ったテストケース(スナップショットテスト)
  11. Copyright © Henry, Inc. All rights reserved. 人間の残りやること • 原因が不明なケースの調査・対応

    ◦ 例: CIが依存しているライブラリの最新がリリースされかつ壊れていた ◦ https://github.com/rerost/issue-creator/pull/218 • 問題の切り分け・マネジメント ◦ 生成AIがドツボにハマらないように、解けるサイズに問題を落としたり • 生成AIのセットアップ・管理 ◦ 例: DevinからClaude Codeへの切り替え。ActionsのためのMCPを設定 ◦ https://zenn.dev/rerost/scraps/4acd95326df6ad • テストケースの追加 ◦ https://github.com/rerost/giro/pull/155/files#diff-74e3dd07433d99a4b0c 15aa4f1ed17c16ee5b9535108410c2e48d35c125e6a8f
  12. Copyright © Henry, Inc. All rights reserved. 結果 • 人間の作成したPull

    Requestは半分以下に • 手元の環境を捨てられた • ツール自体も壊れづらくなった • 生成AI関連のサンドボックスとして取り回しがしやすくなる • (人間がたまに開発すると、Flaky Testとかに当たって困る)
  13. Copyright © Henry, Inc. All rights reserved. 最後に宣伝 • GitHub

    Issueを定期的に作るのが面倒 • gRPCサーバがReflection生やしていないけれどデバッグしたい • … などあれば、rerost/issue-creator , rerost/giro の利用を検討してもらえると!