「営業管理ツール、どれ使えばいいの?」
Salesforce?高い。HubSpot?機能多すぎて使いこなせない。Notion?自由度高すぎて設計に迷う。スプレッドシート?...もう戻れない。
2〜3人のチームで営業始めたばかりなのに、ツール選定で1週間溶かした経験、ありませんか?
私たちplayparkは、この問題に対して「Gitリポジトリをデータベースにする」という割り切った答えを出しました。YAML+Markdownで顧客データを管理し、Claude Code Skillで更新を自動化し、Next.jsダッシュボードで一覧表示する。SFA/CRMのライセンス費ゼロ、学習コストほぼゼロの営業管理システムです。
なぜGitで営業管理なのか
SFA/CRM導入の壁
小規模チームがSFA/CRMを導入しようとすると、こういう壁にぶつかります。
| 壁 | 具体的な話 |
|---|---|
| コスト | Salesforceで1人月3,000〜25,000円。3人でも年間10万円超(その予算、他に使いたい) |
| オーバースペック | リード管理、商談管理、予測分析...機能の8割使わない |
| データロックイン | エクスポートできても、構造がブラックボックス |
| 学習コスト | 「このボタン何?」を繰り返すうちに、結局Excelに戻る |
Gitで管理するメリット
一方、Gitで管理すると嬉しいことがあります。
- 差分が見える:
git diffで「いつ・誰が・何を変えた」が完全にトレースできる - バージョン管理が無料: 変更履歴が無限に残る。「あの時の提案内容なんだっけ?」に即答
- テキストベース: YAML/Markdownなので、エディタでもCLIでもAIでも編集できる
- 移行コストゼロ: ファイルそのものがデータ。ロックインなし
「でもGitって開発者のツールでしょ?」と思うかもしれません。その通りです。だからClaude Codeに営業事務を任せました。
データ構造:企業ごとにディレクトリを切る
リポジトリの構成はこうなっています。
sales/
├── companies/ # 顧客データ(企業ごとにディレクトリ)
│ └── ◯◯株式会社/
│ ├── profile.yml # 顧客マスタ
│ ├── pipeline.yml # パイプライン状態
│ ├── activities/ # 活動履歴(1ファイル = 1活動)
│ │ ├── 2026-01-15_初回ヒアリング.md
│ │ └── 2026-02-03_email.md
│ └── minutes/ # 議事録
│ └── 2026-01-15.md
├── dashboard/ # Next.js ダッシュボード
├── schema.yml # スキーマ定義(Single Source of Truth)
├── templates/ # テンプレート
└── scripts/
└── auto-deploy.sh # ビルドテスト → commit → push
profile.yml:企業情報
name: ◯◯株式会社
phone: 03-XXXX-XXXX
address: 東京都品川区◯◯
url: https://example.com/
employee_count: 85
business_summary: 製造業向けシステム開発
contacts:
- name: 田中
department: 営業部
position: 部長
email: tanaka@example.com
pipeline.yml:商談の状態
status: 提案中
phase: 具体的なニーズあり
appointment_count: 2
last_contact: "2026-03-15"
next_action: 見積書を作成して送付
next_action_deadline: "2026-03-22"
next_action_assignee: 奈良本
source: 展示会リード
created_at: "2026-02-01"
ステータスはschema.ymlで定義された9段階。アプローチから受注・失注まで、商談のライフサイクルをカバーします。
activities/*.md:活動の記録
---
date: "2026-03-15"
type: 提案説明
method: オンライン
result: 先方検討中。来週回答予定
next_action: 見積書作成
---
提案書をベースにオンラインMTGを実施。
先方からは「社内稟議を通す必要がある」との回答。
来週中に見積書を送付し、稟議用資料として活用してもらう方向で合意。
1ファイル = 1活動。ファイル名に日付と種別が入るので、ディレクトリを見るだけで活動の流れがわかります(ファイルエクスプローラーが最高のタイムラインUI)。
schema.yml:フィールド定義の単一真実源
企業情報・パイプライン・活動履歴のフィールド定義を1ファイルに集約しています。
pipeline:
description: パイプライン(商談状態)
fields:
- key: status
label: ステータス
type: string
required: true
options:
- アプローチ
- アポ調整中
- 初回面談済
- 提案中
- 見積提出
- クロージング
- 受注
- 失注
- 見送り
- key: next_action
label: ネクストアクション
type: string
required: false
# ...他フィールド省略
ダッシュボード側はこのschema.ymlからステータスの選択肢やラベルを動的に取得します。フィールドを追加したくなったらschema.ymlを編集するだけ。ダッシュボードのコードを変更する必要はありません(ここが地味に嬉しい)。
Claude Code Skillによる自動化
ここが本システムの肝です。「Gitで営業管理」と聞くと「毎回YAML手書きするの?」と思いますよね。しません。Claude Code Skillが全部やります。
/salesスキル:14サブコマンドの営業OS
Claude Codeのターミナルで/salesと打つだけで、営業活動のほぼすべてが自然言語で完結します。主要なサブコマンドを紹介します。
基本操作:add / log / update / list
| コマンド例 | やること |
|---|---|
/sales add ◯◯株式会社 | 企業ディレクトリ作成 + gBizINFO APIで法人番号・住所・従業員数等を自動補完 |
/sales log ◯◯株式会社 電話した | activities/ に活動記録を生成。pipeline.yml の last_contact・appointment_count も自動更新 |
/sales update ◯◯株式会社 提案中 | pipeline.yml のステータスを更新。失注時は3ヶ月後に御用伺いを自動設定 |
/sales list --overdue | 期限超過の案件だけを一覧表示 |
たとえば面談後に/sales log ◯◯株式会社 初回ヒアリング完了。CRM導入に興味あり。来週見積もり送付と打てば、活動記録の生成・ステータス更新・ネクストアクション設定・commit・push・Vercelデプロイまで全自動で走ります。営業担当がやるのは「何があったか」を自然言語で伝えるだけ。
sync:Gmailを読んでパイプラインを勝手に更新してくれる
「メールは送ったけど、パイプライン更新するの忘れてた」——営業あるある No.1 じゃないですか?
/sales syncはこの問題を根絶します。Gmailを検索して、フォローアップメール・顧客からの返信・Google MeetのGemini Notes(会議の自動メモ)を自動検出。各企業のlast_contactと突き合わせて「メール送ったのにパイプラインが古いままだよ?」というギャップを見つけてくれます。
差分レポートを見て「これとこれは反映して」と承認するだけ。残りは活動記録の生成からpipeline.ymlの更新まで全自動。正直、この機能だけでシステム全体の存在価値があると思っています(私情100%)。
followup:面談終了から5分後には議事録とお礼メールができている
以前は面談後の事務処理に30分かかっていました(議事録書いて、お礼メール書いて、パイプライン更新して...帰りの電車でやるやつ)。
今は/sales followup todayの1コマンドです。
- Google Calendarから今日の予定を取得(複数あれば「どれ?」と聞いてくれる)
- Gemini Notesを取得(Google Meetが自動で作ってくれる議事メモ。これが優秀)
- 議事録を生成 → BANT分析・懸念事項・アップセル機会まで整理して
minutes/に保存 - お礼メールの下書きをGmailに作成 → 日程調整URL・資料リンク・署名まで自動挿入
- 活動記録&パイプライン更新も当然やってくれる
30分が5分になった。浮いた25分で次の商談準備ができる(あるいは昼飯をちゃんと噛んで食べられる)。
analyze:初回アプローチ前の企業研究を10分で片付ける
新規企業にメールを送るとき、「とりあえずテンプレ送っとくか」と「ちゃんと調べてからパーソナライズしよう」のあいだで揺れたこと、ありませんか?
/sales analyze ◯◯株式会社は後者を10分で実現します。
- gBizINFO APIで法人番号・従業員数・補助金の採択履歴を引っ張る(補助金通ってる会社はIT投資に前向き、という読み)
- 企業サイトをスクレイピングしてニュース・事業内容を収集
- Google検索で「◯◯株式会社 DX」「◯◯株式会社 求人」を叩いて、IT人材の募集状況や情シス周りの動きを探る
- 全部まとめてIT投資積極度を判定し、「この会社はたぶんここに困ってる」という課題仮説を生成
- 仮説をベースにメールを3パターン自動生成(課題仮説ベース / 実績ベース / 質問ベース)
- 「Bでいこう」と選べば、Gmailに下書きが飛ぶ
問い合わせフォーム経由のリードなら--inquiry "在庫管理で困ってます"と渡せば、その文脈に最適化されたメールが出てきます。テンプレメールを送る罪悪感から解放されたのが個人的に一番デカい。
remind:「あの案件、動いてなくない?」を機械が言ってくれる
営業の恐怖って「忙しさにかまけてフォロー忘れてた」ですよね。気づいたときには競合に取られてた、みたいな。
/sales remindは3種類の停滞パターンを自動検知します。
| 検知タイプ | ルール | 翻訳 |
|---|---|---|
| 期限超過 | deadline が今日より前 | 「約束した日、過ぎてますよ」 |
| 長期未接触 | 14日以上連絡なし | 「存在忘れられてませんか」 |
| ステータス停滞 | 提案中/見積送付のまま30日超 | 「塩漬け案件になってません?」 |
--with-emailを付ければ、停滞案件ごとに過去の活動履歴と議事録を読んで文脈を踏まえたフォローメールの下書きまで作ってくれます。
そして極めつけが、全サブコマンドの実行前に自動リマインドが走ること。/sales logしようとしただけで「⚠ 期限超過が2件あります」と表示される。逃げ場がない。うっかり忘れを仕組みで潰す、という設計思想です(ちょっとスパルタ)。
Next.jsダッシュボード:一覧性の確保
CLIだけだと「全体像を俯瞰する」のが難しい。そこでNext.jsで簡易ダッシュボードを構築しました。
仕組み
ダッシュボードはビルド時にcompanies/ディレクトリを読み込んで静的生成します。
const SALES_ROOT = path.resolve(process.cwd(), "..");
const COMPANIES_DIR = path.join(SALES_ROOT, "companies");
export function loadAllCompanies(): Company[] {
const slugs = fs.readdirSync(COMPANIES_DIR);
return slugs.map((slug) => {
const profile = loadYaml<Profile>(
path.join(COMPANIES_DIR, slug, "profile.yml")
);
const pipeline = loadYaml<Pipeline>(
path.join(COMPANIES_DIR, slug, "pipeline.yml")
);
const activities = loadActivities(
path.join(COMPANIES_DIR, slug, "activities")
);
// ...
return { slug, profile, pipeline, activities };
});
}
ファイルシステムを直接読むだけ。データベース不要、API不要。npm run buildで全ページが静的HTMLになります。
主な機能
| 機能 | 説明 |
|---|---|
| パイプライン一覧 | ステータス・最終接触日・ネクストアクション・期限を一覧表示。検索・フィルタ・ソート対応 |
| 企業詳細 | profile + pipeline + 活動履歴 + 議事録をまとめて表示 |
| アラート | 期限超過(赤)と期限間近(黄)を自動検出してバナー表示 |
| スキーマ連動 | ステータスの選択肢やラベルをschema.ymlから動的取得 |
Vercelにデプロイして、Password Protectionで社内だけにアクセス制限をかけています。URLを知っていてもパスワードがないと見れない安心設計。
自動デプロイ:Gitにpushするだけ
データ更新のたびに手動でデプロイするのは面倒すぎます。auto-deploy.shで自動化しました。
#!/usr/bin/env bash
set -euo pipefail
# 変更がなければスキップ
if git diff --quiet && git diff --cached --quiet; then
echo "変更なし — スキップ"
exit 0
fi
# ビルドテスト(失敗したらcommitしない = 安全弁)
cd dashboard && npm run build --quiet && cd ..
# commit & push
git add companies/ templates/ schema.yml
git commit -m "chore(sales): update data"
git push
# → Vercel Git Integrationが自動デプロイ
ポイントはビルドテストが通らないとcommitしないこと。壊れたデータがデプロイされる心配がありません(本番環境が白画面になる恐怖からの解放)。
実運用で見えたメリットと課題
メリット
| 観点 | 効果 |
|---|---|
| コスト | SFA/CRMライセンス費 月0円(Vercelの無料枠で運用) |
| 透明性 | git logで全変更履歴を追跡。「いつ誰がステータス変えた?」に即答 |
| カスタマイズ性 | schema.yml編集だけでフィールド追加。コード変更不要 |
| AIとの親和性 | テキストベースなのでClaude Codeが直接読み書きできる |
| バックアップ | GitHubがバックアップ。ローカルにもクローンがある二重安全 |
課題(正直に言います)
- 同時編集: Git conflictが起きる可能性はある。2〜3人なら頻度は低いが、10人超えたら厳しい
- 権限管理: GitHubのリポジトリ権限に依存。「この人には一部企業だけ見せたい」はできない
- モバイル対応: ダッシュボードは見れるが、データ更新はClaude Codeが必要(スマホからは無理)
- 検索の限界:
git grepは速いが、複雑な条件検索はSFA/CRMに劣る
結論:5人以下のチームで、「まず動く仕組みが欲しい」フェーズには最適。 組織が大きくなったらSFA/CRMに移行すればいい。YAMLなのでデータのエクスポートも簡単です。
技術構成まとめ
| レイヤー | 採用技術 | 役割 |
|---|---|---|
| データストア | Git + YAML/Markdown | 顧客情報・パイプライン・活動履歴の永続化 |
| スキーマ定義 | schema.yml | フィールド定義のSingle Source of Truth |
| CLI操作 | Claude Code Skills (/sales) | 14サブコマンドで営業活動を自然言語で操作 |
| 外部連携 | Gmail API / Google Calendar / gBizINFO | メール同期・予定取得・企業情報補完 |
| ダッシュボード | Next.js + Tailwind CSS | パイプライン可視化・アラート表示 |
| ホスティング | Vercel (Password Protection) | 静的サイトのホスティング + アクセス制御 |
| CI/CD | auto-deploy.sh + Vercel Git Integration | ビルドテスト → commit → 自動デプロイ |
まとめ
「SFA/CRMを入れなきゃ」というプレッシャーを感じている小規模チームにとって、Gitリポジトリ + YAML + Claude Code Skillという組み合わせは意外と実用的な選択肢です。月額費用はゼロ、変更履歴は完全。それだけじゃなく、Gmailからパイプラインを自動更新し、面談後は議事録とお礼メールを全自動で生成し、新規アプローチでは企業分析からメール3パターン提案までやってくれる。
もちろん、これは万能薬ではありません。チームが大きくなったり、複雑なワークフローが必要になったりしたら、SFA/CRMへの移行を検討すべきです。でも、まずは動く仕組みを作って営業を前に進める。そのスタートラインとして、Gitベースの営業管理は悪くない選択だと思います。
(ちなみに、この記事を書いている間にも/sales remindが「明日期限のフォロー1件あります」と教えてくれました。全コマンド実行前に自動リマインドが走るので、忘れようがない。)



