公開日: 最終更新:
執筆・編集:株式会社Nexa 編集部(下書きと機械検査はAI、公開前に人が確認)/約26分で読めます。公式ドキュメント・公式発表などの一次情報を確認したうえで執筆・更新しています。AIツールの仕様や料金は変わることがあるため、導入判断の前に各公式サイトの最新情報もご確認ください。記事の作り方と検査の方針
macOS Keychainを使うと、APIキーを平文の.envファイルに置かずに、Claude Codeのスキルやスクリプトから読み出せます(2026年9月28日確認)。
- エラーの原因: 「The specified item could not be found in the keychain.」は、条件に合う項目が見つからないときの文言。未登録か、サービス名(-s)・アカウント名(-a)が登録時と違うことが主な原因
- 登録と読み出し: security add-generic-password は末尾に -w だけを置き、値は入力する(コマンドに値を書くとシェルの履歴に残る)。読み出しは security find-generic-password -w
- Claude Codeのログイン情報: macOSではKeychainに保存される。SSH接続でロックされているなど、書き込めないときは ~/.claude/.credentials.json に保存される
- SSH接続時: キーチェーンがロックされている場合は security unlock-keychain で解除する
対象: Claude CodeでAPIキーを扱うスキル開発者・AI自動化担当者
今日やること: .envファイルのAPIキーを1つ選び、値を入力する形の security add-generic-password でKeychainに登録する
Claude Codeのスキルやスクリプトで使うAPIキーは、.envファイルに平文で置くより、macOS Keychainに登録して実行時に読み出すほうが、漏えいの経路を減らせます。
「スクリプトにAPIキーを直書きしてしまっている」「.envファイルをGitにコミットしてしまいそうで不安」——こうした悩みは、Claude Codeを活用してスキルや自動化ツールを開発しているエンジニア・非エンジニアの両方で共通する課題です。
この記事では、最初にエラー「The specified item could not be found in the keychain.」の原因と確認手順を示し、続けて登録・読み出しの方法、Claude Code自体のログイン情報の保存先、SSH接続時の注意点を、2026年9月28日時点の公式情報で解説します。
全体の流れは4ステップです。Keychainに登録し、スクリプトで読み出し、環境変数に渡して、ツールを実行します。登録は1か所で済み、どのプロジェクトからも同じ手順で参照できます。

