ドキュメント一覧

自分の AI キーを使う

Claude、ChatGPT、Gemini、DeepSeek、Groq、ローカルの Ollama を自分の API キーで Resume Matcher に接続する方法。ChatGPT や Claude のプランも使えます。

自分のモデルを使う理由

Resume Matcher には AI モデルが付属していません。自分で接続します。すでにキーを持っているクラウドプロバイダー、自分のハードウェアで動かす無料のモデル、あるいは契約済みの ChatGPT や Claude のプランです。プロバイダーとモデルを選ぶことで、費用と、履歴書のテキストがどこへ送られるかも自分で決められます。

対応プロバイダー

プロバイダー 種類 設定画面のデフォルトモデル
OpenAI クラウド gpt-5-nano-2025-08-07
Anthropic (Claude) クラウド claude-haiku-4-5-20251001
Google Gemini クラウド gemini-3-flash-preview
DeepSeek クラウド deepseek-chat
OpenRouter クラウド deepseek/deepseek-chat
Groq クラウド llama-3.3-70b-versatile
Azure AI Foundry クラウド mistral-large-latest
Ollama ローカル gemma3:4b
OpenAI 互換サーバー(llama.cpp、vLLM、LM Studio) ローカル http://localhost:8080/v1 の custom-model はプレースホルダーです。どちらも自分のサーバーの値に置き換えてください
ChatGPT プラン(Sign in with ChatGPT) 自分の ChatGPT プラン サインイン後、アカウントで使えるモデルから選択
Claude プラン(Claude Code 経由) 自分の Claude プラン Claude Code 自体のデフォルトモデル

デフォルトは出発点にすぎません。モデル欄は自由入力なので、プロバイダーが提供している任意のモデル名を入力できます。2 つのプランは API キーが不要ですが、注意点があります。方法 C を参照してください。

方法 A:設定画面

  1. http://localhost:3000/settings を開きます。
  2. プロバイダーを選びます。
  3. API キーを貼り付けます。Ollama や OpenAI 互換サーバーの場合は、代わりにサーバーの URL を入力します。ChatGPT や Claude のプランの場合は 方法 C を参照してください。
  4. 別のモデルを使いたい場合は、モデル名を変更します。
  5. プロキシやアグリゲーターのエンドポイントを経由する場合は ベースURL を入力します。空欄ならプロバイダーのデフォルトが使われます。
  6. 保存 をクリックし、続けて 接続テスト をクリックします。

Resume Matcher の設定画面:スポンサーと Discord のバナー、システム状態のタイル、OpenAI が選択された 11 個のプロバイダーボタン(Claude Plan と ChatGPT Plan を含む)、そして保存ボタンと接続テストボタンの上にあるモデル、API キー、ベース URL、推論の深さの各欄

接続テストは、プロバイダーに「Hi」という 1 語だけを送り、応答があったかどうかを表示します。画面上部の システム状態 パネルには、LLM が正常か、データベースに接続しているかが表示されます。ここで保存した設定は環境変数より優先されます。

キーはプロバイダーごとに保存されるので、プロバイダーを切り替えても別のプロバイダーのキーは消えません。

推論の深さ。 この設定は推論に対応したモデル(gpt-5 系、Claude 3.7 以降、DeepSeek R1、OpenAI o1/o3)にだけ影響します。自動 は何も送らず、最も互換性の高い選択です。

方法 B:環境変数

バックエンドは 4 つの変数で設定します。

変数 設定する内容
LLM_PROVIDER openai、anthropic、gemini、deepseek、openrouter、groq、azure_foundry、ollama、openai_compatible、chatgpt、claude_cli のいずれか
LLM_MODEL モデル名
LLM_API_KEY プロバイダーのキー
LLM_API_BASE Ollama や OpenAI 互換サーバーの URL

ローカルインストールでは apps/backend/.env に書きます。Docker ではコンテナの環境変数として渡します。Docker イメージは Docker secrets も読み込みます。4 つの変数のいずれかの末尾に _FILE を付けると、その値をファイルから読み込みます。例:LLM_API_KEY_FILE=/run/secrets/llm_api_key。

Anthropic、ローカルインストール(apps/backend/.env):

LLM_PROVIDER=anthropic
LLM_MODEL=claude-haiku-4-5-20251001
LLM_API_KEY=your-api-key

OpenAI、ローカルインストール(apps/backend/.env):

LLM_PROVIDER=openai
LLM_MODEL=gpt-5-nano-2025-08-07
LLM_API_KEY=your-api-key

ホストで Ollama、Docker で Resume Matcher を動かす場合:

docker run --name resume-matcher -p 3000:3000 \
  -v resume-data:/app/backend/data \
  -e LLM_PROVIDER=ollama \
  -e LLM_MODEL=gemma3:4b \
  -e LLM_API_BASE=http://host.docker.internal:11434 \
  ghcr.io/srbhr/resume-matcher:latest

方法 C:自分の ChatGPT または Claude のプラン

