Blog

インナーソース x IssueOps x AI

✔この記事の対象者

  • インナーソースやOSSのコントリビュート文化に興味がある方
  • 社内でAIエージェントとGitHub Actionsを組み合わせた「IssueOps」を検討している方

こんにちは、エンジニアリングマネージャーの芦川です。

以前からいろいろとインナーソースに関連した話を書いてきました。

など。

あれから月日が経ち、AIの活用で社内のインナーソースの形そのものが少しずつ変わってきています。

今回書きたいのは、インナーソース x IssueOps x AIということについてです。
インナーソースはIssueOpsによって加速し、さらにAIによってIssueOpsも加速したな、ということ。

これまでのインナーソースの話

これまでのインナーソースは、OSSのコントリビュートフローをそのまま社内に持ち込んだような形でした。

  1. コントリビュートしたいリポジトリの権限をもらう(あるいはフォークする)
  2. コードを読んで、修正方針を考える
  3. 実際にコードを直す
  4. アップストリームへPRを出す
  5. リポジトリのオーナー側がレビューする
  6. マージされる

この流れは「エンジニアがエンジニアに対して」行うことが前提になっていて、次のような壁がありました。

  • 対象リポジトリの技術スタックに慣れていないと、そもそも着手しづらい
  • Gitの操作(ブランチを切る、PRを出す)に慣れていない人は参加すらできない
  • 「他チームのリポジトリにPRを出す」ということ自体に、なんとなく気後れしてしまう

IssueOpsがインナーソースを変え、AIが加速させてくれた

「Issueを起票すると自動でPRができる」という仕組み自体は前から存在していました。決まった書式のIssueテンプレートを用意しておき、そこに入力された内容をスクリプトが読み取って、設定ファイルを自動編集してPRを作る。いわばルールベースのIssueOpsです。

これはこれで十分便利で、たとえば

  • 権限申請のような、入力項目が決まりきった依頼
  • 特定のフォーマットのデータ連携定義を追加するような、パターン化しやすい依頼

にはとても有用です。わざわざ、リポジトリをcloneする作業も不要なので敷居を下げたインナーソースとしても以前からうまくハマり、実際に社内でも、こうした申請系の作業を自動化する取り組みは、AIエージェントが普及するより前から動いていました。

ただし、ルールベースである以上、対応できるのは「あらかじめ想定した書式・パターン」の範囲までです。少し込み入った依頼や、自然文でしか説明しづらい要望には対応できませんでした。

そこにAIエージェント(Claude Codeのようなコーディングエージェント)が加わったことで、状況が変わりました。

ルールベースの時代とAI時代の一番の違いは、Issueに入力する内容が「スクリプトがパースできる、かっちり決まったフォーマット」である必要がなくなったことだと思っています。以前は、項目名・選択肢・区切り文字まで含めて厳密に決めておかないと、後段の処理が動きませんでした。AIエージェントであれば、多少表現がゆれていても、あるいは自然文でだらだら書いてあっても、意図を読み取ってコードに落とし込んでくれます。

乱暴に言ってしまえば、日本語で「こうしてほしい」と書くだけでPRまで自動生成される、というところまでコントリビューターの敷居が下がったのが、今回の変化の本質です。つまり、IssueOpsという土台自体は以前からあったものを、AIがIssueOpsを自由にし、結果的にインナーソースを加速させる、というのが今の状況だと捉えています。

まあ流石に何でも自然文で通ってしまうと、意図しない範囲まで書き換えられてしまうリスクもあるため、どこかにガードレール(変更してよい範囲やレビュー必須のルールなど)を設けておくことは絶対必要です。

この3段階の変化を図にすると、こんな感じです。

見た目のステップ数はあまり変わっていないのですが、オレンジ(人がやる作業)がだんだん減って、青(自動化されている作業)に置き換わっているのがわかると思います。ルールベースの段階ですでに一部は自動化されていて、AIが加わったことで、起票そのものが自然文でよくなり、対応できる範囲も一気に広がりました。

実際どう使われている?

ずばり、こういうissueテンプレートです。これはプラットフォームチームが持つ定義ファイルに、社内連携システム側から定義変更の依頼を受け付けるものです。

変更内容と補足・備考あたりは、自然文を書いてもらい、その後、Claude Code GitHub Actionsを使ってPRまで作るということになります。

利用した人からは「簡単に依頼が出せた、フォーマットも迷わなかった」という声をもらえました。

とはいえ、いいことばかりではなく課題はあります。

課題

AIのコストを負担するのが誰なのか、という問題

ルールベースのIssueOpsは、実行コストがほぼスクリプトの実行時間だけだったので、あまり意識されていませんでした。ところがAIエージェントが実装まで担うようになると、そのコストが無視できない金額になってきます。これまでのインナーソースでは、コードを書くコスト(工数)はコントリビュートする側が負担していましたが、IssueOpsではその工数がAIエージェントの実行コストに置き換わり、しかもそのコストは多くの場合「リポジトリを持っている側」が負担することになります。

定義変更レベルでは消費されるトークンは少なくこのままでも問題なさそうですが、より大規模なPRとなっていく場合は議論しなければいけません。

意図とズレたPRが生成されることがある

自然文で起票できる分、自由度は高いのですが、AIが依頼内容を誤解して、意図と違う実装のPRを作ってしまうことも当然あります。実際に「IssueOpsで作られた設定が少しおかしかったので、直すPRを出しますね」という会話も社内でありました。結局、リポジトリを持っている側が手直しをすることになったわけです。ルールベースの時代にはこうした「解釈のズレ」はほぼ起きなかったので、これはAIが加わったことで新しく生まれた課題だと言えそうです。ただ、修正を加味しても楽にはなりました。

自然文の自由度には、ガードレールをセットで

ヘタをするとリポジトリを破壊するPRも作ってしまう可能性がありますので、何らかのガードレールは必要だと感じています。たとえば:

  • AIが編集してよいファイル・ディレクトリを限定する
  • 本番直接反映ではなく、必ずPR経由で人のレビューを挙してからマージする
  • バリデーションやCIを通さないとマージできないようにする
  • どこまでをAIに任せてよいか(実装方針の判断まで任せるのか、定型的な修正に限定するのか)をリポジトリごとに決めておく

このあたりは、IssueOpsの本体である「.github/workflows/xxx.yml」内のpromptなり、「claude/skills/xxx/SKILL.md」なりでしてはいけないことを明示しましょう。

まとめ

狭い意味でのインナーソース(フォーク → 修正 → PR → レビュー → マージ)は、まずルールベースのIssueOpsによって一部が自動化され、そこにAIエージェントが加わったことで、

Issueに自然文で起票 → AIがコードを修正してPRを作成 → レビュー → マージ

という形にまで進化しました。「IssueOpsという土台は以前からあり、AIがそれを加速させた」というのが、この1〜2年の変化を一番よく表しているように思います。コントリビュートする側に求められるハードルが「自然文を書くこと」まで下がったことで、これまでリーチできていなかった人たちからの貢献が生まれています。

一方で、AIのコスト負担がリポジトリを持つ側に偏ってしまったり、意図とズレたPRが生成されてしまったりと、新しい種類の課題も出てきています。それでも全体として見れば、チームの内外でのコラボレーションを活性化させる、良い方向に進んでいるのではないかなと思っています。

まだまだ事例は増え続けると思います。何かインナーソース関連を見かけたらまた書きたいと思います。

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!