導入(問題提起)
CRMは“多機能=成功”ではありません。項目が多すぎて入力が続かない、運用に合わず形骸化する——よくある失敗です。重要なのは、現場が「今日から使える最小機能」に絞り、効果を見ながら拡張すること。Pythonによる小規模なWebシステム開発で、まずはExcel Web化の延長として“回る最小CRM”を作るのが現実解です。本記事では、中小企業が最初に入れるべき必要機能と、その技術的な最小構成を具体的に示します。キーワードは「Webシステム開発」「業務システム」「Python」「Excel Web化」です。
課題の詳細説明
Excelやスプレッドシートによる顧客管理が抱える課題:
- 履歴の欠落:電話/訪問/メールのやり取りが担当者メールや口頭で埋没する。
- 重複と表記揺れ:会社名・部署名・担当者が複数表記で検索不能、案件の重複登録も発生。
- 共有の困難:同時編集の上書き、誰が何を更新したか不明。
- 成果の可視化不足:案件進捗、成約率、平均単価、活動量などのKPIが出ない。
- 外部連携の弱さ:見積・請求、メール配信、問い合わせフォームと結びつかない。
解決方法(必要機能)
まずは“最小で回る”MVPを定義し、早期に定着させます。
必須(MVP):
- 顧客・担当者マスタ:重複チェック(会社名+電話/ドメイン)。会社—部門—担当者の階層。
- 商談/案件:フェーズ・見込み額・確度・次アクション・担当者。期日超過のアラート。
- 活動履歴:種別(架電/訪問/メール/WEB MTG)・要点・次アクションのテンプレ化。
- タグ/区分:業種・規模・興味領域などのセグメント配信の土台。
- 検索とCSV:あいまい検索、並び替え、CSV入出力(既存Excelの一括取込)。
- 権限/ログイン:閲覧制御、担当者のみ編集可、監査ログ。
重要(第二段):
- 見積・請求連携:見込み→売上の自動トラッキング、受注確度と粗利見込の可視化。
- メール/MA連携:ステップメール送信、反応ログ(開封/クリック)を活動履歴へ自動記録。
- ダッシュボード:案件数・成約率・平均単価・活動量・滞留案件を可視化。
具体例
- 一気通貫:顧客登録 → 案件作成 → 活動履歴 → 見積 → 受注 → 請求。
- Excel Web化:既存台帳をCSVで取り込み、ドメインや電話番号で重複統合。
- 使い勝手:案件一覧は「次アクション日」で並び替え、スヌーズ機能で漏れ防止。
技術的な解説(Python × 最小CRMアーキテクチャ)
最小構成は「Python + FastAPI(またはBottle) + SQLite」。小規模導入に十分で、将来はPostgreSQLへ移行可能。
- データモデル(SQLite例)
CREATE TABLE companies(id INTEGER PRIMARY KEY, name TEXT, domain TEXT);
CREATE UNIQUE INDEX uniq_company ON companies(name, COALESCE(domain,''));
CREATE TABLE contacts(id INTEGER PRIMARY KEY, company_id INTEGER, name TEXT, email TEXT, phone TEXT);
CREATE TABLE deals(id INTEGER PRIMARY KEY, company_id INTEGER, title TEXT, amount INTEGER, stage TEXT, owner TEXT, next_action DATE);
CREATE TABLE activities(id INTEGER PRIMARY KEY, deal_id INTEGER, type TEXT, note TEXT, ts DATETIME);
- ルーティング(FastAPI例)
from fastapi import FastAPI
from pydantic import BaseModel
import sqlite3
app = FastAPI()
def db():
return sqlite3.connect('crm.db')
class Deal(BaseModel):
company_id: int
title: str
amount: int
stage: str
owner: str
next_action: str
@app.post('/deals')
def create_deal(d: Deal):
with db() as con:
con.execute('INSERT INTO deals(company_id,title,amount,stage,owner,next_action) VALUES(?,?,?,?,?,?)',
(d.company_id, d.title, d.amount, d.stage, d.owner, d.next_action))
return {'ok': True}
- 権限/RBAC:担当者は自案件のみ編集、管理者は全件閲覧。更新は監査ログに必ず記録。
- CSV取込:既存Excelの列をマッピングし、一括登録。重複は会社名+ドメイン/電話で検知。
- 連携:問い合わせフォームから自動で見込み顧客を作成、メール送信ログを活動履歴へ保存。
導入の流れ
- 項目の棚卸し:既存Excelから“使っている列だけ”を抽出し、最小のデータ定義に落とす。
- PoC:顧客1社・案件1件で「登録→履歴→見積→請求」まで最短導線を通す。
- 定着:案件一覧の「次アクション」運用を徹底し、朝会で未対応抽出→即アサイン。
- 拡張:ダッシュボードとメール連携、見積/請求連携を追加。
まとめ
CRMの成功は“入力しやすさ”に尽きます。まずは最小のMVPで運用を回し、効果を確認しながら拡張する。Pythonを使った小規模業務システムなら短期間・低コストで実現でき、Excel Web化の延長として自然に移行できます。
「Webシステム開発のご相談は monou まで」