Graphite

概要 Graphite は GitHub 上の PR ワークフローを拡張する開発者プラットフォーム。2025年3月に Anthropic から $52M の Series B を調達。元 Airbnb・Meta エンジニア出身チームが、Meta 内部ツール(Phabricator/Sapling)のスタック開発体験を GitHub に持ち込んだ。AI が大量に PR を量産する「AI ファースト開発」環境での詰まりを解消する。 3本柱 1. スタックドPR 大きな変更を依存関係のある小さな PR の連鎖に分割する。DB スキーマ→API→認証ミドルウェアのような依存チェーンを独立した PR として管理し、レビュアーの認知負荷を下げる。 1 2 3 gt stack # 現在のスタック状態を確認 gt submit # スタック全体を一括 PR 作成 gt sync # main の変更を全 PR にリベース 2. マージキュー(スタック対応) スタックの依存関係を理解した上で main へのマージを直列化。CI が通ったものから順番にマージされるため、コンフリクトなしに高頻度デプロイが可能になる。 3. Graphite Agent(旧 Diamond) AI によるコードレビューと対話的修正。差分を理解した上でコメントし、Chat で修正まで完結できる。 ...

2026年4月23日 · 1 分

pytest でカオスエンジニアリングを始めるガイド

概要 「本番で障害が起きてから対処する」のではなく「テスト段階で意図的に障害を起こして耐性を確認する」カオスエンジニアリングの考え方を pytest に組み込む手法。@pytest.mark.chaos というカスタムマーカーで障害注入テストを分類・選択実行できる。 セットアップ マーカー登録 1 2 3 4 5 # pyproject.toml [tool.pytest.ini_options] markers = [ "chaos: カオスエンジニアリング関連のテスト(障害注入・耐性検証)", ] 選択実行 1 2 3 pytest -m chaos # カオステストのみ pytest -m "not chaos" # 通常の CI(カオステストをスキップ) pytest -m "chaos or integration" 主要な障害注入パターン ネットワーク障害 1 2 3 4 5 @pytest.mark.chaos def test_api_timeout_fallback(): with patch("app.client.requests.get", side_effect=TimeoutError): result = app.client.fetch_user_profile(user_id=123) assert result == app.client.get_cached_profile(user_id=123) データベース障害 1 2 3 4 5 6 @pytest.mark.chaos def test_db_connection_lost(): mock_primary = MagicMock(side_effect=ConnectionError("Connection lost")) with patch("app.db.get_primary_connection", mock_primary): result = app.db.query_user(user_id=123) assert result is not None # リードレプリカから取得 ランダム障害 Fixture(確率的注入) 1 2 3 4 5 6 7 8 9 10 11 @pytest.fixture def chaos_network(monkeypatch): """30% の確率でネットワーク遅延を注入""" original_get = requests.get def unstable_get(*args, **kwargs): if random.random() < 0.3: time.sleep(random.uniform(1.0, 5.0)) if random.random() < 0.1: raise ConnectionError("Chaos: connection refused") return original_get(*args, **kwargs) monkeypatch.setattr("requests.get", unstable_get) Django との統合 1 2 3 4 5 6 @pytest.mark.chaos @pytest.mark.django_db def test_cache_backend_failure(client): with patch("django.core.cache.cache.get", side_effect=Exception("Redis down")): response = client.get("/api/users/1/") assert response.status_code == 200 # キャッシュなしでも正常応答 CI/CD 組み込み(GitHub Actions) 1 2 3 4 5 6 7 8 9 10 11 12 13 name: Chaos Tests on: schedule: - cron: '0 3 * * 1' # 毎週月曜 AM3:00 jobs: chaos-test: runs-on: ubuntu-latest env: CHAOS_ENABLED: "1" steps: - uses: actions/checkout@v4 - run: pip install -r requirements-test.txt - run: pytest -m chaos --tb=long -v 通常 CI では pytest -m "not chaos" で高速に回し、週次スケジュールジョブでカオステストのみ実行する運用が推奨される。 ...

2026年4月23日 · 2 分

Graphite 徹底解説 — スタックドPRとマージキューがAIファースト開発を加速する理由

CreaoAI が25名で6週間のリリースサイクルを1日に短縮した事例では、PR 管理ツールとして Graphite が採用されていた。1日8回デプロイ・AI が大量に PR を量産する運用で、素の GitHub PR フローは何が詰まり、Graphite は何を解決するのか。本記事では Graphite の3本柱(スタックドPR・マージキュー・AIレビュー)を、CLI コマンドと具体的な運用シナリオで解説する。 Graphite とは Graphite は GitHub 上の PR ワークフローを拡張する開発者プラットフォーム。2025年3月に Anthropic から $52M の Series B を調達し、同時に AI コードレビュー「Diamond」をローンチした(現在は Graphite Agent に名称統合)。元 Airbnb・Meta のエンジニア出身チームが、Meta 内部で使われていた Phabricator / Sapling 的なスタック開発体験を GitHub に持ち込んだのが出発点だ。 主要機能は3つに整理できる。 スタックドPR — 大きな変更を依存関係のある小さな PR の連鎖に分割する マージキュー — スタックを理解した状態で main にマージを直列化する(stack-aware) Graphite Agent(旧 Diamond)+ Chat — AI によるコードレビューと対話的修正 スタックドPR:大きな差分を「小さなレビュー単位の連鎖」に分解する 何が問題だったのか AI エージェントや生産性の高い開発者は、1つのフィーチャーを実装する過程でしばしば以下のような複数階層の変更を生む。 DBスキーマの追加 それを使う API エンドポイント 認証ミドルウェアの更新 フロントエンドの呼び出し 従来の GitHub PR モデルだと選択肢は2つしかない。 ...

