CV Tailor:ローカル優先の履歴書カスタマイズ(任意AI)
応募ごとに同じ履歴書が必要になることはほとんどありません。CV Tailor はその課題への私の答えです。プロフィールを取り込み、求人を貼り付けまたは取得し、マッチを確認して、役割向けのCVを生成するデスクトップ優先アプリです。AIは任意で、データはすべて端末内に残ります。
私の役割
プロダクト、UI、ドメインモデル、デスクトップシェル、リリースパイプライン、そしてAIツール・PDF出力・バックアップ用のRustネイティブ層まで、一人で端から端まで担当しました。
できること
- プロフィール管理 — ファイルやURLから取り込み、経験・スキル・プロジェクトを編集
- 応募の追跡 — 求人ごとに1ワークスペース、3ステップのガイド付きフロー
- 求人分析 — キーワード、要件、短い役割サマリーの抽出
- マッチスコア — プロフィールと求人の比較(ドラフトまたはAI)
- 調整済みCV生成 — 応募ごとに言語別バージョン(英語 / ドイツ語)
- PDFエクスポート — デスクトップアプリから
- バックアップ & 復元 — ローカルスナップショット、JSONの入出力、任意のS3/MinIO
- 自動更新 — 本番ビルドが GitHub Releases を確認
プロダクトの流れ
ステップ1 — 求人を貼り付けまたは取り込み、タイトル・会社・職種を設定
ステップ2 — AIが求人を分析し、マッチ情報が読み込まれる
マッチスコア、キーワード、強みとギャップをプロフィールと照合
ステップ3 — レイアウトを選び、要約とスキルを調整し、CVをプレビュー
技術的な課題
特に難しかった点:
- アプリ内にAPIキーを持たないローカルAI — Claude Code / Codex / Cursor Agent など、すでに入っているCLIを呼び出します。プロセス起動・パース・ツール未インストール時のフォールバックが重要でした。
- 1つのコードベースでデスクトップとWeb — Tauri 2 のネイティブシェル(SQLite、PDF、ファイル取り込み、アップデータ)と、ブラウザでもローカルHTTPブリッジやヘッドレスRustゲートウェイ経由で動くVite/React UI。
- ユーザーの手元に残るドメインデータ — プロフィール、応募、CV実行は TanStack DB 経由のローカルSQLite。バックアップ復元と任意のMinIO同期では、履歴を保ちつつ認証情報をバックアップJSONに載せない設計が必要でした。
技術スタック
- フロントエンド: React、TypeScript、TanStack Router、TanStack DB、shadcn/ui
- デスクトップ: Tauri 2(Rust)— SQLite、PDF、ファイルダイアログ、アップデータ
- AI: ローカルCLI +
cv-tailor-nativeの共有Rustランタイム、任意のヘッドレスゲートウェイ - i18n: 英語・ドイツ語UIを最初から搭載
アーキテクチャ(概要)
apps/web → React UI + Tauri シェル
crates/native → 共有 AI / バックアップ / ゲートウェイ API
packages/core → ドメイン型、スキーマ、スコアリング
packages/db → TanStack DB コレクション + SQLite
packages/ai → プロンプト構築と CLI 出力パーサ
packages/ui → 共有 shadcn コンポーネント
端末はローカルSQLiteを保持。ゲートウェイはネットワーク上のマシンに対してブラウザクライアントから使うとき、AIツール実行(と任意でビルド済みWeb UIの配信)を担えます。
配布
macOS / Windows インストーラは GitHub Releases で公開。本番デスクトップビルドは署名付き自動更新に対応。Gatekeeper / SmartScreen 向けには未署名のため、README にインストール手順を記載しています。
まとめ
CV Tailor は、自分の応募のために欲しかったツールです。役割ごとの素早い反復、デフォルトでプライベート、本当に役立つときだけAI。MITライセンスのオープンソースです。
ソースとダウンロード: github.com/Doderich/cv-tailor。



