このURLは第三者に共有しないでください。
【完全保存版】月額12万円のRPAを断って、自作したら「0円」になった。
【プロローグ】 なぜ、私はRPAを断り、このシステムを作ったのか
接客時間が足りない…という焦り
私は北海道札幌市で、野球用品専門店「スポーツショップ古内」を経営しています。
私たちの強みは、お客様一人ひとりに向き合う「アナログでリアルな接客」です。
しかし、現実は厳しいものでした。
経理、在庫管理、発注業務、そして集客のためのブログ執筆…。
バックオフィスの業務に忙殺され、肝心の「お客様と話す時間」がどんどん削られていく毎日に、私は焦りを感じていました。
夢のツール「RPA」への期待と、詳細な設計図
「なんとかして業務を自動化できないか?」
そう考えた私は、「RPA(ロボティック・プロセス・オートメーション)」の導入を本気で検討しました。
「経理の仕訳」「在庫のアラート」「ECの商品登録」「顧客管理」……。
これらを全て自動化できれば、月額12万円のコストを払ってでも、十分な費用対効果があると考えたのです。
私は、膨大な時間をかけて「RPA要件定義書」や「導入要望書」を作り込みました。
「これさえ実現すれば、バラ色の未来が待っている」そう信じていました。
トライアルで直面した「隠れたコスト」
しかし、いざトライアル(お試し期間)を始めようとした時、私の心の中で強い「No」の声が響きました。
それは、見積書の金額を見たからだけではありません。
「ロボットを育てる手間」に絶望してしまったからです。
RPAは、ただ導入すれば動く魔法の箱ではありませんでした。
ロボットに動きを教えるための「シナリオ」を、人間が一つひとつ作る必要があります。
しかも、相手のサイトのデザインが少し変わっただけで、ロボットは動かなくなります。その度に、また人間が教え直さなければなりません。
「専属スタッフなしで、誰が面倒を見るのか?」
私がやりたかった「完全な自動化」を実現するには、専属のエンジニアがつきっきりで作業しても、早くて半年、下手をすれば1年はかかると分かりました。
私たちのような中小企業に、そんな専属スタッフを置く余裕はありません。
私がやるしかない。でも、そんな時間はどこにもない。
「便利にするためのツールに、私自身が縛り付けられてしまう」
そう気づいた瞬間、私は月額12万円の契約書を破棄しました。
お金の問題以上に、「時間と労力の費用対効果」が見合わなかったのです。
「意地でも無料で、簡単にやってやる」からの逆転劇
RPAの導入を断念した私は、それでも諦めきれませんでした。
「もっとシンプルで、メンテナンスが要らなくて、お金のかからない方法はないのか?」
必死に調べる中で出会ったのが、Googleが無料で提供しているツール「GAS(Google Apps Script)」と、最新のAI「Gemini(ジェミニ)」でした。
プログラミングなんてまともにやったことがない私でしたが、
「高額で複雑なRPAに負けたくない」
「中小企業の底力を見せてやる」
その一心で試行錯誤を繰り返し、ついに完成させたのが、このシステムです。
結果、どうなったと思いますか?
- 月額費用: 12万円 → ほぼ0円
- 構築期間: 半年〜1年 → 数日で稼働
- メンテナンス: 頻繁な修正 → ほぼ放置でOK
このマニュアルは、私がRPAの複雑さに絶望し、汗をかいて作り上げた「中小企業のための武器」のすべてです。
難しい設定は不要です。AIが勝手にやってくれます。
【第0章】 なぜ「経理」でも「在庫」でもなく、最初に「ブログ」を選んだのか?
自動化できる業務はたくさんあります。しかし、私はあえて「ブログ執筆の自動化」を最初のターゲットにしました。
なぜなら、こここそが私たち中小企業が抱える「最大の矛盾」を解決する鍵だったからです。
1. 私たちの収益源は「アナログな時間」にある
私たちのような中小小売店にとって、最大のマネタイズポイントは「お客様と直接接する時間」です。
しかし、その時間を確保しようとすればするほど、後回しにされてしまうのが「ホームページの更新」です。
2. 「30点です」とAIに言われたあの日
多くの企業のホームページは、「最初に作ったまま」で放置されています。
私もそうでした。「立派なサイトを作ってもらったから大丈夫だ」と言い聞かせていました。
しかしある日、妻に言われたのです。
「なんか、全然このお店に行こうってならないね」
ドキッとして、AI(ChatGPT)に自社のURLを読み込ませて点数を聞いてみました。
答えは衝撃の「30点」。
理由は明確でした。情報が古い、更新されていない、動きがない。「廃墟」になりかけていたのです。
3. 「分かってるけど書けない」というジレンマ
「ブログが大事なのは分かってる。でも、書く時間もネタもないんだよ!」
おそらく、多くの経営者の方が私と同じ叫びを心に持っているはずです。
だからこそ、私は決断しました。
「人間がやるべき『アナログ接客』を守るために、人間が一番苦手な『継続的な発信』こそ、ロボットに任せよう」
もし、1時間かけていたブログ執筆が、寝ている間に30記事完了していたら?
単純計算で、生産性は12倍になります。
これ以上の「費用対効果」があるでしょうか?
【第1章】 用意するもの(材料はたった3つ)
スーパーでカレーの材料を買うのと同じです。まずはこれらを揃えてください。すべてWeb上で完結します。
- 1. WordPressのブログ
これから始めるなら WordPressクイックスタート などが簡単です。 - 2. Googleアカウント
Gmailをお持ちならそれでOKです。 - 3. Gemini APIキー(AIを動かすための無料の鍵)
Googleの最強AI「Gemini」を使うための許可証です。
Google AI Studio から取得できます。
【第2章】 下準備編 ~各種「鍵」を入手せよ~
① WordPressの「アプリケーションパスワード」
AIがあなたのブログにログインして記事を投稿するための専用パスワードを作ります。
- WordPressの管理画面へログインします。
- 左メニューの「ユーザー」→「プロフィール」をクリック。
- 一番下までスクロールし、「アプリケーションパスワード名」に適当な名前(例:AI_Blog)を入力して、「新しいアプリケーションパスワードを追加」をクリック。
- 【最重要】 表示された
abcd 1234 efgh 5678のような長いパスワードを、必ずコピーして保存してください。(画面を閉じると二度と見れません!)
② Geminiの「APIキー」
- Google AI Studio にアクセスします。
- 青いボタン「Create API key」をクリック。
- ポップアップで「Create API key in new project」を選択。
- 生成された
AIza...から始まる文字列を、コピーして保存してください。
【第3章】 構築編 ~コピペでシステムを作る~
ここがメインディッシュです。難しいプログラムを書く必要はありません。貼り付けるだけです。
1. スプレッドシートの準備
- Googleスプレッドシートを新規作成します。
- 1行目に以下の見出しを入力してください。
A1:用語/ B1:ステータス/ C1:記事URL
2. プログラム(GAS)の作成
- メニューの「拡張機能」→「Apps Script」をクリック。
- 開いた画面の文字をすべて消して真っ白にします。
- 以下のコードを丸ごとコピーして貼り付けてください。
// ==========================================
// 【設定エリア】ここだけあなたの情報に書き換えてください
// ==========================================
// 1. WordPressのサイトURL(末尾のスラッシュは不要)
const WP_SITE_URL = "https://your-site-url.com";
// 2. WordPressのユーザー名(ログインID)
const WP_USERNAME = "your_username";
// 3. WordPressアプリケーションパスワード(第2章で取得したもの)
const WP_APP_PASSWORD = "abcd 1234 efgh 5678";
// 4. Gemini APIキー(第2章で取得したもの)
const GEMINI_API_KEY = "AIzaSy...";
// 5. 吹き出しに使いたいキャラクター画像のURL
// (WordPressの「メディア」に画像をアップロードして、そのURLを貼ると確実です)
const GLOVEMAN_IMG_URL = "https://your-site-url.com/wp-content/uploads/character.png";
// ==========================================
// 以下、プログラム本体(触らなくてOKです)
// ==========================================
function createAndPostArticles() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const rows = sheet.getDataRange().getValues();
// 1行目はヘッダーなのでスキップ
for (let i = 1; i < rows.length; i++) {
const term = rows[i][0]; // A列: 用語
const status = rows[i][1]; // B列: ステータス
// ステータスが空欄のものだけ処理する
if (term && status === "") {
// ★リトライ機能(Googleが混んでても3回まで粘る)
let success = false;
let retryCount = 0;
let errorMsg = "";
while (!success && retryCount < 3) {
try {
if (retryCount > 0) console.log(`再挑戦中(${retryCount}回目)...: ${term}`);
// 1. Gemini(キャラクター)で記事を書く
console.log(`執筆中...: ${term}`);
const articleData = generateArticleWithGemini(term);
// 2. WordPressに投稿する
console.log(`投稿中...: ${term}`);
const postUrl = postToWordPress(articleData.title, articleData.content);
// 3. 結果をスプレッドシートに書き込む
sheet.getRange(i + 1, 2).setValue("完了"); // B列
sheet.getRange(i + 1, 3).setValue(postUrl); // C列
console.log(`成功! URL: ${postUrl}`);
success = true; // 成功したらループを抜ける
} catch (e) {
errorMsg = e.toString();
// "Overloaded"(混雑)エラー等の場合は待機
if (errorMsg.includes("Overloaded") || errorMsg.includes("overloaded") || errorMsg.includes("503") || errorMsg.includes("The model is overloaded")) {
console.warn(`Googleが混雑中...20秒待機して再挑戦します。 (${term})`);
Utilities.sleep(20000); // 20秒待つ
retryCount++;
} else {
// それ以外のエラーは即停止
break;
}
}
}
// 3回やってもダメだった場合だけエラーを書き込む
if (!success) {
console.error(`あきらめました (${term}): ${errorMsg}`);
sheet.getRange(i + 1, 2).setValue("エラー: " + errorMsg);
}
// 連続投稿制限を避けるため休憩
if (success) {
Utilities.sleep(10000);
}
}
}
}
// Gemini APIを叩いて記事を作成する関数
function generateArticleWithGemini(term) {
// ★最強のデザイン魔法:インラインスタイル
// ここで直接デザインを指定することで、どんなブログテーマでも崩れません。
const bubbleHtml = `
<div style="display: flex; align-items: flex-start; gap: 15px; margin: 30px 0;">
<div style="width: 80px; min-width: 80px; flex-basis: 80px; margin: 0;">
<img src="${GLOVEMAN_IMG_URL}" alt="キャラクター" style="width: 80px; height: 80px; object-fit: cover; border-radius: 50%; border: 2px solid #eee; display: block;">
</div>
<div style="background: #f0f7ff; border-radius: 12px; padding: 20px; flex: 1; position: relative;">
<p style="margin: 0; line-height: 1.6;">ここにセリフを入れる</p>
</div>
</div>
`;
// ★ここがAIへの指示書(プロンプト)です。自由に変えてみてください。
const prompt = `
あなたは「[お店の名前]」の公式キャラクターです。
以下の【用語】について、ブログ記事を書いてください。
【用語】 ${term}
【ターゲット】
- 初心者のお客様。
【執筆の条件】
- キャラクター設定:
- 一人称は「僕」。
- 語尾や口調は、明るく、元気で、頼れる存在。
- 難しい専門用語は使わず、日常生活でイメージできる「例え話」を使うこと。
- 構成:
1. 挨拶
2. その用語のわかりやすい解説
3. アドバイスやポイント
4. まとめ
- 【超重要:吹き出しの使用】
記事の中で、「特に重要なポイント」や「まとめの言葉」を語るときは、
必ず以下のHTML構造を使って、キャラクターが吹き出しで喋っているように見せてください。
▼吹き出しのHTMLテンプレート
${bubbleHtml}
※上記の「ここにセリフを入れる」の部分を、状況に合わせたセリフに書き換えて使ってください。
※記事の中で、少なくとも2回〜3回はこの「吹き出し」を使ってください。
- 重要な指示:
- 記事の最後は必ず、「もしわからないことがあったら、お店に来てスタッフに気軽に聞いてね!」という形で来店を促して終わる。
- 出力形式:
- HTMLタグのみ(<html>や<body>は不要。<h2>, <p>, <ul>, <strong>, および上記の吹き出し<div>タグを使う)
`;
// モデル設定(gemini-2.5-flashを使用)
const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${GEMINI_API_KEY}`;
const payload = {
"contents": [{
"parts": [{"text": prompt}]
}]
};
const options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload),
"muteHttpExceptions": true
};
const response = UrlFetchApp.fetch(url, options);
const json = JSON.parse(response.getContentText());
if (json.error) {
throw new Error("Gemini API Error: " + json.error.message);
}
if (!json.candidates || !json.candidates[0].content) {
throw new Error("Geminiからの応答が空です: " + JSON.stringify(json));
}
const rawContent = json.candidates[0].content.parts[0].text;
return {
title: `${term}とは?わかりやすく解説!`,
content: rawContent
};
}
// WordPressに投稿する関数
function postToWordPress(title, content) {
const endpoint = `${WP_SITE_URL}/wp-json/wp/v2/posts`;
const auth = Utilities.base64Encode(`${WP_USERNAME}:${WP_APP_PASSWORD}`);
const payload = {
"title": title,
"content": content,
"status": "draft", // 下書きで投稿(いきなり公開するなら "publish")
"categories": []
};
const options = {
"method": "post",
"contentType": "application/json",
"headers": {
"Authorization": `Basic ${auth}`
},
"payload": JSON.stringify(payload),
"muteHttpExceptions": true
};
const response = UrlFetchApp.fetch(endpoint, options);
const json = JSON.parse(response.getContentText());
if (json.id) {
return json.link;
} else {
throw new Error("WP投稿エラー: " + (json.message || JSON.stringify(json)));
}
}
3. あなた専用に書き換える
コードの一番上にある 【設定エリア】 の5箇所だけ、あなたの情報に書き換えてください。
書き換え終わったら、画面上の フロッピーアイコン(保存) を押してください。
【第4章】 魔法のスパイス ~吹き出し機能の秘密~
このシステムの最大の特徴は、AIがただ文章を書くだけでなく、「お店のキャラクターが吹き出しで喋る」ことです。
通常、WordPressのデザイン設定は難しいですが、このプログラムには「デザイン崩れを防ぐ魔法(インラインスタイル)」が埋め込まれています。
こんにちは!こんな風に、どんなブログでもキャラクターが喋りだすよ!
【第5章】 実行編 ~ワンクリックでAI店長を召喚する~
毎回プログラムの黒い画面を開くのは面倒ですよね?
スプレッドシートに「スイッチ」を作りましょう。
- スプレッドシートのメニュー 「挿入」 → 「描画」 をクリック。
- 図形アイコンを選び、ボタンっぽい四角を描いて「記事作成」などの文字を入れ、「保存して終了」。
- シートに現れたボタンをクリックし、右上の「︙」→ 「スクリプトを割り当て」。
createAndPostArticlesと入力してOKを押す。
これで完成です!お疲れ様でした!
【使い方】 明日からあなたのルーティン
- スプレッドシートのA列に、記事にしたい「用語(テーマ)」をズラッと書く。
- ボタンをポチッと押す。
- パソコンを閉じて寝る。 💤
翌朝、WordPressを見てください。あなたの分身であるキャラクターが書いた記事が、山のように「下書き保存」されています。
【おわりに】 一本桜の経営を目指して
このシステムを作った目的は、「楽をするため」ではありません。
「人間にしかできない仕事(リアルな接客)」に全力を注ぐためです。
デジタルができることは、デジタルに任せましょう。
そして、浮いた時間と情熱で、目の前のお客様を感動させましょう。
それが、私たち中小企業が大手企業に勝つための、唯一にして最強の戦略です。
(開発協力:Gemini 3 Pro)