はじめに
Copilot CLIは親プロセスで設定された環境変数のうち、OPENAI_API_KEYなど一部の環境変数を読むことができません。
このため、これらのAPIキーを使ったコードの動作確認をcopilotに行わせることが難しいです。
そこで、copilot-cliがOpneAI APIキーを使えるようにする方法を検討しました。
注意:aiにどこまでの情報を見せるかは各自の責任でご判断ください
環境
- 親プロセス(OS): ubuntu 24.04のbashターミナル
- Copilot CLIのバージョン: 1.0.10
問題
通常、親プロセスの環境変数はCopilot CLIから参照できますが、なぜかOPENAI_API_KEYは参照できないようです。
以下のようにして確かめられます。
まず親プロセス(copilotコマンドを実行するubuntuのターミナル)で検証用の環境変数をexportします。
export FOO=BAR # 通常の環境変数
export OPENAI_API_KEY=dummy
適当なフォルダでcopilotを起動します。
mkdir env-test
cd env-test
copilot
copilotのbashモード(!を先頭につける)で環境変数を表示させてみます。
!echo $FOO # BARが出力
!echo $OPENAI_API_KEY # No Contentが出力
環境変数FOOはcopilotのbashでも読めていますが、OPENAI_API_KEYは読めていないことがわかります。
またOPENAI_API_KEY以外だと、ANTHROPIC_API_KEYも読めないようです。
GEMINI_API_KEYやDEEPSEEK_API_KEYは読めていました。
echoだけでなく、pythonスクリプトからもOPENAI_API_KEYは読めません。
試しに、環境変数を読み取るpythonスクリプトを作成します。
import os
print("$FOO:", os.getenv("FOO"))
print("$OPENAI_API_KEY:", os.getenv("OPENAI_API_KEY"))
copilot内で実行すると、FOOのみ表示され、OPEANI_API_KEYは存在しないことになっています。
!uv run read_env.py
$FOO: BAR
$OPENAI_API_KEY: None
軽く検索した範囲では、「copilotがOPENAI_API_KEYを参照できない」という仕様は確認できませんでした。筆者の環境特有の問題の可能性もありますが、参照できないキーの種類的に、開発者の意図がありそうな気もします。
対策
1. 毎回exportする
bash実行前に必ず必要な環境変数をexportすることで、そこでexportした環境変数を読むことができます。
copilotのbashモード(先頭にエクスクラメーション)で以下を実行すると、dummyと出力されます。
!export OPENAI_API_KEY=dummy && echo $OPENAI_API_KEY
複数キーを読み込む場合は.bashrc的なファイルを読ませればよいです。
sourceは使えなかったので.で読み込ませます。
!. ~/.bashrc && echo $OPENAI_API_KEY
運用時は、copilot-instructions.mdに毎回.bashrcを読むよう指示を書きます。
2. dotenvを使う
スクリプトから環境変数を読むのであれば、スクリプト内で.envをロードしてもOKです。
pythonだと以下のような感じです。
.envファイルを作ります。
OPENAI_API_KEY=dummy
.envを扱うライブラリをaddし、スクリプトに読み込む処理を追加します。
uv add python-dotenv
import os
import dotenv
dotenv.load_dotenv()
print("$FOO:", os.getenv("FOO"))
print("$OPENAI_API_KEY:", os.getenv("OPENAI_API_KEY"))
実行すると.envの内容を読めていることがわかります。
!uv run read_env.py
$FOO: BAR
$OPENAI_API_KEY: dummy
プロンプトで毎回.bashrcを読む指示を書かなくて良いので、多少スマートかもしれませんが、.envファイルをリポジトリ内で管理することになるので、セキュリティ的には若干不安です。
.envをreadできないようにcopilot-cliの設定を調整すると良いかもしれません。