「The specified item could not be found in the keychain.」の原因と確認手順
結論から書くと、このエラーは指定した条件に合う項目がキーチェーンに見つからないときに表示されます。SSH接続やロックが原因のエラーではありません。
security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.
Appleの開発者向けドキュメントでは、このエラーは errSecItemNotFound(The item cannot be found.)にあたります。macOS 26.5.2(Tahoe)で、存在しない名前を security find-generic-password で検索したところ、同じ文言が表示され、終了コードは44でした(2026年9月28日確認)。
主な原因は5つ
| 原因 | よくある状況 | 確認すること |
|---|---|---|
| まだ登録していない | 別のMacには登録したが、このMacには登録していない | キーチェーンアクセスで項目を検索する |
サービス名(-s)が違う |
登録時と読み出し時で名前の表記が違う | 登録時と同じ文字列を指定する |
アカウント名(-a)が違う |
登録時は任意の名前、読み出し時は $(whoami) |
-a を外して検索し、登録時のアカウント名を見る |
| 登録先のキーチェーンが違う | 既定(ログイン)以外のキーチェーンを指定して登録した | コマンドの末尾に、登録先のキーチェーンを指定する |
| 項目の種類が違う | add-internet-password で登録した項目を find-generic-password で探している |
登録時と同じ種類のコマンドで検索する |
確認手順(値を表示せずに調べる)
- エラーが出たコマンドやスクリプトの
-s(サービス名)と-a(アカウント名)を確認する -aを外し、サービス名だけで検索する。見つかれば、項目の属性(サービス名・アカウント名など)が表示される- 見つからなければ、キーチェーンアクセスで「ログイン」キーチェーンを選び、サービス名で検索する
- どこにも無ければ、登録の手順で登録する。アカウント名だけが違っていた場合は、読み出し側に合わせて登録し直す
# サービス名だけで検索する(-w と -g を付けなければ、値は表示されない)
security find-generic-password -s "EXAMPLE_API_KEY"
ロックが原因のときは別の文言になる
キーチェーンがロックされていて、パスワードを入力する画面を出せない状況(SSH接続など)では、項目が登録されていても値を読み出せません。このときの文言は User interaction is not allowed. で、Appleのエラーコードでは errSecInteractionNotAllowed にあたります。
| 表示される文言 | 意味 | 対処 |
|---|---|---|
The specified item could not be found in the keychain. |
条件に合う項目が見つからない | サービス名・アカウント名を確認し、無ければ登録する |
User interaction is not allowed. |
確認の画面を出せず、値を読み出せない | キーチェーンのロックを解除する |
.envファイルのAPIキー管理、実はこんなリスクがある
多くの開発者が最初に選ぶのが、プロジェクトルートに.envファイルを作り、そこにAPIキーを保存する方法です。しかしこのアプローチには、見落としがちなセキュリティリスクが複数あります。
Gitへの誤コミットは誰にでも起こる
.gitignoreに.envを追記するのを忘れた、あるいは書き方を間違えた——こうした小さなミスが、APIキーの公開につながります。GitGuardian社の「The State of Secrets Sprawl 2026」によると、2025年にGitHubの公開コミットから新たに検出されたシークレットは28,649,024件で、前年から34%増えました。
誤ってコミットされたAPIキーは、たとえすぐに削除しても、Gitの履歴に残ります。完全に無効化するには、APIキー自体の再発行が必要になります。
シェル履歴やログへの意図しない露出
export API_KEY="(キーの値)"のように、値をターミナルに直接入力する方法も危険です。macOSのzshはコマンド履歴を~/.zsh_historyに保存するため、APIキーがそのまま平文でファイルに残ります。Keychainに登録するコマンドでも、値を引数に書けば同じことが起きます。
複数のプロジェクトで同じキーを使い回す問題
.envファイルはプロジェクトごとに存在するため、同じAPIキーを複数プロジェクトで使う場合、それぞれのファイルに平文でコピーすることになります。管理すべきファイルが増えるほど、漏洩のリスクも比例して高まります。
macOS Keychainとは — OSレベルのセキュリティ管理
macOS Keychainとは、Appleが提供するOSレベルのパスワード・シークレット管理の仕組みです。アプリやサーバのパスワード、証明書などを保管します。
APIキーの管理に使う前に、保存先と、守れる範囲・守れない範囲を押さえておきます。
Keychainのデータはどこに保存されるか
securityコマンドで登録した項目は、既定ではログインキーチェーン(~/Library/Keychains/login.keychain-db)に保存されます。Appleのガイドによると、ログインキーチェーンのパスワードは通常、Macのログインに使うユーザパスワードと同じで、ログイン時にロックが解除されます。
macOSのキーチェーンには2つの実装があります。Appleの技術資料(TN3137)は、ファイルベースのキーチェーンとデータ保護キーチェーンを区別し、securityコマンドは主にファイルベースのキーチェーンを扱うと説明しています。
Appleの「Keychain data protection」には、AES-256-GCMの2種類のキーで項目を暗号化する説明があります。ただし、これはSQLiteデータベースとして実装されたキーチェーンの説明です。この記事では、login.keychain-db の暗号方式は断定しません。値が暗号化された状態で保存され、ロック中は読み出せない、という範囲で扱います。
.envファイルとの4つの違い
| 項目 | .envファイル | macOS Keychain |
|---|---|---|
| 保存形式 | 平文テキスト | 値は暗号化して保存 |
| Git誤コミットリスク | あり(gitignore設定が必要) | 低い(保存先はプロジェクトフォルダの外の ~/Library/Keychains) |
| 複数プロジェクトでの共有 | ファイルのコピーが必要 | 1箇所の登録で全プロジェクトから参照可能 |
| アクセス制御 | なし(読み取り権限があれば誰でも) | ロック中は読み出せない。解除中は、項目を作成したアプリから確認なしで読める |
Keychainで守れない範囲
securityコマンドのマニュアルには、項目を作成したアプリは、既定で警告なしにその値を読めると書かれています。securityコマンドで登録した項目は、ロック解除中であれば、同じユーザーで動くスクリプトがsecurityコマンドを呼び出して読み出せます。
Keychainが減らせるのは、平文ファイルの誤コミットやコピーによる漏えいです。出どころの分からないスクリプトを実行しない、読み出した値を画面やログに出さない、という基本は変わりません。
APIキーをKeychainに登録する(security add-generic-password)
では実際に、securityコマンドを使ってAPIキーをKeychainに登録する方法を解説します。securityコマンドは、macOSに標準搭載されているKeychainを操作するためのCLIツールです。
基本コマンド構文
APIキーの値は、コマンドに書きません。-w を末尾に置き、何も続けずに実行すると、値の入力を求められます。マニュアル(man security)が推奨している書き方です。
security add-generic-password \
-U \
-s "サービス名(APIキーの識別名)" \
-a "$(whoami)" \
-w
実行すると password data for new item: と表示されます。APIキーの値を貼り付けてEnterキーを押し、続く retype password for new item: でもう一度入力します。
オプションの意味を解説します。
| オプション | 意味 | 例 |
|---|---|---|
-s |
サービス名(Service)。APIキーを識別するための名前(必須) | EXAMPLE_API_KEY |
-a |
アカウント名(Account)。誰のキーかを示す(必須) | $(whoami)(= taro など) |
-w |
パスワード(APIキーの値)。末尾に置くと入力を求められる | 値は書かない |
-U |
同名のエントリがあれば上書き更新(Update) | — |
具体的な登録例を示します。サービス名は、ツールが読み取る環境変数名と同じにしておくと、読み出し側で迷いません。
# APIキーを登録する(値は、実行後の入力欄に貼り付ける)
security add-generic-password -U -s "EXAMPLE_API_KEY" -a "$(whoami)" -w
# 別のサービスのトークンも、サービス名を変えて同じ形で登録する
security add-generic-password -U -s "EXAMPLE_SERVICE_TOKEN" -a "$(whoami)" -w
注意
-w "(キーの値)"のように値をコマンドに書くと、その行が~/.zsh_historyに平文で残ります。過去にこの形で登録した場合は、履歴ファイルから該当する行を削除し、APIキーの再発行も検討してください。macOSのターミナルでは、~/.zsh_sessionsの中にも履歴が保存されます。
アカウント名(-a)は $USER で統一する理由
ここは 実際のスキル開発で最も多くのつまずきが発生するポイントです。
あるプロジェクトで、APIキーをKeychainに登録した際に、アカウント名をサービスの名前(例: -a "myapp")にしてしまったことがありました。スクリプト側では-a "$(whoami)"(= taro など)でKeychainを検索しているため、キーが見つからずエラーになり続けました。冒頭の「could not be found」のエラーは、このようなときに表示されます。
このトラブルを防ぐために、アカウント名は常に$(whoami)または$USERで統一することを推奨します。名前がそろっていれば、読み出し側のスクリプトを変えずに済みます。

