機能

アカウントの管理

最終更新日: 2026年10月19日
ccam 0.6.0とClaude Code 2.1.302で確認済み

このページは英語から機械翻訳されています。修正を歓迎します。 GitHubでこのページを編集

このページの内容

ccamの各アカウントは、独自のログインを持つ別々のClaude Codeの設定フォルダーです。ここで紹介するコマンドで、アカウントの作成、サインイン、一覧表示、名前変更、削除を行い、すでにあるフォルダーを登録します。

使い方

ccam add                                   # wizard on a terminal: name, shared items, shortcut, login
ccam add work --shortcut ccwork            # no wizard: log in, then create the ccwork command
ccam add side --no-login --share history=team
ccam login side                            # run claude auth login inside the account
ccam logout side                           # remove the login token
ccam list                                  # table of accounts; ccam ls is the same
ccam list --json                           # machine-readable
ccam use 2                                 # make slot 2 the default account
ccam rename side personal
ccam remove personal                       # asks, then moves the folder to the trash
ccam import                                # find ~/.claude and ~/.claude-* and ask about each
ccam import ~/.claude-ops --name ops
ccam completion zsh > "${fpath[1]}/_ccam"

コマンドが<name|number>を受け取る場所では、アカウント名か、ccam listの#列にあるスロット番号を指定できます。

ターミナルでオプションなしにccam addを実行すると、ウィザードが開きます。名前を尋ね、次に共有する項目のチェックリストを表示し(会話履歴以外のすべてにチェックが入っています)、続いてCreate a shortcut command for work? [y/N]と尋ね、yと答えるとShortcut name [ccwork]:と尋ねます。--share、--shortcut、--no-loginのいずれかを付けた場合や、ターミナルではなくパイプから実行した場合は、ウィザードは開きません。その場合は名前が必須で、--shortcutで名前を指定しない限りショートカットは作成されません。

ccam listは、スロット、名前、ショートカット、メールアドレス、共有項目、最終使用日時を表示し、デフォルトのアカウントの前に*を付けます。

$ ccam list
   #  Name      Shortcut  Email             Shared                        Last used
*  1  work      ccwork    user@example.com  mcp settings md ext           -
   2  personal  -         me@side.dev       settings md ext history@team  -

--jsonを付けると、各アカウントはslot、shortcut、name、email、default、dir、last_used(一度も起動していないアカウントでは省略されます)、shareを持つオブジェクトになります。shareは、各項目(mcp、settings、memory、extensions、history)をグループ名または"local"に対応付けます。

オプション

オプション 効果 デフォルト
ccam add --no-login ログインせずにアカウントを作成します。あとでccam login <name>でログインします オフ
ccam add --share <item=group> 項目をグループで共有します。item=localにするとその項目は共有しません。複数回指定できます mcp、settings、memory、extensionsはdefault、historyはローカル
ccam add --shortcut <command> このショートカットコマンドも~/.local/binに作成します なし
ccam list --json アカウントをJSONで出力します オフ
ccam remove -y、--yes 確認なしで削除します オフ
ccam import --name <name> 指定したフォルダーのアカウント名 フォルダー名から決まります
ccam import -y、--yes 見つかったすべてのフォルダーを確認なしでインポートします オフ
--dry-run 何も変更しないccam listとccam completionでは使えます。add、login、logout、use、rename、remove、importでは拒否され、--dry-run is not supported by `ccam add`; nothing was changed(コマンド名入り)と表示されます オフ

ccam login、ccam logout、ccam use、ccam renameには独自のオプションはありません。ccam completionはbashかzshを受け取り、それ以外を指定するとonly bash and zsh are supportedで失敗します。

アカウント名には、a-z、0-9、-、_を使って1~32文字で指定し、先頭は英字か数字にします。ccam 2はスロット2を意味するため、数字だけの名前は使えません。また、ccam <name>が曖昧にならないように、ccamのコマンド名(add、list、ls、run、use、next、usage、u、share、mcp、login、logout、rename、remove、rm、import、migrate、doctor、shims、shortcut、completion、help、version、statusline、update)も使えません。この一覧はinternal/configのconfig.Reservedです。

