シェル関数でAnthropic APIとGLM APIを切り替える仕組みの図解。ノートPCを操作する男性キャラと、環境変数の更新フロー。

Claude Code の起動時に --glm フラグを渡すだけで、GLM API に自動切り替えできるシェル関数を実装しました。

私自身、Claude Codeで異なるAPIバックエンドを試す際に毎回環境変数をexportし直すのが面倒で、もっと手軽に切り替えたいと感じていました。

こんな人におすすめ

  • Claude Codeで複数のAPIバックエンドを使い分けたい方
  • 毎回の環境変数設定が面倒だと感じている方
  • シェル関数でCLIツールをカスタマイズする方法に興味がある方

目次

背景

Claude Code はデフォルトで Anthropic API を使用しますが、環境変数 ANTHROPIC_BASE_URL などを設定することで、互換 API に切り替えることができます。

ただし、毎回手動で環境変数を設定するのは手間でした。
export を何度も打ち直す作業は、正直なところストレスを感じていました。

つまづいた点

最初は alias で対応しようとしましたが、引数の受け渡しがうまくいかず困りました。
--glm だけを取り除いて残りの引数を渡す必要があるため、シェル関数でのラップが必要だと気づきました。

また、関数名を claude にすると再帰呼び出しになってしまう問題にもハマりました。
command ビルトインを使うことで解決できましたが、意外にも見落としがちなポイントです。

実装

~/.zshrc に以下のシェル関数を追加します:

# GLM API トークン(Claude --glm 用)
export _GLM_AUTH_TOKEN="your-token-here"

# Claude Code GLM モード対応
claude() {
  local glm_mode=false
  local args=()

  for arg in "$@"; do
    if [[ "$arg" == "--glm" ]]; then
      glm_mode=true
    else
      args+=("$arg")
    fi
  done

  if $glm_mode; then
    echo "🔄 GLM モードで起動します..."
    ANTHROPIC_AUTH_TOKEN="${_GLM_AUTH_TOKEN}" \
    ANTHROPIC_BASE_URL="https://api.z.ai/api/anthropic" \
    API_TIMEOUT_MS="3000000" \
    ANTHROPIC_DEFAULT_OPUS_MODEL="glm-4.7" \
    ANTHROPIC_DEFAULT_SONNET_MODEL="glm-4.7" \
    ANTHROPIC_DEFAULT_HAIKU_MODEL="glm-4.5-air" \
    command claude "${args[@]}"
  else
    command claude "$@"
  fi
}

ポイント

  • 引数のパース: --glm フラグを検出して環境変数を設定
  • 他のオプションの維持: --chrome など他のオプションはそのまま渡される
  • 再帰防止: command claude を使用して関数自身の再帰呼び出しを防止

使い方

# 通常起動(変更なし)
claude

# GLM モード
claude --glm

# 他のオプションと併用
claude --glm --chrome

学び

  • シェル関数でコマンドをラップすることで、条件に応じて環境変数を動的に設定できます
  • command を使うことで、関数と同名のコマンドを明示的に呼び出せます
  • 引数パースは for ループと配列でシンプルに実装できます

実際にこの関数を導入してからは、APIの切り替えが claude --glm の1コマンドで済むようになり、毎回のexport作業が不要になりました。
ちょっとした工夫ですが、日常の開発体験が格段に良くなったと感じています。