はじめに
GitHub Copilot CLI をなるべく安全に自走させるため、専用のDockerワークスペースを作りました。
注意喚起
上記のリポジトリでは、コンテナ内でcopilot-cliを起動するとyoloモード(全権限許可)になるようaliasで設定していますが、実際に運用する際は、どの程度の権限を与えるかを慎重に判断してください。
Dockerコンテナを作ってもcopilotをyolo(allow-all)モードで実行させることにはリスクがあります。
ネットワークに繋がっていればリモートリポジトリの破壊や情報漏洩など悪さはやろうと思えばいくらでもできます。
copilot-cliに与える権限については慎重にご判断ください。
つくったもの
このリポジトリでは、Copilot CLI を動かすための Docker ベースの workspace を用意しています。
特徴は次の通りです。
- 以下をインストール済み
-
copilot-cli、gh、git、uv、tmuxなど - など
-
- ホストOSでghにログインしておけば、コンテナ内で再ログイン不要
- ホストのディレクトリを既定ではbind mountしないため、コンテナ内でのファイル操作によってホストが直接影響を受けるリスクが減る(ネットワーク経由でのリスクは残る)
- コンテナは
rootではなく専用ユーザーで動かす
どういう人向けか
以下のようなユーザをイメージしながら作りました。
- Copilot CLI を試したいけど、ホストに直接入れたくない
- AI エージェントにある程度自由にコマンドを打たせたい
- 普段使いの開発環境とは少し分離したい
- Python 開発で最低限の道具は最初から入っていてほしい
使い方
コンテナにログイン後、/home/copilot/development にリポジトリを clone、tmuxでwindowを分けながらcopilotを並列実行するような流れを想定しています。
- ビルドと起動
# イメージ作成
./scripts/compose.sh build
# 常駐ワークスペースとして起動
./scripts/compose.sh up
# シェルに入る
./scripts/compose.sh exec
- コンテナ内での作業例
cd ~/development
# ブラウザ等でcopilotにログイン
copilot login
# tmuxでwindowを分けながらcopilotを並列実行
tmux new -s copilot
gh repo clone owner/repo1
cd repo1
copilot
# 別window
# ctrl+b c で新しいwindowを作る
gh repo clone owner/repo2
cd repo2
copilot
copilotのalias
対話シェルでは、Copilot CLI を少し使いやすくするために alias も入れています。
export BASH_ENV="$HOME/.bashexports"
[ -f "$BASH_ENV" ] && . "$BASH_ENV"
alias copilot='copilot --yolo --bash-env=on'
--yoloの部分は各自で許容できるリスクに合わせて変えると良いと思います。
おわりに
とりあえず今のところ使っていて不満はないです。
似たことをやりたい方の参考になればと思います。