AI ペアプログラミングの、その先の本番リリース

AI ペアプログラミングは速い。次は安全に出荷すること。

AI ペアプログラミングでコードは早く書けるようになります。upstreamapiは、そのコードを段階的ロールアウト、フィーチャーフラグ、SLOに基づく自動ロールバックで本番へ届けるための仕組みです。

共有モニターでAI支援によるコードをレビューする2人のエンジニアと、デプロイのグラフ
AIに求めていること

チームがAIアシスタントとペアを組む理由

AIを検索する人の意図は、好奇心であることはまれです。エディタに具体的な成果を求めていて、その一つひとつには後工程のコストがあります。

最初の下書きが数秒で

定型コード、ハンドラー、マイグレーション、テストが出発点として現れるので、エンジニアは本当に難しいロジックに時間を使えます。

必要なときのセカンドオピニオン

ある関数がなぜそう動くのか、リファクタリングで何が壊れうるのかを質問できます。ただし、回答はコードで確かめる必要があります。

コードと並行して書かれるテスト

金曜の午後なら省いてしまうようなケースを、アシスタントが下書きしてくれます。どのアサーションが重要かは、あなたが判断します。

古いコードへの早いオンボーディング

特定の一人しか知らないサービスを探す代わりにコードベースへ質問できれば、未知のサービスも早く読めるようになります。

コンテキストスイッチの削減

ドキュメント、スニペット、回答がエディタの中に届きます。タブも割り込みも減り、アイデアと動くコードのループが締まります。

エンジニア一人あたりの変更量が増える

予算に組み込まれないことが多い副作用です。週に統合される変更が増えれば、安全に本番へ届ける経路が必要なリリースも増えます。

ギャップ

コードは増えても、リリースの手順は同じ

コードが速く届くようになると、ボトルネックは移動します。レビュー、リリース、ダッシュボードの監視は、最初の下書きが速くなったからといって速くなるわけではありません。AIアシスタントとペアを組むチームでは、マージの後に行列ができることがよくあります。人が判断しないと出せないリリース、全か無かのデプロイ、手作業で行うロールバックです。解決策はアシスタントの速度を落とすことではありません。一回のリリースを小さく、観測可能で、元に戻せるものにすることです。そうすれば変更量が増えても、インシデントの量は増えません。

  • デプロイを一度に全トラフィックへ適用すると、どのバグも即インシデントになる
  • 生成されたコードは、負荷、データ形状、処理順序についての前提を隠しがち
  • 手動のロールバックは、誰かが気づき、判断し、実行することに依存する。しかも最悪の時間帯に
  • レビューが見るのは差分の中身であり、本番トラフィックの下で何が起きるかではない
段階的ロールアウトを詳しく見る
段階的な公開でトラフィック比率が段階的に上がるロールアウトのダッシュボード
エディタからユーザーまで

AIが書いたコードのための、より安全な経路

4つの段階。アシスタントが担当するのは最初の段階だけです。残りはデリバリーの仕事です。

  1. 1

    書いて、レビューする

    アシスタントとペアで書き、他のプルリクエストと同じようにレビューします。テストが通り、人が承認し、変更がマージされます。

  2. 2

    ロールアウトをシミュレートする

    何かを公開する前に、段階的ロールアウトとそのトラフィックへの影響がどう進むかをモデル化し、まず紙の上で計画を検証します。

  3. 3

    段階的に公開する

    フィーチャーフラグの背後で出荷し、公開範囲を段階的に広げます。全員に届く前に、少数のトラフィックが変更を先に見ます。

  4. 4

    SLOに判断させる

    ロールアウト中にエラー率やレイテンシの目標を外れたら、パイロットが自動的に巻き戻します。ロールバックを始めるためにページャーで起こされる必要はありません。

upstreamapiの役割

コードアシスタントではなく、デリバリーの制御

upstreamapiは、アシスタントが止まるところから始まります。コードを書くことも、レビューすることもありません。変更がユーザーに届く経路を管理します。

段階的ロールアウト

ゼロから全員へ一気に切り替えるのではなく、対象のトラフィックを段階を踏んで増やしてリリースします。

フィーチャーフラグ

生成されたコードを非公開のままマージし、特定のセグメントに対して数秒でオンにし、またオフにできます。再デプロイは不要です。

SLOによる自動ロールバック

重要な目標を定義しておきます。ロールアウトがその上限を超えると、変更は自動的に巻き戻ります。

ロールアウトのシミュレーション

変更が実際のユーザーに届く前に、段階的な計画と、想定されるトラフィックへの影響をテストします。

エディタに依存しない

