ykzts.com

GitHub CodespacesとAIエージェントで作る快適なクラウド開発環境

著者: 山岸和利

日々の開発において複数のプロジェクトでコンテナ (Docker) を立ち上げたり、重いプロセスをローカルで動かしたりすることはマシンのリソースを圧迫して環境を汚す原因になりがちです。

そこでここ数年の開発では、ローカル環境を極力汚さず、負荷もかけないようにGitHub Codespaces (Dev Containers) をフル活用するようになりました。各リポジトリに.devcontainer/devcontainer.jsonを用意してクラウド上で開発を行うスタイルです。

最初は単なるマシンスペックの補完や環境のクリーン化として始めたこの運用ですが「AIエージェント」を開発フローに組み込むようになった現在これが思わぬ相乗効果を生んでいるので実際の構成やメリットとデメリットについて少し書いてみようと思います。

Dev Containersのシンプルな構成と具体例

リポジトリ直下に.devcontainer/devcontainer.jsonを配置するだけで、どこからでも同一の開発環境が立ち上がるのは非常に強力です。

Docker Composeを用いて複雑なコンテナ群を立ち上げるような使い方も可能ですが、基本的には公式の軽量なイメージをベースにしつつ、シンプルな構成に留めておくのが起動も早く扱いやすいと感じています。

例えばTypeScript (Node.js) 環境でAIエージェント (GitHub Copilot等) を併用する場合、以下のような最小限のdevcontainer.jsonを用意しています。

{
  "name": "Node.js & TypeScript Environment",
  "image": "mcr.microsoft.com/devcontainers/typescript-node:1-24-bullseye",
  
  "customizations": {
    "vscode": {
      "extensions": [
        "dbaeumer.vscode-eslint",
        "esbenp.prettier-vscode",
        "github.copilot",
        "github.copilot-chat"
      ]
    }
  },

  // コンテナ作成後に自動で依存関係をインストール
  "postCreateCommand": "npm install",
  
  // 開発サーバー用によく使うポートをフォワード
  "forwardPorts": [3000]
}

このように記述しておけばpostCreateCommandによって依存関係のインストールが自動化されるだけでなく、VS Codeの拡張機能 (リンターやAIアシスタント) や設定も強制的に統一されます。新しい環境を立ち上げた瞬間から普段通りのエディタ体験が保証されるわけです。

AIエージェントを動かす安全なサンドボックスとして

最近はIssueの要件定義から実装、Pull Requestの作成までをAIエージェント (CodeRabbitやGitHub Copilotなど) に委ねる開発プロセスを取り入れています。

エージェントに自律的にコードを書かせたり、コマンドを実行させたりする際、ローカル環境で直接それを行わせるのは環境の破壊や意図しないファイルの変更といったセキュリティや運用上のリスクを伴います。

その点、Dev Containersで構築されたCodespacesは完全に独立した使い捨てのコンテナ環境です。万が一AIが破壊的な操作を行ってしまってもコンテナを破棄して新しく立ち上げ直すだけで済むため、非常に安全なサンドボックスとして機能してくれます。

複数環境の並行稼働とポートフォワーディングの柔軟性

Codespacesを使うもう一つの大きなメリットは「使い捨ての環境を気軽に複数立ち上げられること」です。

AIエージェントに重い実装やデバッグを任せている間、人間はただ待っている必要はありません。AIが特定のブランチで作業 (思考と生成) を行っている間に、別のCodespaceセッションを立ち上げて別タスクのレビューや実装を並行して進めることができます。

またそれぞれの環境で開発サーバーを立ち上げた際もポートフォワーディングの設定を柔軟に切り替えることで、動作確認 (プレビュー) のコンテキストが混ざることなく容易に行えます。

  • 環境A: AIエージェントが機能追加の実装とテストを実行中
  • 環境B: 自分が並行して別のIssueを修正・プレビュー中

といったマルチタスクがローカルマシンのリソース (メモリやCPU) を一切消費せずに実現できるわけです。

リージョンに起因するレイテンシ

ここまで利点を挙げてきましたが運用する上で明確なデメリットも存在します。それはレイテンシ (通信遅延) です。

現在のところ、一般的なGitHub Codespacesの環境には日本のリージョンが存在しません。日本から接続する場合、一番近いリージョンでも東南アジア (シンガポール) に割り当てられるため、どうしても一定のネットワークレイテンシが発生してしまいます。

タイピングの反映やターミナルの操作において、ネイティブのローカル環境と比べるとわずかな遅延を感じることがあり、ネットワーク環境が不安定な場所ではストレスに繋がる可能性があります。

おわりに

多少のレイテンシというトレードオフはあるものの、この構成において手元のマシンは「クラウド上の開発環境とAIエージェントにアクセスするための、非常に快適なシンクライアント」として機能してくれています。

AIがコードを読み書きする時代において、人間の開発者が用意すべきなのは「強力なローカルマシン」ではなく、「AIが安全かつ効率的に働けるクラウド上のワークスペース」と「共通のコンテキストを定義するドキュメント (AGENTS.mdなど)」へと変化しつつあるのかもしれません。

ローカル環境の運用に煩わしさを感じている方やAIエージェントの導入に踏み切れないでいる方は一度Dev Containersベースのクラウド開発環境を試してみてはいかがでしょうか。