🎯

記事を生成しない記事生成ツール『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(用途拡張)

  • 企画書・提案書への対応
  • 多言語対応

🎓 学んだこと

技術面

  1. LLMアダプターパターンの有用性

    • 開発中に3回もLLMプロバイダーを切り替えたが、コード修正は .env 一行のみ
  2. Cloud Run + Ollama の可能性

    • メモリ8GB、CPU2で十分動作
    • コールドスタート対策は必要だが、実用レベル
  3. ユーザーAPIキー方式の効果

    • サーバー側APIコストゼロ
    • スケーラビリティ無限大

ビジネス面

  1. 「生成しない」ことの価値

    • ユーザーは「AI依存」を嫌う
    • 「設計図を提供する」方が受け入れられやすい
  2. 媒体別ルールの重要性

    • note/Zenn/X で求められる語調は全く異なる
    • この差分を自動化することに大きな価値がある

📚 参考リンク


🙏 謝辞

このプロジェクトは、Google Cloud Hackathon 2026 の課題として開発しました。
Gemini API の無料枠と高速なレスポンスのおかげで、7日間という短期間で実装を完成させることができました。

審査員の皆様、ありがとうございました。


カテゴリ: Idea
トピック: gch4
作成日: 2026年2月15日

Discussion