環境変数
sharedState を使って Proxyman のスクリプト間でデータを共有し、$ プレフィックスを付けて API トークンなどのシステム環境変数をスクリプト内で読み取る方法を紹介します。
1. 共有ステート
共有ステートは、Proxyman がサポートするすべての macOS バージョン(macOS 14 Sonoma 以降)で利用できます。
グローバルオブジェクトの sharedState を使うと、onRequest() と onResponse() の間、そして別のスクリプト同士でステートを共有できます。
- sharedState は JS オブジェクト(ディクショナリ)です。onRequest() で任意のキーと値を設定すると、onResponse() や別のスクリプトでそのデータを読み取れます。
次のコードでは、以下の処理の方法を示します。
- グローバルカウンターを取得して、スクリプトが実行されるたびに増やす
- リクエストとレスポンスの間でデータを共有する
function onRequest(context, url, request) {
// Save some state to sharedState
sharedState.url = url;
sharedState.data = "custom";
sharedState.info = {"username": "Proxyman"};
// Increase the global counter
var count = sharedState.count ?? 0;
count += 1;
sharedState.count = count;
// Log
console.log(sharedState);
return request;
}
function onResponse(context, url, request, response) {
// Receive it
console.log("Custom data = " + sharedState.data);
console.log("sharedState.count = " + sharedState.count);
// Done
return response;
}
Proxyman 2.25.0 以降では、sharedState を別のスクリプト間でも利用できます。Proxyman を終了するか、`clearSharedState()` 関数を呼び出した場合にのみ解放されます。
Proxyman 2.24.0 より前のバージョンでは、sharedState は、それを実行しているスクリプトのフロー内でのみ有効です。スクリプトの実行が終わると解放されます。
すべてのデータを消去するには、`clearSharedState()` 関数を使用します。
// Clear all data from sharedState object
clearSharedState();
2. 環境変数
Environment Variables 機能は Proxyman 3.8.0 以降で利用できます。
- スクリプトからシステムの環境変数を読み取れます。
- bash と zsh に対応しています。
使い方
~/.zshrcまたは~/.bashrcで環境変数を定義します
export ACCESS_TOKEN=AAABBBCCC
export PROXYMAN_PATH=/Users/my_user/Desktop/file-mapper
2. 任意のスクリプトを開き、More ボタン -> Environment Variables -> Allow all scripts to access Environment Variables の順にクリックします。
3. Reload をクリックして、環境変数の最新の変更を読み込みます。

スクリプトに環境変数の読み取りを許可する
4. スクリプト内では $ プレフィックスを付けて環境変数にアクセスします。
async function onResponse(context, url, request, response) {
console.log($PATH);
console.log($ACCESS_TOKEN);
console.log($PROXYMAN_PATH);
// Done
return response;
}
3. 追加機能
- システムの環境変数を手動で再読み込みできます(Proxyman macOS 4.15.0 以降)。先に権限を有効にしてください。More ボタン -> Environment Variables -> Allow all scripts to access Environment Variables の順に選択します。
async function onRequest(context, url, request) {
// manually reload to get the latest changes
_reloadEnv();
// get env
console.log($PROXYMAN_ID)
// Done
return request;
}