---
title: "Claude CodeでGLM APIに切り替えるシェル関数を実装"
created: "2026-01-06"
modified: "2026-03-17"
status: "published"
i18n:
lang: "ja"
translations: {}
platforms:
wordpress:
published: true
wp_status: "future"
url: "https://wakatchi.dev/claude-code-glm-api-shell-function"
published_date: "2026-03-19T06:00:00+09:00"
post_id: 2586
slug: "claude-code-glm-api-shell-function"
tags:
- "シェル関数"
- "環境変数"
- "zsh"
- "API切り替え"
- "GLM"
seo:
meta_description: "Claude Codeで--glmフラグを使ってGLM APIに簡単に切り替えるシェル関数の実装方法を紹介。環境変数の動的設定とcommandによる再帰防止のポイントを解説します。"
---

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` に以下のシェル関数を追加します:
```bash
# 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` を使用して関数自身の再帰呼び出しを防止
## 使い方
```bash
# 通常起動(変更なし)
claude
# GLM モード
claude --glm
# 他のオプションと併用
claude --glm --chrome
```
## 学び
- シェル関数でコマンドをラップすることで、条件に応じて環境変数を動的に設定できます
- `command` を使うことで、関数と同名のコマンドを明示的に呼び出せます
- 引数パースは `for` ループと配列でシンプルに実装できます
実際にこの関数を導入してからは、APIの切り替えが `claude --glm` の1コマンドで済むようになり、毎回のexport作業が不要になりました。
ちょっとした工夫ですが、日常の開発体験が格段に良くなったと感じています。

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作業が不要になりました。
ちょっとした工夫ですが、日常の開発体験が格段に良くなったと感じています。