# NG: 登録時のアカウント名が、読み出し側($(whoami))と違う
security add-generic-password -U -s "EXAMPLE_API_KEY" -a "myapp" -w
# OK: 登録も読み出しも $(whoami) にそろえる
security add-generic-password -U -s "EXAMPLE_API_KEY" -a "$(whoami)" -w
上書き更新(-U フラグ)と削除・再登録
APIキーを更新する際は-Uフラグで上書きできます。ただし、アカウント名を変更したい場合は、一度削除してから再登録が必要です。
# 誤ったアカウント名で登録したエントリを削除
security delete-generic-password -s "EXAMPLE_API_KEY" -a "myapp"
# 正しいアカウント名で再登録(値は入力する)
security add-generic-password -U -s "EXAMPLE_API_KEY" -a "$(whoami)" -w
AI導入に関するお困りごとは、株式会社NexaのAI顧問がサポートします。「何から始めればいいか分からない」という段階からご相談いただけます。
Keychainのキーをスクリプトから読み出す
登録したAPIキーをスクリプトから読み出すには、security find-generic-passwordコマンドを使います。
シェルスクリプトからの読み出し(bash/zsh)
# 1つのコマンドにだけ渡す(シェル全体には残さない)
EXAMPLE_API_KEY="$(security find-generic-password -s "EXAMPLE_API_KEY" -a "$(whoami)" -w)" python3 my_script.py
# そのシェルで続けて使う場合は、環境変数として設定してからツールを実行
export EXAMPLE_API_KEY="$(security find-generic-password -s "EXAMPLE_API_KEY" -a "$(whoami)" -w)"
python3 my_script.py
-wオプションを付けることで、パスワード(APIキーの値)のみをstdoutに出力します。これをコマンド置換$()で変数に代入する形が定番パターンです。$() で受けずに実行すると値が画面に表示されるため、確認目的で -w を単独で実行するのは避けてください。
Pythonスクリプトからの読み出し(subprocess)
Claude Codeのスキル内でPythonスクリプトを使う場合は、subprocessモジュールでこのコマンドを呼び出します。
import getpass
import subprocess
def get_keychain_secret(service_name: str) -> str:
"""macOS KeychainからAPIキーを取得する"""
result = subprocess.run(
["security", "find-generic-password",
"-s", service_name,
"-a", getpass.getuser(),
"-w"],
capture_output=True,
text=True,
)
if result.returncode != 0:
# securityコマンドのエラー文を添えると、原因を切り分けやすい
raise ValueError(f"{service_name} を読み出せません: {result.stderr.strip()}")
return result.stdout.strip()
# 使用例(戻り値は print やログに出さない)
api_key = get_keychain_secret("EXAMPLE_API_KEY")
このパターンは、実際に複数のClaude Codeスキル(画像生成やSNS連携のスキルなど)で採用している実装です。
環境変数として設定してからツールを実行するパターン
外部CLIツールがAPIキーを環境変数から読み取る場合は、subprocessにenvパラメータを渡す方法が便利です。
分類・判定APIへ接続する具体例は、JevのAPIキー設定と呼び出し手順を参照し、読み出したキーをログへ出さずに扱ってください。
import os
import subprocess
# Keychainから読み取って、そのツールの環境変数にだけ渡す
api_key = get_keychain_secret("EXAMPLE_API_KEY")
env = {**os.environ, "EXAMPLE_API_KEY": api_key}
result = subprocess.run(["example-cli", "run"], env=env)
Claude Code スキルでの実践パターン
実際に50個以上のClaude Codeスキルを開発した中で確立した、Keychain管理のベストプラクティスを紹介します。
(Claude Code Skillsの設計パターンの詳細はこちら →)
推奨命名規則(サービス名は ALL_CAPS、アカウント名は $USER)
| 項目 | 推奨ルール | 理由 |
|---|---|---|
| サービス名(-s) | EXAMPLE_API_KEY のようにALL_CAPS |
環境変数名と統一し、混乱を防ぐ |
| アカウント名(-a) | 常に $(whoami) |
スクリプト側との不一致を防ぐ |
| 複数アカウントの場合 | -a "taro_work" のようにサフィックスを付加 |
同一サービスの複数キーを区別できる |
スキル内でのKeychain読み出しテンプレート(Python版)
import getpass
import subprocess
def get_api_key(service_name: str, account: str | None = None) -> str:
"""
macOS KeychainからAPIキーを読み出す
Args:
service_name: -s オプションに渡す値(例: "EXAMPLE_API_KEY")
account: -a オプションに渡す値。Noneの場合はログイン中のユーザー名を使用
Returns:
APIキーの文字列
Raises:
SystemExit: Keychainからキーを読み出せない場合
"""
if account is None:
account = getpass.getuser()
result = subprocess.run(
["security", "find-generic-password", "-s", service_name, "-a", account, "-w"],
capture_output=True, text=True
)
if result.returncode != 0:
print(f"エラー: Keychainから '{service_name}' を読み出せません。")
print(f"security の出力: {result.stderr.strip()}")
print("未登録の場合は、次のコマンドで登録してください(値は実行後に入力します):")
print(f'security add-generic-password -U -s "{service_name}" -a "$(whoami)" -w')
raise SystemExit(1)
return result.stdout.strip()
macOS Keychainアクセスアプリで確認・管理する
コマンドラインが苦手な方や、登録済みのキーを確認したい場合は、キーチェーンアクセスアプリ(GUIツール)が便利です。
Spotlightで「キーチェーンアクセス」と検索して起動します。「キーチェーン」リストで「ログイン」を選択し、検索欄にサービス名(例: EXAMPLE_API_KEY)を入力すれば、登録済みのエントリが確認できます。
補足キーチェーンアクセスアプリからも新規エントリの追加が可能です。メニューバー → ファイル → 新規パスワード項目 から、キーチェーン項目名(サービス名)・アカウント名・パスワードを設定できます。この方法なら、値がシェルの履歴に残りません。
\ AI活用の「次の一手」を一緒に考えませんか /
AI顧問の無料相談はこちらClaude Code自体のログイン情報はどこに保存されるか
ここまでは、自分で登録するAPIキーの話でした。Claude Code自体のログイン情報(/login で保存される認証情報)の保存先は、公式ドキュメントで次のように説明されています(2026年9月28日確認)。
| 環境 | 保存先 |
|---|---|
| macOS | 暗号化されたmacOS Keychain(ログインキーチェーン) |
| macOSで、Keychainが書き込みを受け付けないとき | ~/.claude/.credentials.json(パーミッション0600) |
| Linux | ~/.claude/.credentials.json(パーミッション0600) |
| Windows | %USERPROFILE%\.claude\.credentials.json |
Keychainが書き込みを受け付けない例として、公式は「SSHセッションでロックされている」「キーチェーンのパスワードがアカウントのパスワードと同期していない」の2つを挙げています。環境変数 CLAUDE_CONFIG_DIR を設定している場合、.credentials.json はそのディレクトリの下に置かれます。
.credentials.json は平文のファイルです。リポジトリやバックアップの共有先に含めないでください。
ログイン情報をKeychainに戻す手順
公式のトラブルシューティングは、次の順番を案内しています。
claude doctorを実行する。Keychainに書き込めない場合は、macOS Keychain is not writableで始まる警告が出るsecurity unlock-keychain ~/Library/Keychains/login.keychain-dbを実行し、キーチェーンのパスワードを入力する。もう一度claude doctorを実行し、警告が消えたか確認する- 解除できない場合は、キーチェーンアクセスで「ログイン」キーチェーンを選び、キーチェーンのパスワードを変更して、アカウントのパスワードと合わせる
- すぐにKeychainへ戻したい場合は、
/logoutのあとに/loginを実行する
注意
/logoutは、保存されている認証情報をすべて削除します。公式によると、MCPサーバーのログインやプラグインの機密値も消えるため、あとで再認証が必要になります。
Keychainに登録したAPIキーをClaude Codeに渡す
Claude CodeをAPIキーで利用している場合は、設定の apiKeyHelper が使えます。公式によると、apiKeyHelper に指定したコマンドをClaude Codeがシェルで実行し、その出力を認証情報として送ります。Keychainから読み出すコマンドを指定すれば、APIキーを設定ファイルや環境変数ファイルに書かずに済みます。
{
"apiKeyHelper": "security find-generic-password -s EXAMPLE_API_KEY -a \"$USER\" -w"
}
上は ~/.claude/settings.json に書く場合の設定例です。サブスクリプションのアカウントでログインして使っている場合は、この設定は不要です。
SSH経由でKeychainにアクセスする場合の注意点
Claude Codeを別のMacにSSHで接続して使う場合(例: Mac miniをサーバーとして使う場合)、Keychainへのアクセスに追加の操作が必要になることがあります。
(VSCode Remote SSHでMac miniのClaude Codeを遠隔操作する方法はこちら →)
なぜSSH経由ではKeychainにアクセスできないのか
原因は、キーチェーンのロックです。Claude Codeの公式ドキュメントは、SSHセッションではキーチェーンがロックされている場合があると説明しています。ロック中は、項目が登録されていても値を読み出せません。
SSH接続では、パスワードを入力する画面を出せません。ロック中に security find-generic-password -w で値を読み出そうとすると、エラーの文言に User interaction is not allowed. が含まれます。
「The specified item could not be found in the keychain.」が表示された場合は、ロックではなく、項目が見つからないことが原因です。冒頭の確認手順で、サービス名とアカウント名を確認してください。
security unlock-keychain でアンロックする方法
SSH接続したターミナルから、以下のコマンドでKeychainをアンロックできます。Claude Codeの公式ドキュメントが案内しているコマンドと同じです。
security unlock-keychain ~/Library/Keychains/login.keychain-db
実行するとパスワードの入力が求められます。キーチェーンのパスワード(通常はMacのログインパスワードと同じ)を入力するとアンロックされ、その後はsecurity find-generic-passwordで値を読み出せます。
注意
security unlock-keychainには-pでパスワードを渡すオプションもありますが、ログインパスワードがシェルの履歴に残るため使わないでください。また、キーチェーンは設定によって、一定時間の無操作やスリープで再びロックされます。現在の設定はsecurity show-keychain-info ~/Library/Keychains/login.keychain-dbで表示できます。
SSH接続時のAPIキー管理の代替戦略
毎回のアンロックが難しい場合は、以下の方法を検討します。2つ目と3つ目は、APIキーを平文のファイルに置く方法です。
| 方法 | 適するケース | 注意点 |
|---|---|---|
SSH接続後に security unlock-keychain で手動アンロック |
作業開始時に毎回手動操作できる場合 | キーチェーンのパスワードの入力が必要 |
環境変数ファイル(~/.zshenv)に書く |
セキュリティ要件が低い開発環境 | セキュリティは.envと同レベル。ファイルの権限を自分だけに絞る |
.plistでlaunchdの環境変数(EnvironmentVariables)として設定 |
常時稼働のサーバー用途 | 値は.plistに平文で残る。設定が複雑だが自動化しやすい |
ローカルのMacでスクリプトを動かす場合は、Keychainが最も簡単です。SSH接続では、まずエラーの文言でロックか未登録かを見分け、ロックならアンロックしてから読み出してください。