すでに ChatGPT や Claude の有料プランを使っているなら、API キーの代わりにそのプランを Resume Matcher で使えます。どちらもコミュニティが作った方法で、確実に使える保証はありません。確実なアクセスが必要なら、OpenAI か Anthropic の API キーを使ってください。

ChatGPT プラン

設定画面で ChatGPT プランを選択した状態:未接続の表示、「ChatGPT で続行」ボタン、モデル欄、そして Sign in with ChatGPT、プランの利用上限、コミュニティ製であることについてのプレビューの注意書き。その下に無効化された保存ボタン

これは OpenAI がオープンソースアプリ向けに提供している公式の Sign in with ChatGPT を使います。ChatGPT Plus と Pro で動作します。

  1. Resume Matcher を起動し、同じマシン のブラウザで http://localhost:3000 の設定画面を開きます。
  2. ChatGPT プラン を選び、ChatGPT で続行 をクリックします。
  3. OpenAI でサインインし、Resume Matcher がプランを使うことを許可します。
  4. 設定画面に戻り、アカウントのモデルを 1 つ選んで 保存 をクリックします。

使う前に知っておくこと:

  • プレビュー版です。 オープンソースアプリ向けの Sign in with ChatGPT は OpenAI のプレビュー機能なので、変更される可能性があります。
  • リクエストは OpenAI に直接送られます。 あなたのマシンから OpenAI の API に直接送られ、サインインのトークンはマシン上に暗号化して保存されます。
  • ChatGPT プランの利用上限にカウントされます。 Plus では、5 時間ごとの上限をプランを使う他のアプリと共有します。Pro には 5 時間ごとの上限がありません。
  • 同じマシンでサインインしてください。 OpenAI はブラウザを 127.0.0.1 にしか戻さないため、Resume Matcher を動かしているマシンのブラウザでサインインする必要があります。http://localhost:3000 で開く標準の Docker 構成では動きますが、別のコンピューターやリバースプロキシのドメイン経由では動きません。

接続を解除 はセッションを終了してトークンを削除します。使用状況を管理 は ChatGPT の使用状況の設定を開きます。環境変数で設定する場合は LLM_PROVIDER=chatgpt とし、LLM_MODEL にアカウントのモデルを指定します。サインインは設定画面で行う必要があります。

Claude プラン(Claude Code 経由)

設定画面で Claude プランを選択した状態:このマシンでサインインした Claude Code CLI を実行するという説明と、Anthropic のポリシー、認証情報、利用上限についての「公式にはサポートされていません」という警告

同じマシンにインストールした自分の Claude Code CLI を実行します。サインインは自分で行います。

claude auth login

そのあと設定画面で Claude プラン を選び、保存 をクリックします。環境変数で設定する場合は LLM_PROVIDER=claude_cli とします。LLM_MODEL は使いません。

使う前に知っておくこと:

  • 公式にはサポートされていません。 Anthropic は、サードパーティのアプリが Claude Pro や Max のサブスクリプションを使うことを公式にはサポートしていないため、Anthropic のポリシーが変われば動かなくなる可能性があります。
  • Resume Matcher があなたの Claude の認証情報を見ることはありません。 サインイン済みの CLI を実行するだけで、Claude アカウントの情報は何も保存しません。
  • プロンプトは Anthropic に送られます。 Claude Code があなたのアカウントを通じて、自分のデフォルトモデルで送信します。
  • Claude プランの利用上限にカウントされます。 Anthropic が利用クレジットから差し引く場合もあります。
  • ローカルインストールが必要です。 Claude Code CLI は Docker イメージに含まれていないため、この方法は Docker では使えません。

Resume Matcher は寄付で運営されています。

これまでに 20 万人以上の求職者が、無料で、広告も有料の壁もなく使ってきました。時間の節約になった、面接につながったと感じたら、スポンサーになるかコーヒーを一杯おごっていただけると、この形を続けられます。

ローカルモデル

Ollama。 ollama.com からインストールし、モデルをダウンロードしてから、設定画面で Ollama を選びます。

ollama pull gemma3:4b

デフォルトの URL は http://localhost:11434 です。Docker の中からは http://host.docker.internal:11434 を使います。Linux では、ホストの IP アドレスを使うか、--network=host を付けてコンテナを起動します。

OpenAI 互換サーバー。 llama.cpp、vLLM、LM Studio など、OpenAI の Chat Completions API に対応したサーバーは openai_compatible プロバイダーで使えます。LLM_API_BASE にサーバーの URL、LLM_MODEL にサーバーが提供しているモデルを設定します。

遅いモデル。 AI へのリクエストはそれぞれ 1 つの期限 REQUEST_TIMEOUT_SECONDS(デフォルト 240、範囲 30〜1800)の中で実行されます。控えめなハードウェアで大きなモデルを動かすと、この期限を超えることがあります。バックエンドの環境で REQUEST_TIMEOUT_SECONDS を、フロントエンドの環境で NEXT_PUBLIC_REQUEST_TIMEOUT_MS を引き上げてください(apps/frontend/.env.sample を参照)。フロントエンドはビルド時にこの値を読み込むため、ビルド済みの Docker イメージは 240 秒のままです。Docker で引き上げるには、NEXT_PUBLIC_REQUEST_TIMEOUT_MS を設定して自分でイメージをビルドしてください。

