Messages APIを使ったさくらのAI EngineとClaude Codeの連携を参考に、Claude CodeにさくらのAI Engineが提供する preview/Kimi-K2.7-Code を接続して、記事の大筋を書いてもらいました。
私が使用しているdirenvのバージョンを調べ、そのソースコードをgit cloneして解析してくれました。
さくらのAI Engineの活用事例として、本記事はキャンペーンに応募します。
はじめに
direnv は、ディレクトリごとに環境変数を自動で切り替えるツールです。
プロジェクトごとに .envrc を用意しておけば、ディレクトリへ移動するだけで、そのプロジェクト専用の環境変数を読み込んでくれます。
毎回 source を実行する必要がなく、さくらのAI Engineのアカウントトークンや各種APIキーを扱う開発では非常に便利なツールです。
この記事では macOS + Homebrew を前提に説明します。
インストール
Homebrewを利用している場合は、次のコマンドでインストールできます。
brew install direnv
続いて、使用しているシェルに direnv を組み込みます。
zsh の場合は ~/.zshrc に次を追加します。
eval "$(direnv hook zsh)"
設定を反映します。
source ~/.zshrc
これで direnv が利用できるようになります。
direnvとは
direnv は、ディレクトリごとに環境変数を自動で切り替えるツールです。
プロジェクトごとに .envrc を用意しておけば、
cd project-a
で Project A 用の環境変数が設定され、
cd ../project-b
で Project B 用へ自動で切り替わります。
毎回 source を実行する必要がないため、とても便利です。
初めて .envrc を作成すると、次のようなメッセージが表示されます。
direnv: error <絶対パス>/.envrc is blocked. Run `direnv allow` to approve its content
なぜ、わざわざ direnv allow が必要なのでしょうか。
なぜ direnv allow が必要なのか
.envrc は設定ファイルのように見えます。
しかし実際には シェルスクリプトです。
つまり、
- 環境変数を書き換える
- APIキーを送信する
-
rmを実行する -
curlを実行する
といった、任意のコードを書けます。
もし git clone しただけで勝手に .envrc が実行されたら、とても危険です。
そこで direnv は、
内容を確認した人だけが実行を許可する
という仕組みになっています。
その確認操作が
direnv allow
です。
direnv allow は何を記録しているのか
direnv は、「このディレクトリを信用した」のではありません。
その時点の .envrc の内容を信用したことを記録しています。
ソースコードを調べると、direnv は次の内容から SHA-256 ハッシュを計算しています。
.envrc の絶対パス
+
改行(LF)
+
.envrc の内容
そのハッシュ値をファイル名として保存します。
つまり、
内容が1文字でも変わる
↓
ハッシュ値が変わる
↓
以前許可したものと一致しない
↓
もう一度 direnv allow が必要
という流れです。
ハッシュ値を自分で計算してみる
macOSなら、次のコマンドで direnv と同じハッシュ値を計算できます。
envrc="$(pwd -P)/.envrc"
{
printf '%s\n' "$envrc"
cat "$envrc"
} | shasum -a 256
表示された値が、direnv allow を記録するファイルのファイル名になります。
では、次の疑問としていったいどこに保存されているのでしょうか。
direnv allow の記録はどこに保存される?
macOSで XDG_DATA_HOME を設定していなければ、保存先は
~/.local/share/direnv/allow/
です。
実際にlsで確認すると、
24d0c6baccc7a8cc2744a940de15c5de4f5c2d56435911e66358e7fef6fe6860
6989343539d49db3a6faa164f55b3e9654923f666d75518902ea2a49e907e936
のようなファイルが並びます。
中身を見ると、
cat ~/.local/share/direnv/allow/<ハッシュ値>
.envrc の絶対パスだけが保存されていることが分かります。
まとめ
direnv allow は、
「この内容の
.envrcは確認済みなので実行してよい」
という記録を残す仕組みです。
.envrc が1文字でも変わればハッシュ値が変わるため、以前の許可は自動的に無効になります。
そのため、再び direnv allow が必要になるのです。
編集後記
この記事を書くにあたり、さくらのAI Engineから本記事執筆専用アカウントトークンを払い出しました。
そして専用ディレクトリ配下だけで有効な環境変数を定義したく、direnvを使いました。
調査および、記事の下書きに使用したリクエスト数は92回でした。
入力トークン(闘魂)が4,639,140で、出力トークン(闘魂)が44,007でした。
トークン単価で計算すると、約300円くらいを使用させていただきました。
ありがとうございます。