しくみ

ccam add work --shortcut ccworkは、addProfile(internal/cli/profiles.go)で次の手順を実行します。

  1. 何かを作成する前に、config.ValidateNameが名前を、shim.Checkがショートカットを確認します。
  2. profile.Addが~/.local/share/ccam/profiles/work/をモード0700で作成し、空いている最小のスロット番号(Config.NextSlot)をアカウントに割り当てます。そのため、削除したアカウントの番号は再利用されます。最初のアカウントがデフォルトになります。
  3. applyShareが、share.BuildとApplyを使って、作成したばかりの空のフォルダーを共有グループにリンクします。たとえばsettings.jsonをgroups/default/settings.jsonにリンクします。これが失敗した場合は、新しいフォルダーを削除します。フォルダーが残ると、再試行のたびにfolder already existsで失敗するためです。
  4. アカウントはfsutil.AtomicWriteを通じて~/.config/ccam/config.tomlに保存されます。一時ファイルに書き込み、fsyncしてからrenameするので、クラッシュしても設定が中途半端な状態で残ることはありません。
  5. runLoginが、CLAUDE_CONFIG_DIRをアカウントのフォルダーに設定してclaude auth loginを起動します。ログインに失敗してもアカウントは残り、ccamはエラーを表示して、あとでccam login workを実行するよう案内します。
  6. profile.ReadEmailが、profiles/work/.claude.jsonからoauthAccount.emailAddressを取り出します。このファイルは数メガバイトになることがあるため、TopLevelValueはファイル全体を解析せずに、その1つのキーだけを探します。
  7. shim.Installが~/.local/bin/ccworkをccamのバイナリにリンクします。ccamは起動時にconfig.tomlでargv[0]を調べます。

ログインには数分かかることがあり、その間に別のccamが設定を保存するかもしれません。そのため、待ち時間のあるコマンドはenv.updateを通じて保存します。これはconfig.tomlを読み込み直し、1つの変更(ここではメールアドレス)だけを適用して保存します。ccam removeも同じ理由で、確認の後に読み込み直します。

ccam loginは、既存のアカウントについて手順5と6を実行します。ccam logoutはアカウント内でclaude auth logoutを実行し、保存済みのメールアドレスを消去します。ccam useはconfig.tomlのdefaultを書き換えるだけです。

リモートマシンでのサインイン

SSH経由では、claude auth loginのブラウザー側の処理がうまくいかないことがあります。Claude Codeはサーバー上のhttp://localhost:<port>/callbackにあるコールバックサーバーでサインインを待ちますが、サインインを完了するブラウザーは手元のコンピューターで動いているため、そのアドレスはどこにもつながらず、ブラウザーにはERR_CONNECTION_REFUSEDのようなエラーが表示されます。それでもアドレスにはワンタイムコードが含まれているので、ccamがそれを届けられます。

runLoginはターミナルをClaude Codeに渡しません。Claude Codeの標準入力をパイプにつなぎ、relayLoginが入力された各行をそこにコピーします。そのため、Claude CodeのPaste code hereプロンプトに貼り付けたコードもそのまま届きます。行がコールバックアドレスの場合、callbackURLは、ホストがlocalhost、127.0.0.1、[::1]のいずれかで、ポートが指定され、パスが/callbackで、codeとstateの両方がある場合にだけ受け付けます。http://は省略できます。続いてdeliverCallbackが、ブラウザーが本来行うのと同じように、10秒の制限時間を付け、リダイレクトをたどらずに、サーバー上でそのアドレスにリクエストを送ります。リクエストは、待機中のclaude auth loginのコールバックサーバー(図の破線)に届きます。Claude Codeはコードを受け取ってログインを保存します。Linuxではアカウントのフォルダー内の.credentials.jsonに保存されます。貼り付けた行によって、ccamがほかのホストに接続することはありません。

