📝

Claudeと小泉構文メーカーを作って2ヶ月で1.3万回使われた話

に公開

はじめに

個人開発で作った「小泉構文メーカー」が、リリースから2ヶ月で13,000回も使われるサービスになりました。AIを使って日本語の面白さを再発見できるツールとして、多くの方に楽しんでいただいています。

この記事では、Google Gemini APIを活用したテキスト生成サービスの開発プロセスと、想定以上にバズった要因について振り返ります。

開発背景

「雪が積もるって事は、雪が降っているって事なんですよ」

「今のままではいけないと思っています。だからこそ日本は今のままではいけないと思っている」

小泉進次郎氏の独特な論理展開、通称「小泉構文」。何かを言っているようで何も言っていない、でも妙に印象に残る不思議な魅力があります。

「この奥深い小泉構文の世界を、もっと身近に体験できたら面白いのでは?」

そう考えて、AIという最先端技術をあえて"無駄遣い"し、日本語の面白さを再発見できるサービスを作りました。

本記事について

今回のサービス開発および記事執筆は、Claude(Anthropic社のAI)との協業で進めました。AI時代の新しい開発スタイルの実践例として参考になれば幸いです。

自己紹介

ホネグミ代表、応用情報技術者の資格を持つエンジニア×マーケターです。これまでIT系の会社役員を4年、独立して4年目になります。クライアントワークでは「こうしたい」を技術で形にすることを専門としていますが、最近は個人開発でAIを「無駄に」使った社会風刺的なサービスも作っています。

https://zenn.dev/5naokichi/articles/8f9446a136a874

サービス概要

https://hone-gumi.com/koizumi/

「お腹が空いた」と入力すると、「お腹が空いているということは、つまり空腹だということなんです。これは意外に知られていない事実ですが、空腹の時というのは、お腹が空いている状態なんですね」といった小泉進次郎風のトートロジー(同語反復)を生成します。

技術スタック

  • フロントエンド: HTML5, CSS3, Vanilla JavaScript
  • API: Google Gemini API (複数モデル使用)
  • バックエンド: WordPress + PHP
  • 通信: Fetch API + WordPress Ajax

開発の背景

きっかけ

先行して開発していた「政治家言い訳メーカー」で、政治家の様々な発言パターンを研究していました。その中で小泉進次郎氏特有のトートロジーの魅力に気づき、これを特化したサービスとして独立させることにしました。

https://hone-gumi.com/seijika-iiwake/

設計思想

最も重視したのはシンプルさです。当初は複数の選択肢を用意していましたが、「小泉構文」という明確なコンセプトがあるため、選択をなくして一つの結果が返ってくる仕様にしました。

Gemini API の活用

API選定理由

Google Gemini APIを選んだ理由は、無料枠が非常に充実していることでした。

無料枠の内訳(2025年7月31日14時30分時点):

  • gemini-2.0-flash-lite: 200リクエスト/日
  • gemini-2.0-flash: 200リクエスト/日
  • gemini-1.5-flash: 50リクエスト/日

合計450リクエスト/日で運用できています。

フォールバック機能の実装

複数モデルを順次試すフォールバック機能を実装しました。

function call_gemini_api_with_fallback($prompt) {
    $models = [
        'gemini-2.0-flash-lite',
        'gemini-2.0-flash',
        'gemini-1.5-flash'
    ];
    
    foreach ($models as $model) {
        $result = call_gemini_api($prompt, $model);
        if ($result['success']) {
            return $result;
        }
        error_log("Model {$model} failed, trying next...");
    }
    
    return ['success' => false, 'error' => 'All models failed'];
}

フロントエンド実装

基本的な構成

Vanilla JavaScriptとFetch APIを使用して、シンプルな実装を心がけました。

async function generateKoizumi() {
    const text = inputText.value.trim();
    if (!text) {
        alert('変換したい文章を入力してください。');
        return;
    }
    
    toggleLoadingState(true);
    
    try {
        const response = await fetch('/wp-admin/admin-ajax.php', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            body: `action=koizumi_generate&text=${encodeURIComponent(text)}`
        });
        
        const result = await response.json();
        
        if (!result.success) {
            throw new Error(result.data?.message || 'APIエラーが発生しました');
        }
        
        displayResult(result.data.koizumi_text);
        updateUsageCounter();
        
    } catch (error) {
        showErrorMessage(error.message);
    } finally {
        toggleLoadingState(false);
    }
}