upstreamapiが見るのは出荷される変更だけです。最初の下書きを書いたのがどのアシスタントであっても、同じように動きます。

オンコールが静かになる

自分で戻る悪いリリースは、翌朝見るログの一行であって、午前3時のページではありません。

午前3時のテスト

SLOを超えたら、ロールアウトは元に戻る

レビューとユニットテストをすべて通過した、生成された変更を想像してください。それが少数のトラフィックに届き、エラー率が上がり始めます。手動の運用では、誰かがアラートに気づき、リリースを見つけ、判断し、手作業で戻す必要があります。SLOゲートがあれば、目標を超えた時点でロールアウトは後退し、影響範囲は最初の小さな割合にとどまります。ポストモーテムには、長い時系列ではなく、短く読みやすいタイムラインが残ります。

  • 影響範囲は、ロールアウトが到達していた段階で上限が決まる
  • 巻き戻しは、たまたま見ていた人ではなく、メトリクスによって起動する
  • 全体のロールバックが不要な場合は、フラグで狙いを絞ってオフにできる
SLOによる自動ロールバックを見る
エラーのしきい値を超えた後、ロールアウトが自動的に巻き戻るのを見ているエンジニア
各レイヤーの役割

アシスタントかロールアウト層か。役割が違う

両者は補完関係にあります。AIアシスタントとペアを組むチームの多くは、パイプラインの異なる地点で両方が必要です。

比較項目AIコーディングアシスタントupstreamapi
主な役割コードを書き、理解する手助けをする変更がユーザーに届く経路を制御する
作動するタイミングマージ前、エディタの中マージ後、リリース中
コードを書くかはい。提案として。レビューするのはあなたいいえ
影響範囲を抑えるかいいえはい。段階的な公開とフラグによって
問題のあるリリースを戻すかいいえSLO違反時に自動で
強みのある領域最初の下書きの速さ最後の一マイルの安全性
よくある質問

AIペアプログラミングと安全なリリース

AIペアプログラミングとは何ですか?
エディタの中でAIアシスタントと一緒にコードを書く方法です。アシスタントは関数を提案し、テストを下書きし、慣れないコードを説明します。提案のすべてをレビューし、方向を決めるのは人です。マージされるものに責任を持つのも人のままです。アシスタントによって、一人のエンジニアが一日に書けるコードの量が広がります。
AIペアプログラミングでチームの出荷は速くなりますか?
通常、コードは早く届きます。それが狙いです。ただし、それがユーザーに早く届くかどうかは、デリバリーの経路によります。マージのたびに手動のリリースが必要で、ダッシュボードを不安げに見守ることになるなら、増えたコードは同じボトルネックの後ろに並ぶだけです。
AIが生成したコードは本番で危険性が高いですか?
本質的にはそうではありませんが、量が違います。週に変更が増えれば、リグレッションの機会も増えます。生成されたコードは、負荷やデータ形状についての前提を隠しながら、きれいに見えることもあります。答えは人が書いたコードと同じです。段階的に公開し、計測することです。
upstreamapiはAIコーディングアシスタントですか?
いいえ。upstreamapiはコードを書くことも、レビューすることもありません。マージの後に位置します。ロールアウトのシミュレーションと段階的ロールアウトを実行し、変更をフィーチャーフラグの背後に置き、SLO違反時には自動パイロットに巻き戻させます。チームが好むアシスタントと併用してください。
フィーチャーフラグは、生成されたコードにどう役立ちますか?
フラグは、コードをデプロイすることと、それを公開することを切り離します。生成された変更を非公開のままマージし、少数のトラフィックに対してオンにし、何かおかしければ数秒でオフにできます。再デプロイやリバートコミットは不要です。
SLOによる自動ロールバックは実際には何をしますか?
エラー率やレイテンシのしきい値など、サービスレベル目標を定義します。ロールアウト中に新しいバージョンがそのメトリクスを上限より超えると、誰かが気づいて操作するのを待つことなく、ロールアウトは自動的に以前の状態へ戻ります。
使うためにAIコーディングツールを変える必要はありますか?
いいえ。Copilot型のアシスタント、チャット型のエディタ、あるいはアシスタントを使わない場合でも、ロールアウト層が見るのは出荷される変更だけで、それがどう書かれたかは見ません。コーディングツールの選択と、デリバリーの制御の選択を分けたままにできます。
次のステップ

AIが書いたコードを、安全網とともに出荷する

アシスタントとのペアプログラミングは続けてください。ユーザーに届く部分には、段階的ロールアウト、フィーチャーフラグ、SLOベースの自動ロールバックを加えてください。