🎯
記事を生成しない記事生成ツール『Promptman』をGCP + Gemini で実装した
Promptman は、記事本文を生成するのではなく、「記事を生成させる実行用プロンプト」を提供するツールです。
- ✅ APIコストゼロ(ユーザー自身のGemini APIキーを使用)
- ✅ 媒体別ルール厳守(note/Zenn/X で語調・構成が完全に異なる)
- ✅ Agentic AI(構成確認→プロンプト生成の段階的フロー)
- ✅ スケーラブル(GCP Cloud Run + Ollama)
デモ動画(3分)
🎯 プロジェクト概要
対象ユーザー
- EC事業者・実務者 が記事を書く際、AIライティングツールに「依存」したくない人
- note、Zenn、X(Twitter)で発信しているが、媒体ごとに語調を変えるのが面倒な人
- AIの「煽り文・誇張表現」を避けたいが、記事作成は効率化したい人
解決する課題
課題1: 既存AIライティングツールの問題点
一般的なAIライティングツール:
ユーザー入力 → LLM実行 → 完成記事を出力
↓
問題:
1. ユーザーがAIに依存する
2. サービス側がAPIコストを負担
3. 出力の品質がLLM性能に左右される
4. 媒体別の細かいルールが反映されない
課題2: 「何を書かせるべきか」が曖昧
多くの人は「プロンプトの書き方」ではなく、「記事の方向性」が定まっていないことが本質的な問題です。
ソリューションの特徴
Promptman は、以下の3ステップで「実行用プロンプト」を生成します:
Phase 1: 意図解析
ユーザーのテーマから、3つの方向性を提示
- 体験共有型(実務ログ寄り)
- 設計・考え方整理型
- 問題提起・視点提供型
Phase 2: 構成確認(Agentic挙動)
媒体別ルールに基づいた構成案を提示
「この構成で進めて良いですか?」と必ず確認
Phase 3: プロンプト生成
ユーザーが無料AIに貼るだけの「実行用プロンプト」を出力
❌ 記事本文は生成しない
✅ 生成させる設計図を提供
差別化ポイント:
- APIコスト完全ゼロ(ユーザー自身のAPIキー使用)
- 媒体別ルールの厳密な適用(note/Zenn/Xで完全に異なる出力)
- 「AIに依存しない」UX設計
🏗️ システムアーキテクチャ
全体構成図
┌─────────────────────────────────────────┐
│ ユーザー (ブラウザ) │
└────────────────┬────────────────────────┘
│
↓ HTTPS
┌─────────────────────────────────────────┐
│ GCP Cloud Run (PHP + Ollama) │
│ ┌──────────────────────────────────┐ │
│ │ Promptman API │ │
│ │ - IntentAnalyzer (意図解析) │ │
│ │ - PromptBuilder (プロンプト生成) │ │
│ │ - MediaRules (媒体別ルール) │ │
│ └──────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────┐ │
│ │ LLM Adapter Layer (切り替え) │ │
│ │ - Ollama (デフォルト) │ │
│ │ - Gemini API (ユーザーキー) │ │
│ │ - Claude API (フォールバック) │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ ユーザーが自分のAI (ChatGPT/Claude等) │
│ で実行用プロンプトを使用 │
└─────────────────────────────────────────┘
技術スタック
| レイヤー | 技術 | 選定理由 |
|---|---|---|
| フロントエンド | PHP + Vanilla JS | シンプル・高速開発 |
| バックエンド | PHP 8.3 | 開発速度・Cloud Run対応 |
| LLM | Gemini API | 無料枠・高速・日本語品質 |
| ローカルLLM | Ollama (Llama3.2) | 開発環境・コスト削減 |
| インフラ | GCP Cloud Run | スケーラビリティ・0スケーリング |
| ストレージ | Secret Manager | APIキー安全管理 |
データフロー
1. ユーザーがテーマ入力
↓
2. LLM (Gemini) が意図解析
- user_position: EC実務者
- purpose: 情報共有/問題解決/視点提供
- abstraction_level: low/medium/high
↓
3. 三択を提示(プロンプト実行はしない)
↓
4. ユーザーが選択
↓
5. 媒体別ルールを適用して構成案生成
- note: 体験→気づき→思考
- Zenn: 課題→解決→実装
- X: 問題提起→気づき→余韻
↓
6. 「この構成で進めますか?」確認
↓
7. 実行用プロンプトを生成
(この時点でも本文は生成しない)
💡 工夫した点
1. LLMアダプターパターン
複数のLLMプロバイダーを抽象化し、.env 一行で切り替え可能:
// lib/LLMFactory.php
public static function create() {
$provider = EnvLoader::get('LLM_PROVIDER', 'ollama');
switch ($provider) {
case 'ollama':
return new OllamaLLM(...);
case 'gemini':
return new GeminiLLM(...);
case 'claude':
return new ClaudeLLM(...);
}
}
メリット:
- 開発: Ollama(無料・無制限)
- 本番: Gemini(高速・無料枠)
- 将来: Claude(高品質)
2. 媒体別ルールの厳密な適用
data/media_rules.json で定義:
{
"note": {
"tone": {
"sentence_length": "medium",
"assertiveness": "low"
},
"forbid": ["aggressive_claims", "strong_calls_to_action"]
},
"zenn": {
"tone": {
"sentence_length": "short",
"emotional_words": "forbidden"
},
"forbid": ["storytelling", "vague_phrases"]
}
}
結果: 同じテーマでも、note版とZenn版で全く異なるプロンプトが生成される。
3. ユーザーAPIキー対応
サーバー側のコストを完全にゼロ化:
// ユーザーがブラウザで設定
localStorage.setItem('llm_source', 'user_gemini');
localStorage.setItem('user_gemini_key', 'AIza...');
// APIリクエスト時にヘッダーで送信
headers: {
'X-User-Gemini-Key': userApiKey
}
スケーラビリティ:
- ユーザー数が増えてもAPIコストゼロ
- ユーザー自身の無料枠を活用
4. Agenticな振る舞い
一般的なAIツール:
入力 → 即座に生成 → 出力
Promptman:
入力 → 意図解析 → 三択提示 → ユーザー選択
→ 構成案生成 → 確認 → ユーザー承認
→ プロンプト生成
効果: ユーザーの思考を崩さず、主導権を保つ
🎬 デモ
デモ動画(3分)
[YouTube埋め込み予定]
スクリーンショット
Phase 1: 意図解析後の三択
![三択画面のスクリーンショット]
Phase 3: 生成された実行用プロンプト
![プロンプト出力画面のスクリーンショット]
実際の出力例
同じテーマ「AIの設定を見直したら業務が楽になった話」で、媒体を変えた場合:
note 版プロンプト(抜粋)
【トーン】
・一人称使用OK
・柔らかいが誇張しない
・断定を避け、余白を残す
【構成】
1. AIを使っていて感じていた違和感
2. 設定を見直すきっかけ
3. 実際に変えた前提や考え方
...
Zenn 版プロンプト(抜粋)
【文体】
・断定的
・感情表現なし
・技術メモとして成立すること
【構成】
1. 課題
2. 原因分析
3. 解決アプローチ
...
→ 完全に異なるプロンプトが生成される
🚀 今後の展開
v0.5(実用化フェーズ)
- 履歴保存機能(Pro版)
- プロンプトテンプレート管理
- チーム共有機能
v1.0(スケールアップ)
- Vertex AI Gemini API への移行
- Vertex AI Vector Search(過去プロンプト検索)
- Llamaパッケージ配布(ヘビーユーザー向け)
v2.0(用途拡張)
- 企画書・提案書への対応
- 多言語対応
🎓 学んだこと
技術面
-
LLMアダプターパターンの有用性
- 開発中に3回もLLMプロバイダーを切り替えたが、コード修正は
.env一行のみ
- 開発中に3回もLLMプロバイダーを切り替えたが、コード修正は
-
Cloud Run + Ollama の可能性
- メモリ8GB、CPU2で十分動作
- コールドスタート対策は必要だが、実用レベル
-
ユーザーAPIキー方式の効果
- サーバー側APIコストゼロ
- スケーラビリティ無限大
ビジネス面
-
「生成しない」ことの価値
- ユーザーは「AI依存」を嫌う
- 「設計図を提供する」方が受け入れられやすい
-
媒体別ルールの重要性
- note/Zenn/X で求められる語調は全く異なる
- この差分を自動化することに大きな価値がある
📚 参考リンク
- GitHub: https://github.com/oskr-radiance/Promptman/
- Gemini API: https://ai.google.dev/
- Ollama: https://ollama.com/
🙏 謝辞
このプロジェクトは、Google Cloud Hackathon 2026 の課題として開発しました。
Gemini API の無料枠と高速なレスポンスのおかげで、7日間という短期間で実装を完成させることができました。
審査員の皆様、ありがとうございました。
カテゴリ: Idea
トピック: gch4
作成日: 2026年2月15日
Discussion