キーとローカルサーバー。 バックエンドは LLM_API_KEY を Ollama や OpenAI 互換サーバーに送りません。そのため、.env に有料のクラウドのキーがあっても、ローカルサーバーに漏れることはありません。

小さなモデル。 プロジェクトの設計メモには、小さなモデルはカスタマイズの工程で使う構造化された編集形式を苦手とする、と書かれています。

Docker での手順全体は Docker + Ollama(英語)を参照してください。

キーの保存場所

設定画面で保存したキーは、Fernet で暗号化されてローカルの SQLite データベースに保存されます。暗号化キーはデータフォルダー(ローカルインストールでは apps/backend/data/、それ以外は Docker ボリューム)の .secret_key にあり、権限 0600 で作られるため、あなたのユーザーアカウントしか読めません。バックエンドは同じフォルダーに config.json を書く前にキーを取り除くので、設定ファイルにキーが含まれることはありません。

保存したキーをすべて削除するには、設定画面のデインジャーゾーンにある APIキーを消去 を使います。元に戻すことはできません。

ChatGPT プランのサインイン用トークンも同じキーで暗号化され、データフォルダーの chatgpt_credentials.enc に保存されます。Claude プランは何も保存しません。Claude の認証情報は Claude Code の側に残ります。

LOG_LLM=DEBUG を有効にすると、キーが平文でログに書き出されます。共有のマシンでは有効にしないでください。

プロバイダーに送られる内容

アプリは Resume Matcher の作者には何も送らず、テレメトリーも含んでいません。名前や連絡先を含む履歴書のテキストと求人内容は、選んだプロバイダーにだけ送られます。ChatGPT プランなら OpenAI に、Claude プランなら Claude Code を経由して Anthropic に送られます。送信前に情報を伏せる処理は行いません。ローカルモデルなら、何もマシンの外に出ません。

機能 プロバイダーに送られる内容
履歴書のアップロード(解析) 名前、メール、電話番号、リンクを含む履歴書の全文
求人内容の分析、履歴書のタイトル 求人内容
カスタマイズ(スキル計画、差分による編集) 求人内容と、履歴書全体の JSON
カスタマイズ後のキーワード処理 カスタマイズ版とマスター履歴書の JSON、求人内容の先頭 2,000 文字
カバーレター、連絡メール 履歴書全体の JSON と求人内容
面接準備 履歴書の JSON(最大 30,000 文字)と求人内容(最大 12,000 文字)
箇条書きの採点 箇条書きのテキスト、求人内容、抽出したキーワード
強化、再生成、履歴書ウィザード 履歴書または項目と、あなたの回答や指示
接続テスト 「Hi」という 1 語

ほかのプロバイダーの API キー、データベースファイル、トラッカーのボード、設定、PDF はローカルに残ります。それ以外の通信は、AI ライブラリ(LiteLLM)が起動時に公開されているモデルの価格表を取得するものだけです。これにはあなたのデータは含まれず、オフラインのときは同梱のコピーを使います。

費用

Resume Matcher は無料のオープンソースです。クラウドプロバイダーは、アプリが送ったリクエストごとに、そのプロバイダーの料金であなた自身のアカウントに課金します。アプリはこの支出を記録しないので、プロバイダーのダッシュボードで確認してください。ChatGPT や Claude のプランでは、代わりにプランの利用上限にカウントされます。ローカルモデルなら、リクエストごとの費用はかかりません。

トラブルシューティング

接続テストが失敗する

API キーを確認してください。Ollama や OpenAI 互換サーバーの場合はサーバーの URL を確認します。保存してから、もう一度テストしてください。

「Claude Code CLI not found」と表示される

バックエンドを動かしているマシンに Claude Code をインストールし、claude auth login を実行してください。Docker イメージの中では使えません。

「Not signed in with ChatGPT」または「isn’t available for this account」と表示される

設定画面で ChatGPT プラン を選び、同じマシンのブラウザで ChatGPT で続行 をクリックしてください。このプランを使うには ChatGPT Plus か Pro が必要です。それ以外の場合は OpenAI の API キーを使ってください。

Docker から Ollama に接続できない

Ollama の URL には localhost ではなく http://host.docker.internal:11434 を使ってください。Linux では、ホストの IP アドレスを使うか、--network=host を付けてコンテナを起動します。

ローカルモデルでタイムアウトする

バックエンドの REQUEST_TIMEOUT_SECONDS(最大 1800)と、フロントエンドの NEXT_PUBLIC_REQUEST_TIMEOUT_MS を引き上げてください。ビルド済みの Docker イメージでは、フロントエンドの値はビルド時に固定されます。上の 遅いモデル を参照してください。

.env を変更しても反映されない

画面で保存した設定は環境変数より優先されます。設定画面を開いて、そこで値を変更してください。

次のステップ