目次
01なぜこれを作るのか
製薬の宣伝資材作成の現場で、過去 18 ヶ月で起きた最大の変化は、「資材ドラフトの初版を AI が書く」 ことが当たり前になったことです。ChatGPT、Claude、Gemini、社内 LLM ── どれを使うかは別として、MR 向け資材、医療従事者向け説明資材、患者向け IP、社内研修資材まで、起案は AI を起点にする企業が大半を占めるようになりました。
ところが、業界横断で見ると、ここに 3 つの非効率が積み上がっています。
- 再発明の重複 ── 各社が、ほぼ同じ目的の同じプロンプトを、独立に試行錯誤して作っている。学習曲線の 最下層を 30 社が並走 している状況です
- "良いプロンプト" の死蔵 ── 一部の熟練者が辿り着いた、コンプライアンスと品質を両立するプロンプトは、組織内のチャットや個人のメモに沈み、退職とともに消えます
- 業界規律の伝播の遅さ ── 薬機法・販提G・製薬協コードの最新解釈が、プロンプトの形で共有されない。だから違反パターンも各社が独立に踏みます
結論を先に置きます。プロンプトは "考え方の骨格" であり、企業秘密ではない。出力 (実際の資材) は各社の責任で審査されるため、プロンプトの公開が直接コンプライアンスを下げることはありません。むしろ、業界全体のコンプライアンス感度を底上げします。本稿の提案は、プロンプトの "オープン化と継続改良" を、業界が共有する公共財として運用する仕組み です。
02何を作るのか ── 全体像
プロンプト・コモンズは、次の 5 つの要素から成る Web プラットフォームです。
プロンプト・カタログ
業界共有のプロンプトを、検索・分類・閲覧できるカタログ。各プロンプトは Markdown で記述。
バージョン管理
各プロンプトは Git 的なバージョン履歴を持つ。誰がいつ何を変えたかが追える。フォーク可。
議論スレッド
各バージョンに対する議論スレッド。コンプライアンス指摘、改善案、実務報告が交わる。
評価機構
Vote, リアクション, 採用報告。コミュニティの集合知が品質を選別。
モデレーション
明白な違反 (薬機法 §66/§68 等) を自動スキャン + 人手フラグ。後述ポリシー参照。
AI 改善提案
(後期フェーズ) 議論を学習し、プロンプト改良案を自動生成。「業界知の蒸留」を試行。
これらが組み合わさって、「プロンプトを起点にした、業界横断の継続的議論サイクル」 を構成します。
03なぜ公開できるのか ── オープン化の論理
真っ先に挙がる反論は 「うちのプロンプトは出さない。競合優位の源泉だ」 です。これに 3 段階で答えます。
段階 1 ── 競合優位の所在: 製薬企業の競合優位は、プロンプトそのものよりも、(a) 自社の臨床データ、(b) ターゲット患者さんの理解、(c) MR の現場知見、(d) 出力資材の社内審査体制、にあります。プロンプトは、これらを 表現するための器 に過ぎません。器を共有しても、中身 (各社のデータと知見) は共有されません。
段階 2 ── 公開のメリット: 自社のプロンプトを公開する 1 社は、業界全体からのフィードバックを得られます。コンプライアンスの観点、表現の改善、未認識のリスク。1 社で抱えると 1 人の頭しか働かないが、公開すれば 100 人の頭が働きます。
段階 3 ── 公開のリスク管理: 機密性が懸念される箇所は、プロンプト中で {{PRODUCT_X}} のような変数化で抽象できます。プラットフォーム側もガイドラインで「具体的な未承認情報・治験データ・商業機密の混入禁止」を明示。投稿前の自動スキャンも提供します。
04利用シナリオ
4 つの典型シナリオで、何が起きるかを描きます。
シナリオ A ── ベテラン審査担当が、自身のプロンプトを公開する
「適応外使用を匂わせない MR 向け説明資料の構造を作るプロンプト」を、製薬企業 X 社の Y 氏が公開。Y 氏には、自社で 3 年運用して、薬機法 §66 違反フラグが立たなかった実績がある。投稿時に 運用ログサマリー (匿名化) も添付する。
シナリオ B ── 新人が、業界共有プロンプトを起点に学ぶ
製薬企業 Z 社の新人 W さんは、自社プロンプトを持たない。プロンプト・コモンズで「MR 向け基礎資料」タグで 12 件のプロンプトを比較し、Vote が高い 3 件を読み、議論スレッドを追う。議論スレッドが教科書になる。
シナリオ C ── コンプライアンス担当が、業界規律をフィードバックする
製薬協コードの解釈担当 V 氏が、公開プロンプト P-218 の議論スレッドに 「ここの表現は、製薬協コード §3.1 の最新解釈と矛盾します」 とコメント。投稿者と他の利用者が議論し、改良版 P-218.v2 がフォークされる。業界規律が、文書ではなくプロンプトの差分として伝わる。
シナリオ D ── AI 開発者が、業界ニーズを把握する
LLM プロバイダの開発者 U 氏が、プロンプト・コモンズで「薬機法準拠」「販提G準拠」タグで議論を追う。業界が AI に何を求めているか、どこで詰まっているかが見える。次世代モデルのファインチューン方針が、業界のニーズに直結する。
05主要機能
機能の全体を、利用者ロールごとに整理します。
| 機能領域 | 具体機能 | 関連ロール |
|---|---|---|
| カタログ | 検索、タグフィルタ、人気順 / 新着順 / 議論活発順ソート、関連プロンプト推薦 | 全員 |
| 投稿 | 新規プロンプト作成、編集、Markdown プレビュー、変数定義、サンプル出力の添付 | 投稿者 |
| バージョン管理 | 編集履歴、diff 表示、ブランチ (フォーク)、マージ提案 (Pull Request 相当) | 投稿者・編集者 |
| 議論 | スレッド型コメント、Markdown サポート、引用、リアクション (👍 / ⚠️ / 💡) | 全員 |
| 評価 | Vote (+/-)、採用報告ボタン (「自社で運用中」「改良中」「不採用」)、Reputation | 全員 |
| コンプライアンス | 自動スキャン (薬機法 §66/§68 違反パターン検出)、コミュニティフラグ、モデレータ介入、削除ログ | モデレータ・全員 |
| 通知 | ウォッチ機能、メール / Web Push、新コメント / 新バージョン通知 | 全員 |
| ユーザー | 仮名アカウント可、所属組織の任意開示、COI 宣言、Reputation 履歴 | 全員 |
| API | REST + WebSocket、外部ツール連携、データエクスポート | 開発者 |
06アーキテクチャ
使う道具 (技術) を選ぶときは、(a) いま借りているサーバー (VPS = 自分専用に借りた一台のサーバー) をそのまま使える、(b) 小さく始めて後から増やせる、(c) 毎月の運用費が安い、の 3 つを優先しました。
このあと、画面・処理・データ保管の 3 つの層に分けた図と、それぞれで使う道具が出てきます。聞き慣れない名前が並びますが、それぞれ「何のための道具か」を一言で添えてあります。難しければ名前は読み飛ばして、役割だけ拾えば十分です。
全体構成
┌─────────────────────────────────────────────────────────────┐ │ Frontend (Next.js 14 App Router, TypeScript, Tailwind) │ │ - SSR for SEO + Client interactivity │ │ - Markdown editor (CodeMirror 6) │ │ - Diff viewer (react-diff-viewer-continued) │ └──────────────────┬──────────────────────────────────────────┘ │ HTTPS / WebSocket ┌──────────────────┴──────────────────────────────────────────┐ │ API (FastAPI + Pydantic, Python 3.12) │ │ - REST endpoints │ │ - WebSocket (real-time comments) │ │ - Background jobs (Celery + Redis) │ └──────────────────┬──────────────────────────────────────────┘ │ ┌──────────────────┴──────────────────────────────────────────┐ │ Storage Layer │ │ - PostgreSQL 16 (primary data) │ │ - Redis 7 (cache, sessions, job queue) │ │ - S3-compatible object store (attachments, exports) │ │ - Meilisearch (full-text search; Phase 2) │ └─────────────────────────────────────────────────────────────┘ Compliance Scan Service (separate microservice) - Pattern matching (regex + rules) - LLM-based review (Phase 3+) Notification Service - Email (SES / Resend) - Web Push (VAPID) Auth: NextAuth + Email OTP / OIDC (pseudonym supported)
図に出てくる耳慣れない名前を、一言ずつ補っておきます。WebSocket は、サーバーとブラウザが回線をつなぎっぱなしにして、新しいコメントが付いた瞬間に画面へ届ける仕組み (普通の通信は「聞かれて初めて答える」が、これは「向こうから話しかけてくる」)。Redis は、よく使うデータを手元に置いて素早く出すための一時置き場 (速い小型の保管庫)。Celery は、時間のかかる処理 (メール送信や自動チェックなど) を裏側でまとめてこなす作業係です。これらは利用者からは見えませんが、表示を速く、待ち時間を短くするための裏方です。
ホスティング
- Frontend: Vercel または同 VPS の Node プロセス + nginx リバースプロキシ
- API + DB: 既存 VPS (Docker Compose) で開始 → 拡大時に分離
- CDN: 既存 Cloudflare 構成を流用
- Auth: NextAuth (セルフホスト)
技術選定の理由
| 選択 | 理由 |
|---|---|
| Next.js | 画面を作る道具。サーバー側で先にページを組み立てて (= SSR) 送るので、検索エンジンに中身が伝わりやすい。届いた後はブラウザ上で動き出す (= hydration、静止画に操作機能を後付けする工程) ので、ボタンや入力もなめらか。検索で見つけてもらう場なので、この相性が効きます。 |
| FastAPI | 画面とデータの間をつなぐ窓口 (API) を作る道具。データの「型」を先に決めておくと書き間違いが減り、しかも仕様書 (どんな窓口があるかの一覧) が自動で出来上がります。 |
| PostgreSQL | データを保管する箱 (データベース)。プロンプトと、その版と、コメントが複雑に結びつくので、こうした関係づけが得意なものを選びました。柔らかい形のデータ保管 (JSONB) と、文章をまるごと検索する機能 (全文検索) も内蔵で、立ち上げ当初の規模なら十分です。 |
| Meilisearch | 検索専用の道具。日本語の文を単語に区切って探せるので、後の段階 (Phase 2) で追加します。 |
| Markdown | 文章を簡単な記号だけで書く、軽い書き方の決まり。プロンプトの書き方として既に広く使われ、変更履歴の管理とも相性が良い。 |
07データモデル (DB スキーマ)
データをどんな「表」に分けてしまうかの設計です。主要な表は 11 個。先ほどの保管庫 (PostgreSQL) の上に置きます。下のコードは、その表を作るための指示書 (SQL という、データベースへの命令の書き方) です。技術者でなければ、コード自体は読まなくて構いません。各行の右側に付けた日本語コメント (利用者の表、プロンプト本体の表、議論の表…) を拾えば、何をどう保管するかの全体像はつかめます。
-- ユーザーと組織 -- CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), pseudonym TEXT NOT NULL UNIQUE, -- 公開名 (仮名 OK) email_hash TEXT NOT NULL UNIQUE, -- メール SHA-256 (login key) display_name TEXT, -- 任意の本名 org_id UUID REFERENCES orgs(id), -- 所属組織 (任意開示) coi_text TEXT, -- COI 宣言 reputation INTEGER NOT NULL DEFAULT 0, role TEXT NOT NULL DEFAULT 'member', -- member / mod / admin created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), status TEXT NOT NULL DEFAULT 'active' -- active / suspended / banned ); CREATE TABLE orgs ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name TEXT NOT NULL UNIQUE, type TEXT, -- pharma / consulting / academic / regulator verified BOOLEAN NOT NULL DEFAULT FALSE, -- 組織検証済みか created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- プロンプト本体 -- CREATE TABLE prompts ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), slug TEXT NOT NULL UNIQUE, title TEXT NOT NULL, summary TEXT, -- 1-3 行説明 current_version_id UUID, -- 最新公開バージョン owner_user_id UUID NOT NULL REFERENCES users(id), fork_of_prompt_id UUID REFERENCES prompts(id), -- フォーク元 license TEXT NOT NULL DEFAULT 'CC-BY-4.0', status TEXT NOT NULL DEFAULT 'published', -- draft / published / archived / removed view_count INTEGER NOT NULL DEFAULT 0, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX idx_prompts_owner ON prompts(owner_user_id); CREATE INDEX idx_prompts_status ON prompts(status) WHERE status = 'published'; CREATE TABLE prompt_versions ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), prompt_id UUID NOT NULL REFERENCES prompts(id), version_label TEXT NOT NULL, -- v1, v2.1, etc. content_md TEXT NOT NULL, -- プロンプト本文 (Markdown) changelog TEXT, -- このバージョンの変更点 parent_version_id UUID REFERENCES prompt_versions(id), author_user_id UUID NOT NULL REFERENCES users(id), sample_output_md TEXT, -- サンプル出力例 variables_json JSONB, -- {{VAR_NAME}}の定義 created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE(prompt_id, version_label) ); CREATE INDEX idx_versions_prompt ON prompt_versions(prompt_id); -- 議論 -- CREATE TABLE discussions ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), prompt_version_id UUID NOT NULL REFERENCES prompt_versions(id), title TEXT NOT NULL, opened_by_user_id UUID NOT NULL REFERENCES users(id), status TEXT NOT NULL DEFAULT 'open', -- open / resolved / locked category TEXT, -- compliance / improvement / question / report comment_count INTEGER NOT NULL DEFAULT 0, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE TABLE comments ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), discussion_id UUID NOT NULL REFERENCES discussions(id), parent_comment_id UUID REFERENCES comments(id), -- スレッド階層 author_user_id UUID NOT NULL REFERENCES users(id), content_md TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'visible', -- visible / hidden / removed created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), edited_at TIMESTAMPTZ ); CREATE INDEX idx_comments_discussion ON comments(discussion_id); -- 評価 -- CREATE TABLE votes ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), target_type TEXT NOT NULL, -- 'prompt' / 'version' / 'comment' target_id UUID NOT NULL, user_id UUID NOT NULL REFERENCES users(id), value SMALLINT NOT NULL CHECK (value IN (-1, 1)), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE(target_type, target_id, user_id) ); CREATE TABLE reactions ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), target_type TEXT NOT NULL, target_id UUID NOT NULL, user_id UUID NOT NULL REFERENCES users(id), emoji TEXT NOT NULL, -- '👍' '⚠️' '💡' etc. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE(target_type, target_id, user_id, emoji) ); CREATE TABLE adoptions ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), prompt_id UUID NOT NULL REFERENCES prompts(id), user_id UUID NOT NULL REFERENCES users(id), status TEXT NOT NULL, -- 'in_production' / 'piloting' / 'modified' / 'declined' notes TEXT, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- タグ -- CREATE TABLE tags ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name TEXT NOT NULL UNIQUE, type TEXT NOT NULL -- 'topic' / 'regulation' / 'material_type' / 'language' ); CREATE TABLE prompt_tags ( prompt_id UUID NOT NULL REFERENCES prompts(id), tag_id UUID NOT NULL REFERENCES tags(id), PRIMARY KEY(prompt_id, tag_id) ); -- モデレーション -- CREATE TABLE moderation_flags ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), target_type TEXT NOT NULL, -- 'prompt' / 'version' / 'comment' target_id UUID NOT NULL, reporter_user_id UUID REFERENCES users(id), -- NULL なら自動スキャン reason_code TEXT NOT NULL, -- 'pharma_act_66' / 'jpma_code' / 'spam' / 'other' reason_text TEXT, status TEXT NOT NULL DEFAULT 'open', -- open / dismissed / actioned resolved_by_user_id UUID REFERENCES users(id), resolution_notes TEXT, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), resolved_at TIMESTAMPTZ ); -- 監査ログ (全変更を不可逆記録) -- CREATE TABLE audit_log ( id BIGSERIAL PRIMARY KEY, actor_user_id UUID REFERENCES users(id), action TEXT NOT NULL, -- 'create' / 'update' / 'delete' / 'moderate' target_type TEXT NOT NULL, target_id UUID NOT NULL, payload JSONB, ip_hash TEXT, user_agent TEXT, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX idx_audit_target ON audit_log(target_type, target_id);
主要な不変条件
- 監査ログは追記専用。削除や更新を許さない (PostgreSQL ロールで物理的に保証)
- Reputation は SUM(votes WHERE target == ユーザーのコンテンツ) から再計算可。冗長化はキャッシュ目的
- prompts.current_version_id は published バージョンのみを指す。draft は別途扱う
- 削除されたコンテンツは status='removed' に変える。物理削除しない (議論履歴の継続性のため)
08API 設計
外部のツールやアプリと、このサービスがやり取りするための窓口を「API」と呼びます。ここでは 2 種類を用意します。1 つは REST という、ごく一般的なやり取りの作法 (「この住所に取りに行けばこのデータが返る」を決めたもの)。もう 1 つは前述の WebSocket で、議論の新着コメントをその場で届けるために使います。窓口の一覧表 (どんな住所で何が取れるか) は、自動で仕様書 (OpenAPI 3.1 という共通フォーマット) として書き出されます。
主要エンドポイント (REST)
プロンプト
バージョン
議論
評価
モデレーション
WebSocket (リアルタイム)
# 接続 wss://prompt-commons.example.com/ws # 購読 (議論ページを開いたとき) { "type": "subscribe", "channel": "discussion:<discussion_id>" } # サーバから push される events { "type": "comment.created", "data": {...} } { "type": "comment.edited", "data": {...} } { "type": "reaction.added", "data": {...} } { "type": "version.published", "data": {...} }
認証フロー
- 新規登録: メールアドレス → OTP 送信 → 仮名 (公開名) を選択 → 完了
- ログイン: メールアドレス → OTP 送信 → セッション Cookie 発行 (HttpOnly, Secure, SameSite=Lax)
- API 認証: セッション Cookie (Web) または JWT Bearer (外部ツール)
- 組織検証: 任意。組織ドメインからのメールで自動検証可。
レート制限
| エンドポイント類 | 未ログイン | ログイン済み |
|---|---|---|
| GET (読み取り) | 60 req/min | 300 req/min |
| POST 投稿系 | 不可 | 10 req/min, 100 req/day |
| POST 評価系 | 不可 | 60 req/min |
| POST flag | 不可 | 5 req/hour |
09モデレーション運用
プロンプト・コモンズのモデレーション設計は 「自動 → コミュニティ → モデレータ」 の 3 層 で構成します。明白な違反を機械で弾き、解釈の余地があるものをコミュニティで議論可視化し、最終判断をモデレータが担う構造です。
Layer 1 ── 自動スキャン (投稿時 / 公開前)
新規プロンプトまたはコメント投稿時に、以下を自動チェック。
- 規制違反パターン: 薬機法 §66 (誇大広告)、§68 (承認前広告) の典型表現 (regex + 用語辞書)
- 個別商品名のハードコード: 投稿者に変数化を促す
- 未承認情報の混入: 「未承認」「適応外」キーワードの組合せ
- 個人情報・治験データ漏洩: SSN、メールアドレス、CT.gov ID 等の検出
- スパム / 重複: ハッシュ + Jaccard 類似度で類似コンテンツ検知
違反検知時の挙動:
- 確実な違反 (高信頼度): 投稿を block、ユーザーに理由を提示
- 疑わしい (中信頼度): 投稿を warn + draft 保存。ユーザーが修正 or 公開強行を選べる (強行時はモデレータキューへ)
- 軽微 (低信頼度): 公開しつつ、レビュー対象としてマーク
Layer 2 ── コミュニティフラグ
誰でも、任意のコンテンツに対し POST /flags でフラグを立てられる。フラグ理由:
| コード | 意味 | 処理 |
|---|---|---|
| pharma_act_66 | 薬機法 §66 違反 (誇大表現) | モデレータキューへ |
| pharma_act_68 | 薬機法 §68 違反 (承認前広告) | モデレータキューへ即時、暫定的に非公開化 |
| jpma_code | 製薬協コード違反疑い | モデレータキュー、議論スレッドへの誘導 |
| off_topic | 製薬宣伝資材と無関係 | モデレータキュー |
| spam | スパム | 3 件以上で自動非表示、モデレータ確認 |
| personal_data | 個人情報混入 | 即時マスク + モデレータ通知 |
| other | その他 | モデレータキュー |
Layer 3 ── モデレータ判断
モデレータは以下を行える:
- 削除 (status='removed'): コンテンツは表示されないが、議論履歴は残る (URL は 410 Gone を返す)
- 編集: 明白な個人情報や違反語の削除のみ。本旨の改変は不可
- 警告: 投稿者に注意通知
- サスペンド: ユーザーアカウントを期間制限
- BAN: 重大かつ繰り返し違反の場合
- 異議申し立て受付: 投稿者がモデレータ判断に異議申し立て可。別モデレータが再審
audit_log に記録される。透明性を担保。月次でモデレーション統計を公開する (削除件数、フラグ件数、内訳)。モデレータ選出
- 初期: 主催者 (当サイト編集部) が 3 名選出
- Phase 2 以降: Reputation 上位 + 業界経験 (製薬企業/規制当局/学術) の三者バランスで 5-7 名
- 任期: 12 ヶ月。再任可
- 利益相反: モデレータは自身が関わるプロンプトのモデレーション判断不可
10ガバナンスとライセンス
ライセンス
プロンプトのデフォルトライセンスは CC BY 4.0 (帰属表示で自由利用可)。投稿者は CC0 (パブリックドメイン) も選択可。商用利用は両方で可能。これは「業界共有財産」というコンセプトと整合します。
運営主体
初期は 当サイト が運営 (このサイトの編集部)。Phase 2 以降、業界横断の運営委員会へ移行を検討:
- 製薬企業から 3 名 (企業規模ミックス)
- 規制当局/関係機関から 1 名 (PMDA 等のオブザーバ的立場)
- 学術から 1 名
- 運営事務局から 2 名
COI ポリシー
- ユーザープロフィールに COI 宣言欄を設置 (任意記入)
- プロンプト投稿時、特定商品の宣伝目的がある場合は明示必須
- モデレータは自身関連コンテンツへの介入禁止
個人情報・データ保護
- 本名は任意。仮名運用が標準
- メールアドレスは内部のみ (SHA-256 ハッシュで照合)
- GDPR / 個人情報保護法準拠
- 削除要求 (GDPR Art. 17): ユーザーは自身のアカウントとコンテンツの削除要求可
11フェーズ別実装計画
段階的に立ち上げ、各段階で実利用フィードバックを取り込む。
MVP ── 静的カタログ + 既存 Mattermost で議論
このサイト内に /prompt-commons/catalog/ サブセクションを作成。プロンプトを Markdown ファイルで管理 (Git)。議論は既存 Mattermost のチャンネルへリンク。投資ゼロで、ニーズの実証。
- 10 件の代表プロンプトをカタログ化
- 各プロンプトに Mattermost スレッドへのリンク
- 採用報告は Google Form で集計
基本機能 ── Web 投稿 + バージョン管理
Next.js + FastAPI + PostgreSQL の最小構成を立ち上げる。投稿、バージョン、検索が動く。
- 認証 (OTP), プロフィール
- プロンプト CRUD, タグ
- バージョン管理 + diff 表示
- シンプル全文検索 (Postgres FTS)
- 運用: 既存 VPS + Docker
議論 + コミュニティ機能
議論スレッド、Vote、リアクション、採用報告、コミュニティフラグの主要機能。
- 議論スレッド (階層型コメント、Markdown サポート)
- Vote / Reactions / Adoptions
- WebSocket でリアルタイム更新
- 通知 (Email + Web Push)
- コミュニティフラグ + モデレータダッシュボード
- Meilisearch 導入 (日本語形態素解析)
コンプライアンス自動化 + AI 改善提案
自動スキャン (規則ベース + LLM ベース) を本格運用。議論をコンテキストにした AI 改善提案を試験投入。
- 規制ルール DB (薬機法 §66/§68、販提G、製薬協コード) の構造化
- 投稿時自動スキャン (regex + LLM 二段階)
- 議論サマリ AI (長い議論の要約)
- 類似プロンプト推薦 (embeddings ベース)
- 「このプロンプトをこう改良してはどうか」サジェスト
ファインチューン統合と業界知の蒸留
承認された高品質プロンプト + 議論ログを用いて、業界特化 LLM のファインチューン。希望企業へホスト LLM API として提供 (有償オプション)。
- 高品質コーパスのアノテーション
- ベース LLM (Llama 4 等) のドメイン適応
- 専用 API ゲートウェイ
- ベンチマーク (薬機法準拠率、表現品質) の公開
- 収益化: ホスト API の有償提供 (運営費に充当)
12リスクと対応
| リスク | 影響 | 対応 |
|---|---|---|
| 機密情報の漏洩 | 高 | 投稿前の自動スキャン (個人情報・治験データ・未承認情報) + 投稿ガイドライン明示 + テンプレートでの変数化推奨 |
| 規制違反プロンプトの公開 | 高 | 自動スキャン + コミュニティフラグ + モデレータ。明白違反は即時非公開、解釈の余地は議論で可視化 |
| 業界の同調圧力 (一案が "正解" 化) | 中 | Vote は参考、決定的でないことを UI で強調。少数意見は明示的に可視化。フォーク奨励 |
| 競合企業による不正利用 | 低 | そもそも公開前提なので "悪用" 概念が成立しにくい。ライセンス明示で帰属表示を担保 |
| 運営の継続性 | 中 | Phase 2 以降、業界横断の運営委員会へ移行。データは可搬な形式 (Markdown + JSON エクスポート) |
| 初期ユーザー獲得失敗 | 高 | Phase 0 で 10 件の高品質シードコンテンツを編集部が用意。3 ヶ月で投稿数 50 件達成しなければ撤退判断 |
| モデレータ不足 / 偏向 | 中 | 初期 3 名 → 透明な選任プロセスで拡大。月次統計公開。異議申し立てルート確保 |
| 規制当局の懸念 | 中 | 立ち上げ時に PMDA / 製薬協へ事前相談。オブザーバ参加を打診 |
| 低品質投稿の氾濫 | 低 | Reputation システム + Vote で自然選別。投稿者の信頼度を可視化 |
13成功指標とコスト
成功指標 (Phase 別)
| 指標 | Phase 1 終 | Phase 2 終 | Phase 3 終 |
|---|---|---|---|
| 登録ユーザー数 | 50 | 300 | 1,500 |
| 公開プロンプト数 | 30 | 200 | 800 |
| 議論スレッド数 | 20 | 500 | 3,000 |
| 1 プロンプトあたり平均コメント数 | 2 | 5 | 10 |
| 採用報告数 | 10 | 100 | 500 |
| フォーク率 (公開のうちフォーク発生) | 10% | 25% | 40% |
| 参加組織数 (任意開示ベース) | 5 | 20 | 60 |
開発・運用コスト見積
| 項目 | Phase 0-1 | Phase 2 | Phase 3+ |
|---|---|---|---|
| 開発工数 (人月) | 0.5 | 2 | 4 |
| VPS / インフラ | 既存 (実質 0) | $20-40 / 月 | $100-200 / 月 |
| 外部 API (LLM 等) | 0 | $50 / 月 | $500 / 月 |
| モデレーション人件 | 編集部内 | 編集部内 | 業界委員会 (報酬付き) |
| 合計目安 | ~ $0 | $70-90 / 月 | $600-700 / 月 |
初期判断のチェックポイント
Phase 0 終了時点 (1 ヶ月後) に、以下を判定:
- シードコンテンツ 10 件に対し、議論コメントが計 30 件以上ついたか
- 3 社以上から「採用検討」の声があるか
- 規制当局/業界団体から否定的反応がないか
これらが満たされなければ Phase 1 を見送り、コンセプトの再設計か撤退を判断。「作ること」より「作る価値があるかを確かめること」 を Phase 0 のゴールにします。
製薬の宣伝資材作成という仕事は、これまで 「各社の中で閉じた、職人技の継承問題」 でした。AI プロンプトの時代は、その閉じた構造を 業界横断の公共財として開く 機会を提供しています。
本稿で提案したプロンプト・コモンズは、技術的には極めて手堅い ── 既存の Web スタックと、PostgreSQL の関係性、Markdown と Git 的バージョン管理を組み合わせるだけです。難しいのは技術ではなく、「公開できるという信念を、最初の数社が示すこと」。それが立ち上がれば、あとは Network 効果が運びます。
この設計書を読んだ方が、自社で「うちのプロンプトのうち、これは公開できる」と思える 1 件が見つかったら、それが Phase 0 の最初の投稿になります。始まりは、いつも 1 件の投稿から。