Cursor × Dockerで構築する爆速AI駆動開発環境:コンテナの奥底までAIを降臨させるプロの作法
テックリードの皆さん、日々の開発で「ローカル環境の汚染」「OS依存のバグ」「コンテナ内開発におけるIDEのモタつき」にフラストレーションを感じていないだろうか。
VS Codeベースのフォークでありながら、圧倒的なコードベース理解力を持つAIエディタ「Cursor」は、単なるコード補完ツールではない。しかし、その真価は「Dockerコンテナ内部へのシームレスなアタッチ」と融合した瞬間、文字通り爆発的な開発スピードとして現れる。
本記事では、ネット上の浅い導入記事とは一線を画し、CursorとDocker(Docker Compose)を極限まで同期させ、AIにコンテナ内のデータベースやAPIを完全理解させた上で高速実装させるための実務直結のアーキテクチャを解説する。
—
1. なぜ「コンテナ内Cursor」なのか?(アーキテクチャの真実)
多くの開発者は、ホストOS(Mac/Windows)上でCursorを起動し、ホスト側のNode.jsやPythonランタイムを使ってコードを書いている。しかしこれでは、「私のローカルでは動くのに、コンテナ(本番)では落ちる」という永遠の課題から逃れられない。
CursorをDockerコンテナ内部に直接アタッチ(Attach to Container)させると、以下のシステム的メリットがもたらされる。
- 完全な環境同一性: コンテナ内にインストールされたLinter、Formatter、Compiler、SDKのバイナリを、Cursorの拡張機能(Language Server Protocol)が直接キックする。
- AIコンテキストの精度向上: CursorのAI(ComposerやChat)は、プロジェクトのコードベース全体をインデックス化する。コンテナ内の依存関係(`node_modules` や `vendor` など)を含めた正確な型定義をAIが参照するため、ハルシネーション(嘘のコード生成)が激減する。
- ホスト環境のクリーン保全: ホスト側にはDockerとCursor以外のSDKを入れる必要がなくなり、複数プロジェクト間のバージョンコンフリクトが物理的に消滅する。
—
2. 爆速構築:Docker Compose と Dev Containers の融合設定
まずは、プロジェクトをコンテナで完全にカプセル化し、Cursorからワンクリック(あるいは自動)で接続するための設定ファイル群を構築する。
ここでは、「Go(API) + PostgreSQL(DB) + Redis」のモダンな構成を例に取る。
2.1. ディレクトリ構造のベストプラクティス
プロジェクトのルート直下に `.devcontainer` ディレクトリを配置する。これがコンテナ駆動開発の命綱となる。
my-project/
├── .devcontainer/
│ ├── devcontainer.json # Cursor/VS Codeの接続・拡張機能定義
│ └── Dockerfile # 開発用コンテナのビルド定義
├── docker-compose.yml # ローカルインフラストラクチャ定義
├── go.mod
├── main.go
└── …
2.2. `docker-compose.yml`(インフラ定義)
開発コンテナとミドルウェアを統合管理する。ポイントは、開発用コンテナ(`app`)自身がDockerネットワーク内でデータベースと名前解決できるようにすることだ。
version: ‘3.8’
services:
# 開発用アプリケーションコンテナ
app:
build:
context: .
dockerfile: .devcontainer/Dockerfile
# コンテナを生かし続けるためのダミーコマンド(後からCursorでアタッチする)
command: sleep infinity
volumes:
# ソースコードをリアルタイムでコンテナにマウント(変更即反映)
- .:/workspace:cached
# Goのビルドキャッシュやモジュールキャッシュを永続化し、ビルドを高速化
- go-mod-cache:/go/pkg/mod
working_dir: /workspace
environment:
- DB_HOST=postgres
- DB_PORT=5432
- DB_USER=postgres
- DB_PASSWORD=secret
- DB_NAME=development
ports:
- “8080:8080”
depends_on:
- postgres
- redis
networks:
- app-net
# データベースコンテナ
postgres:
image: postgres:15-alpine
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: secret
POSTGRES_DB: development
ports:
- “5432:5432”
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- app-net
# キャッシュストア
redis:
image: redis:7-alpine
ports:
- “6379:6379”
networks:
- app-net
volumes:
go-mod-cache:
pgdata:
app-net:
driver: bridge
2.3. `.devcontainer/Dockerfile`(開発環境の要)
単にGoが入っているだけでなく、日々の開発で必要不可欠なデバッガーやCLIツールをあらかじめコンテナに焼き込んでおく。これにより、新メンバーが参画した瞬間に「環境構築地獄」が消滅する。
FROM golang:1.22-alpine
開発に必要な最低限のシステムパッケージをインストール
RUN apk add –no-cache \
git \
curl \
bash \
make \
build-base \
postgresql-client
ホスト側とUID/GIDを合わせることで、コンテナ内で生成されたファイルが
ホスト側でルート権限になり触れなくなるパーミッション問題を回避
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN adduser -D -u $USER_UID vscode && \
mkdir -p /go/pkg/mod && \
chown -R vscode:vscode /go
USER vscode
開発効率を爆上げするGoの便利ツールをプリインストール
RUN go install github.com/go-delve/delve/cmd/dlv@latest && \
go install github.com/air-verse/air@latest
WORKDIR /workspace
2.4. `.devcontainer/devcontainer.json`(Cursor連携の脳髄)
これがCursor(およびVS CodeのDev Containers規格)をコンテナに接続させるための設定ファイルである。Cursorの強力なAI機能と拡張機能をコンテナ内で完全に動作させるためのキーストーンとなる。
{
“name”: “Go Development Container”,
// 起動時にどのDocker Composeを使うかを指定
“dockerComposeFile”: [“../docker-compose.yml”],
// どのサービスコンテナにアタッチするか
“service”: “app”,
// ワークスペースとして開くコンテナ内のパス
“workspaceFolder”: “/workspace”,
// コンテナ内に自動インストールするCursor/VS Codeの神プラグイン群
“customizations”: {
“vscode”: {
“extensions”: [
“golang.go”, // Go公式拡張機能
“ms-azuretools.vscode-docker”, // Docker管理
“cweijan.vscode-postgresql-client2”, // DBクライアント
“tamasfe.even-better-toml”
],
“settings”: {
// 保存時に自動フォーマット (gofmt / goimports)
“editor.formatOnSave”: true,
“[go]”: {
“editor.codeActionsOnSave”: {
“source.organizeImports”: “explicit”
}
},
“go.useLanguageServer”: true
}
}
},
// コンテナ起動後に自動実行するライフサイクルスクリプト
“postCreateCommand”: “go version && echo ‘Container is ready for Cursor AI!'”
}
—
3. 実践:Cursorをコンテナに接続し、AI駆動開発を爆発させる
設定が完了したら、いよいよCursorを起動する。
3.1. 接続の手順
1. ホスト側でDocker Desktopを起動しておく。
2. Cursorでプロジェクトフォルダを開く。
3. コマンドパレット (`Ctrl + Shift + P` または `Cmd + Shift + P`) を開き、`Dev Containers: Open Folder in Container…` を選択する。
4. Cursorの別ウインドウが立ち上がり、Docker Composeのビルドが走り始める。
5. 完了すると、左下のステータスバーが `>< Dev Container: app` に変わり、コンテナ内部への接続が完了する。
この瞬間から、あなたがCursor上で書くコード、叩くターミナル、そしてAI(Cursor Chat / Composer)が参照するコンテキストのすべてが「コンテナ内」で完結する。
—
4. プロの技:AIによるSQL/API実装をシームレスに行う極意
コンテナ内でCursorを動かす最大のメリットは、「稼働中のデータベースやAPIエンドポイント」とAIを直接対話させられる点にある。
ここでは、実務で明日から使えるAI活用テクニックを3つ紹介する。
技1:Composer(Ctrl/Cmd + I)にデータベーススキーマを直接教え込む
Cursorの最強機能である「Composer(複数ファイル同時編集)」を使う際、単にコードを見せるだけでなく、コンテナ内のPostgreSQLのスキーマ情報をコンテキストとしてインジェクトする。
1. ターミナルでコンテナ内のPostgreSQLに接続し、スキーマをダンプするか、拡張機能(PostgreSQL Client)でテーブル定義を開く。
2. Composerを開き、以下のようにプロンプトを投げる:
> プロンプト例:
> `@main.go および現在コンテナで起動している PostgreSQL の users テーブル(id, email, password_hash, created_at)の構造をベースにして、JWT認証を用いたユーザー登録APIのエンドポイントを `net/http` と `database/sql` を使って実装して。エラーハンドリングも堅牢に頼む。`
コンテナ内のLinterや型定義を理解しているCursorのAIは、ホストOS依存の型ズレを起こすことなく、一発で完璧なコンテナ内動作コードを生成する。
技2:テスト駆動開発(TDD)をAIとコンテナで高速化
コンテナ内でテストを回しながらAIにコードを修正させるループを構築する。
1. Cursor内蔵のターミナル(コンテナに接続されている)で、テスト常時監視コマンドを叩く:
# 例: AirやGotestsumなどを用いたテスト自動実行
go test -v ./…
2. テストが落ちた場合、そのエラーログをコピーし、CursorのChat (`Ctrl/Cmd + L`) に貼り付けて、「このコンテナ内のテストエラーを修正するコードを書いて」と指示する。
3. コンテナ内の環境を知り尽くしたAIであるため、「依存関係がない」「バージョンが違う」といった的外れな修正を提案することが一切なくなる。
—
5. チーム開発で絶対に共有すべき設定ルール
この環境をチーム全体に水平展開するための鉄則をまとめる。
1. `.devcontainer/` は必ずGit管理下に置く:
チームメンバー全員が同じ `devcontainer.json` と `Dockerfile` を共有することで、「私の環境では動かない」という言葉をチームの辞書から抹殺できる。
2. ホスト側のDockerリソース制限の統一:
開発コンテナはメモリやCPUを多く消費するため、Docker Desktopの設定でメモリを最低 `4GB以上`(できれば8GB)に割り当てるよう、チームのドキュメント(README.md)に明記する。
3. Cursorの `.cursorrules` の活用:
プロジェクトルートに `.cursorrules` ファイルを置き、以下のようなチーム共通のコーディング規約やAIへの指示書を配置する。
.cursorrules
- このプロジェクトは Docker コンテナ(Go 1.22 Alpine)上で動作しています。
- 外部パッケージを追加する際は、必ずコンテナ内ターミナルで `go get` を実行してください。
- エラーハンドリングは必ずラップし、ログには構造化ロガースタイルを使用してください。
- 生成するコードは必ず Go の標準フォーマッタ(gofmt)に適合させてください。
—
結び:開発体験の極限へ
CursorとDockerの融合は、単なる「便利な開発ツール」の域を超えている。それは、「環境構築の苦しみ」を完全に過去のものにし、エンジニアの脳内にあるアイデアを、最高速度でプロダクション品質のコードへと昇華させるための最強のパイプラインである。
今日からあなたのプロジェクトに `.devcontainer` を導入し、コンテナの奥底までAIを降臨させろ。開発スピードの次元が変わることを、その手で実感してほしい。