UX向上の工夫

例文ボタンの実装

初めて利用する方でも、すぐに小泉構文の世界を体験できるよう例文ボタンを用意しました。

const exampleBtns = document.querySelectorAll('.example-btn');
exampleBtns.forEach(btn => {
    btn.addEventListener('click', function() {
        inputText.value = this.getAttribute('data-example');
        inputText.focus();
        
        // 視覚的フィードバック
        this.style.background = '#fd7e14';
        setTimeout(() => {
            this.style.background = '#2c5aa0';
        }, 500);
    });
});

WordPress での実装

Ajax ハンドラー

WordPressの標準的なAjax機能を活用しました。

add_action('wp_ajax_koizumi_generate', 'handle_koizumi_generate');
add_action('wp_ajax_nopriv_koizumi_generate', 'handle_koizumi_generate');

function handle_koizumi_generate() {
    if (!isset($_POST['text']) || empty(trim($_POST['text']))) {
        wp_send_json_error(['message' => '入力テキストが空です']);
        return;
    }
    
    $input_text = sanitize_text_field($_POST['text']);
    $prompt = create_koizumi_prompt($input_text);
    $result = call_gemini_api_with_fallback($prompt);
    
    if ($result['success']) {
        wp_send_json_success(['koizumi_text' => $result['text']]);
    } else {
        wp_send_json_error(['message' => 'API呼び出しに失敗しました']);
    }
}

利用回数カウンター

リアルタイムで利用回数を表示する機能も実装しました。

function update_koizumi_counter() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'koizumi_counter';
    
    $wpdb->query("UPDATE $table_name SET count_value = count_value + 1 WHERE id = 1");
    $count = $wpdb->get_var("SELECT count_value FROM $table_name WHERE id = 1");
    
    echo $count;
    wp_die();
}

運用で学んだこと

API制限への対応

現在は1日100〜200人程度の利用があり、API制限に達することが増えました。そのため以下のメッセージを表示しています。

このメッセージにより、ユーザーに状況を分かりやすく伝えつつ、AIサービスの仕組みについて理解してもらえています。

成果と反響

数値的成果

  • 利用回数: 13,000回(2ヶ月で)
  • 1日平均利用者: 100〜200人
  • SEO効果: 「小泉構文メーカー」でGoogle検索1位獲得

ユーザーからの評価

SNSでの共有も多く、「思ったよりも精度が高い」という評価をいただいています。単純なテンプレート置換ではなく、AIが文脈を理解して自然な小泉構文を生成している点が評価されているようです。

技術的な学び

1. APIの無料枠活用

複数のモデルを組み合わせることで、無料枠内で安定したサービス提供ができることを実証できました。

2. シンプルさの価値

過度な機能追加よりも、シンプルで直感的な操作性の方がユーザーに評価されることを学びました。

3. エラーメッセージの重要性

技術的な制約を、ユーザーにとって分かりやすい言葉で説明することで、不満ではなく理解を得られることを実感しました。

今後の展望

技術的改善

  • レスポンス速度の向上
  • キャッシュ機能の実装
  • より詳細なログ管理

機能追加検討

  • 生成履歴の保存機能
  • お気に入り機能
  • APIの有料プラン検討

まとめ

個人開発したWebサービスが2ヶ月で1万回使われるのは、正直予想外でした。成功要因として以下が挙げられます:

  1. 明確なコンセプト: 「小泉構文」という分かりやすいテーマ
  2. シンプルなUI/UX: 余計な機能を削ぎ落とした設計
  3. 安定した技術基盤: 複数APIでのフォールバック機能
  4. 適切なコミュニケーション: エラー時の分かりやすい説明
  5. 時事性: 話題性のあるコンテンツ

AIを活用した個人開発サービスの参考事例として、同じような挑戦をされる方の役に立てれば幸いです。

補足:プロンプトエンジニアリングについて

小泉構文の特徴を分析し、適切な変換ルールをプロンプトで指示することで、自然な構文生成を実現しています。プロンプトの詳細は企業秘密ですが、トートロジーの構造パターンを体系化することがポイントでした。

参考リンク

Discussion