ccamはログインを始める前に次のメッセージを表示します。

On a remote machine? If the browser ends on a http://localhost:…/callback page that does not load, paste that address here.

成功すると→ Passed the sign-in to Claude Code on this machine.と表示します。

名前の変更、削除、インポート

ccam renameとccam removeは、アカウントのフォルダーと、ccamがアカウント名で別の場所に保持しているものを対象にします。それらのパスはnameStateが列挙します。~/.local/state/ccam/last-used/<name>、~/.local/state/ccam/mcp/<name>、使用量のキャッシュである~/.local/state/ccam/usage/<name>.jsonと<name>.statusline.jsonです。ccam remove workは次の順序でこれらを処理します。

ccam removeは、まずアカウントが実行中なら拒否し、そうでなければ確認を求めます。アカウントが拡張機能を共有している場合は、RewritePluginPathsがグループのinstalled_plugins.jsonとknown_marketplaces.jsonを書き換えます。Claude Codeはプラグインの絶対パスを保存しており、それがこのアカウントのフォルダーを経由している可能性があるためです。profile.Trashがフォルダーを~/.local/share/ccam/trash/<name>-<time>/に移動し、アカウントはconfig.tomlから外れます。あとで同じ名前のアカウントを作ったときに引き継がれないようにnameStateのパスは削除され、ショートカットのリンクも削除されます。元に戻すには、ゴミ箱からフォルダーを戻します。

ccam renameはフォルダーの名前を変更し、そのplugins/内のプラグインのパスを古いフォルダーから新しいフォルダーに書き換え、デフォルトの設定を引き継ぎ、nameStateのパスを新しい名前に移動します。ショートカットコマンドの名前は変わりません。プラグインのパスの書き換えに失敗した場合は、設定が保存されないため、フォルダーの名前を元に戻します。

ccam importは、フォルダーをその場所のままconfig.tomlのdirとして登録します。移動もコピーもしません。リフレッシュトークンをコピーすると、コピー同士が互いをログアウトさせてしまうためです。フォルダーを指定しない場合は、登録されていない~/.claudeと~/.claude-*のフォルダーを探し、それぞれについて確認します。名前はフォルダーから決まり(~/.claudeはmain、~/.claude-workはwork、~/.claude-2はacct2)、名前を決められないフォルダーは、使うべき--nameコマンドとともに一覧表示されます。CLAUDE_CONFIG_DIRがない場合、Claude Codeは.claude.jsonをホームフォルダーの~/.claudeの隣に置きます。そのため、~/.claudeをインポートしたときに独自の.claude.jsonがなければ、ccamは~/.claude.jsonを指すリンク~/.claude/.claude.jsonを作成します。これで通常のclaudeとccam mainが同じアカウントを参照します。インポートしたアカウントは、ccam shareを実行するまで何も共有せず、ショートカットも作成されません。

ccam completion bash|zshは、アカウント名も補完する補完スクリプトを出力します。

安全性と特殊なケース

  • ccam renameとccam removeは、アカウントの実行中はwork is running; quit its Claude Code session firstと表示して拒否します(refuseRunning)。セッションがフォルダーに書き込み続けるためです。
  • インポートしたアカウントにccam removeを実行すると、登録が解除されるだけです(✓ main unregistered (folder ... left in place))。~/.claudeがゴミ箱に移動されることはありません。
  • ccam addは、profiles/にすでにフォルダーがある名前を拒否し、ccam importを案内します。
  • ccam importは、すでに登録されているフォルダー、フォルダーではないパス、使用済みの名前を拒否します。
  • ccam logoutとccam loginは、アカウントが実行中かどうかを確認しません。
  • ログインが終了した後などで、中継がClaude Codeに届かない場合は、ccam: could not pass the sign-in to Claude Code:と理由が表示されます。HTTPエラーは通常、コードの期限切れを意味します。ログインをやり直してください。