2026年4月19日 · 3 分

「AIファースト」戦略の本当の意味 — ハーネスエンジニアリングで25人チームが6週間を1日に短縮した方法

MetaのGenAIチーム(LLaMA)出身のCo-FounderであるPeter Pang(@intuitiveml)が率いるエージェントプラットフォーム企業CreaoAI(25名)が、「AIファースト」を本気で実践した結果、コードの99%をAIが書き、かつてのリリースサイクル6週間を1日に短縮した方法を解説している。 元記事タイトルは “Why Your ‘AI-First’ Strategy Is Probably Wrong”。@SuguruKun_ai がX(旧Twitter)のスレッドで日本語解説している。 AIを「導入した」会社と「前提に組み直した」会社の違い 多くの企業は既存のプロセスにAIを乗せています。エンジニアがCursorを開き、PMがChatGPTで仕様書を書く――ワークフローは変わらず、効率が10〜20%上がるだけです。 AIファーストとはまったく別物です。AIファーストとは、「AIがメインのビルダーである」という前提でプロセス・アーキテクチャ・組織を再設計することです。「どうすればAIがエンジニアの役に立てるか?」ではなく、「どう再構築すればAIがビルドし、エンジニアが方向と判断を提供できるか?」という問いです。 ハーネスエンジニアリングとは何か OpenAIが2026年2月に発表した概念で、CreaoAIが実践の中で独自に到達していたアプローチと一致しました。 エンジニアリングチームの主な仕事はもはやコードを書くことではなく、エージェントが有用な作業を行える「環境(ハーネス)」を整えることである。 失敗が起きたとき、解決策は「もっと頑張れ」ではなく「どのケイパビリティが欠けているか、エージェントにとって読み解けるようにするにはどうすればよいか」を問うことです。 3つのボトルネックを解消した CreaoAIはAI移行前に3つの深刻な問題を抱えていました。 ① プロダクトマネジメントのボトルネック エージェントは2時間でフィーチャーを実装できます。数週間の計画サイクルがボトルネックになります。仕様書レビューではなく、プロトタイプ→リリース→テスト→反復のループで動く必要があります。 ② QAのボトルネック ビルド時間2時間・テスト時間3日では話になりません。AIが書いたコードをAIが構築したテストプラットフォームで検証し、バリデーションを実装と同速度で動かします。 ③ ヘッドカウントのボトルネック 競合は100倍の人員。CreaoAIは25名。採用では追いつけないため、設計で追いつく必要がありました。 アーキテクチャ統合:モノレポへ移行した理由 複数リポジトリにまたがる変更はAIエージェントにとって「不透明」でした。AIは全体像を把握できず、クロスサービスの影響を推論できません。 モノレポへ統合した一番の理由:AIがすべてを見られるようにするため。 ハーネスエンジニアリングの原則では「エージェントが検査・検証・変更できる形にコードを引き込むほどレバレッジが増す」とされる。1週間かけて新設計を策定し、さらに1週間でエージェントを使ってコードベース全体をリアーキテクチャした。 技術スタック詳細 インフラ:AWS 自動スケーリングのコンテナサービスとサーキットブレーカーロールバックで運用。デプロイ後にメトリクスが劣化すると自動でリバートします。CloudWatchを中枢神経系として使い、25以上のアラームとカスタムメトリクスで全サービスから構造化ログを収集します。 CI/CD:GitHub Actions(6フェーズ) 1 Verify CI → Build/Deploy Dev → Test Dev → Deploy Prod → Test Prod → Release CIゲートは型チェック・リント・ユニットテスト・統合テスト・Dockerビルド・Playwright E2Eテスト・環境パリティチェックをすべて必須で実施。手動オーバーライドは存在しない。パイプラインが決定論的であるため、エージェントが結果を予測して障害を推論できる。 AIコードレビュー:Claude Opus 4.6 PRのたびに3つのClaudeレビューパスを並列実行します。 コード品質 — ロジックエラー、パフォーマンス問題、保守性 セキュリティ — 脆弱性スキャン、認証境界チェック、インジェクションリスク 依存関係スキャン — サプライチェーンリスク、バージョン競合、ライセンス問題 1日8回デプロイする状況で人間レビュアーがすべてのPRに集中し続けることは不可能だ。これはサジェスチョンではなくレビューゲートである。 ...

2026年4月17日 · 1 分

GitHub Actions スクリプトインジェクション対策

概要 ${{ }} テンプレート式はシェル起動前に展開されるため、攻撃者制御のコンテキスト(PR タイトル・ブランチ名・Issue 本文)をそのまま run に埋め込むとコマンドインジェクション成立。 対策 env で環境変数に渡して ${VAR} で参照 actionlint・zizmor で自動検出 サードパーティ Actions はコミットハッシュでピン留め

2026年4月6日 · 1 分