よくある質問
Q. 「The specified item could not be found in the keychain.」はSSH接続が原因ですか?
いいえ。この文言は、指定したサービス名(-s)とアカウント名(-a)に合う項目が見つからないときに表示されます。未登録か、名前が登録時と違うことが主な原因です。
SSH接続でキーチェーンがロックされている場合は、User interaction is not allowed. という別の文言になります。
Q. security コマンドで登録したAPIキーは再起動後も残りますか?
はい、残ります。securityコマンドで登録した項目は、既定ではログインキーチェーン(login.keychain-db)に保存されます。再起動後もsecurity find-generic-passwordで読み出せます。
Q. Keychain Access(GUIアプリ)でキーを確認・追加する方法は?
Spotlightで「キーチェーンアクセス」と検索して起動します。「キーチェーン」リストで「ログイン」を選択すると、登録済みのエントリを確認できます。ダブルクリックで詳細を開き、「パスワードを表示」にチェックを入れるとAPIキーの値が確認できます(パスワードの入力を求められます)。
追加は、メニューバーの「ファイル」から「新規パスワード項目」を選びます。
Q. 複数のMacでAPIキーを同期するには?
securityコマンドで登録した項目は、そのMacのログインキーチェーンに保存されます。複数のMacでAPIキーを使う場合は、それぞれのMacでsecurity add-generic-passwordを実行して個別に登録してください。
Appleの技術資料(TN3137)によると、iCloudキーチェーンはデータ保護キーチェーンの機能です。securityコマンドが主に扱うファイルベースのキーチェーンとは実装が異なります。
(MacBookとMac miniでClaude Code環境を同期する方法はこちら →)
Q. Keychainのキーを削除するコマンドは?
security delete-generic-password に、登録時と同じサービス名(-s)とアカウント名(-a)を指定して実行します。削除に成功するとpassword has been deleted.と表示されます。
# 削除コマンド
security delete-generic-password -s "サービス名" -a "$(whoami)"
# 例: EXAMPLE_API_KEYを削除
security delete-generic-password -s "EXAMPLE_API_KEY" -a "$(whoami)"
Q. 登録済みのAPIキー一覧を確認するには?
サービス名が分かっている場合は、security find-generic-password に -s でサービス名を指定すると、項目の属性(サービス名・アカウント名など)が表示されます。-w と -g を付けなければ、値は表示されません。サービス名は、登録時と同じ文字列で指定します。
一覧から探す場合は、security dump-keychain の出力を、サービス名の属性を表す svce で絞り込みます。値まで出力する -d は付けないでください。
# サービス名を指定して属性を表示(値は表示されない)
security find-generic-password -s "EXAMPLE_API_KEY"
# ログインキーチェーンの項目から、サービス名の行だけを表示(-d は付けない)
security dump-keychain ~/Library/Keychains/login.keychain-db | grep "svce"
Q. Claude Codeのログイン情報はどこに保存されますか?
公式ドキュメントによると、macOSでは暗号化されたmacOS Keychain(ログインキーチェーン)に保存されます。SSH接続でキーチェーンがロックされているなど、Keychainが書き込みを受け付けない場合は、~/.claude/.credentials.json(パーミッション0600)に保存されます。
Linuxでは ~/.claude/.credentials.json、Windowsでは %USERPROFILE%\.claude\.credentials.json に保存されます。
Q. 登録コマンドにAPIキーの値を直接書いて実行してしまいました。どうすればよいですか?
値がシェルの履歴(zshでは ~/.zsh_history)に残っている可能性があります。履歴ファイルから該当する行を削除し、APIキーを発行元で再発行してください。
新しい値は、末尾に -w だけを置いて入力する形で登録し直します。
まとめ
本記事では、macOS Keychainを使ったAPIキー管理の方法を解説しました。要点を整理します。
- 「The specified item could not be found in the keychain.」は、項目が見つからないときのエラー。サービス名(-s)とアカウント名(-a)が登録時と同じかを確認する
- .envファイルへの平文保存は、Git誤コミット・シェル履歴への露出・複数プロジェクト管理の困難さという3つのリスクがある
security add-generic-passwordは末尾に-wを置いて値を入力し、security find-generic-password -wで読み出す。アカウント名(-a)は$(whoami)で統一する- PythonスクリプトからはsubprocessモジュールでKeychainにアクセスできる
- Claude Codeのログイン情報は、macOSではKeychainに保存される。書き込めないときは
~/.claude/.credentials.jsonに保存される - SSH経由での利用時にキーチェーンがロックされている場合は、
security unlock-keychainでアンロックする
今日からできることとして、まず最もよく使うAPIキーを1つ選び、値を入力する形のsecurity add-generic-passwordでKeychainに登録してみてください。.envファイルへの依存を一つずつ減らしていくことで、平文のファイルから漏えいするリスクを下げられます。
参考にした公式情報(2026年9月28日確認)
- Claude Code公式ドキュメント「Authentication」(認証情報の保存先)
- Claude Code公式ドキュメント「Troubleshoot installation and login」(Keychainに戻す手順)
- Claude Code公式ドキュメント「Settings reference」(apiKeyHelper)
- Apple「TN3137: On Mac keychain APIs and implementations」
- Apple「Keychain data protection」
- Apple「errSecItemNotFound」、Apple「errSecInteractionNotAllowed」
- Apple「Macでキーチェーンのパスワードをアップデートする必要がある場合」
- GitGuardian「The State of Secrets Sprawl 2026」
- macOS 26.5.2 の
man security(add-generic-password、find-generic-password、unlock-keychain)
法人向けAI導入・活用の月額伴走サービス
AI導入の疑問を、週1回のMTGで相談できる「AI顧問」
株式会社Nexaでは、ChatGPT・Claude・Claude CodeなどのAI導入に関する質問や、社内活用・業務自動化の進め方を週1回相談できる 月額7万円(毎月3社限定で月額5万円)のAI顧問サービス を提供しています。
「自社では何から始めるべきか」「この業務はAI化できるか」「どのツールを選ぶべきか」を、無料相談で整理します。
この記事で参照した外部情報
- Claude Code公式ドキュメント「Authentication」code.claude.com
- Claude Code公式ドキュメント「Troubleshoot installation and login」code.claude.com
- Claude Code公式ドキュメント「Settings reference」code.claude.com
- Apple「TN3137: On Mac keychain APIs and implementations」developer.apple.com
- Apple「Keychain data protection」support.apple.com
- Apple「errSecItemNotFound」developer.apple.com
- Apple「errSecInteractionNotAllowed」developer.apple.com
- Apple「Macでキーチェーンのパスワードをアップデートする必要がある場合」support.apple.com
- GitGuardian「The State of Secrets Sprawl 2026」gitguardian.com
本文中でリンクしている外部ページの一覧です(自動生成)。最終確認日は本記事の最終更新日 2026-09-28 で、リンク先の内容はその後変わることがあります。
AI導入を検討中の方へ









