横浜で清掃業を営みながら、IT未経験の状態からDifyを学んでいる49歳のYasuです。このブログでは、私が実際に手を動かしてつまずいたこと、解決できたことを、できるだけ正直に記録しています。
前回は作業日報まとめくん
のアプリを作りましたね。
今回はその応用編として、ちょっとメタなアプリに挑戦しました。「Difyブログ記事ネタ出しくん」です。
やることは、これまで書いてきた記事の一覧をアプリに渡すと、まだ書いていない切り口を分析して、次に書くべき記事ネタを20個提案してくれる、というもの。自分の発信を、AIに支援してもらう仕組みです。今回の新しい挑戦は、LLM(AIの頭脳)を2つ連携させたこと。ところが、この2つをつなぐところで、私はまた深い落とし穴にハマりました。単体で動かすと完璧なのに、全体で動かすと結果が空っぽになる。その原因を一つずつ切り分けていった記録を、今回もまるごとお見せします。
完成イメージ
まず、何ができるのかをお見せします。入力するのは、これまでの記事タイトルの一覧です。
#164 1on1メモを貼るだけ!部下の成長課題分析アプリ
#163 Dify×GAS連携!備品購入申請→稟議書自動生成
#162 銘柄コードを入れるだけ!株価自動取得アプリ
(…以下、これまでの記事を並べる)
これを渡すと、アプリが「どんなテーマが手薄か」を分析し、次の記事ネタを20個、それぞれ「タイトル案」と「狙い」つきで生成して、Googleスプレッドシートに1行で記録してくれます。ネタ帳として溜めていける仕組みです。
アプリの全体像(6ブロック構成)
今回の構成は6ブロック。前回の日報アプリ(4ブロック)より少し増えました。一番の違いは、LLMが2つあることです。
| 順 | ブロック | 役割 |
| ① | 開始 | これまでの記事一覧を貼る入力欄 |
| ② | LLM(分析) | 扱った話題・まだ無い切り口を整理 |
| ③ | LLM(ネタ出し) | 分析を元に記事ネタを20個生成 |
| ④ | コード実行 | 20個を1行ずつのリストに整える |
| ⑤ | HTTPリクエスト | GAS経由でスプレッドシートへ記録 |
| ⑥ | 終了 | 完了メッセージを表示 |
なぜLLMを2つに分けるのか
ここが今回の肝です。「これまでの記事を見て、いいネタを20個出して」と1つのLLMに丸投げすると、深く考えずにありきたりなネタを並べがちです。そこで、まず②で「何を扱ってきて、何がまだ無いか」をじっくり分析させ、その結果を③に渡してネタを出させる。人間でも『現状を整理してから考える』と良いアイデアが出るのと同じで、LLMも考える手順を分けると質が上がります。これを『ステップを分ける』と呼びます。
💡 実践のヒント: いきなり答えを出させず、分析→生成と工程を分けるのは、複雑なタスクでLLMの質を上げる王道テクです。1つのプロンプトに詰め込みすぎていると感じたら、工程を分けられないか考えてみましょう。
① 開始ブロック
入力フィールドを1つ作るだけです。種類は「段落(複数行)」、変数名はarticlesとしました。ここに記事タイトルを貼り付けます。
💡 実践のヒント: 全記事を入れなくても、直近10〜15本で十分いい分析になります。多すぎるとLLMの分析がかえって浅くなることもあります。
② LLM(分析担当・1人目)
記事一覧を受け取り、テーマ分類・厚い領域と手薄な領域・読者の未解決の疑問・活かしきれていない強み、の4項目を分析させます。ここではネタを出させないのがコツです。出力はJSONにせず、箇条書きのテキストのままにします。次の③が読むだけで、コード実行を通さないからです。
💡 実践のヒント: 「この段階ではネタを出さない(次工程で行うため)」と理由つきで明記すると、LLMが分析に集中します。理由つきの指示は、ただの禁止より守られやすくなります。
③ LLM(ネタ出し担当・2人目)
②の分析結果を受け取り、記事ネタを20個生成させます。出力は私の技術ルールどおりバッククォートなしの1行JSONにし、20個を区切り文字で並べます。ここで区切り文字に工夫が必要でした(後述)。
④ コード実行
③が返した『区切り文字で連結された20個』を、1個ずつのリストに切り分けて、番号つきの読みやすいテキストに整えます。
⑤ HTTPリクエスト&⑥ 終了
⑤は前回の日報アプリとほぼ同じで、GASを受付窓口にしてスプレッドシートへ記録します。⑥の終了ブロックで「20個記録しました」と完了を伝えて完成です。
区切り文字の工夫:コロン1つでは危ない
20個のネタを1つの文字列にまとめて④に渡すとき、区切り文字の選び方が地味に重要でした。最初はネタ同士を「|」、タイトルと狙いを「:」で区切ろうとしました。でも、タイトルや狙いの文章中に「:」が出てくると、④で分割したときにズレてしまいます。
そこで、タイトルと狙いの区切りを「::」(コロン2つ)にしました。文章中にまず出てこない珍しい記号にすることで、安全に切り分けられます。出力形式はこうです。
{“netas”:”タイトル1::狙い1|タイトル2::狙い2|…|タイトル20::狙い20″}
💡 実践のヒント: 区切り文字は「データの中身に絶対出てこない記号」を選ぶのが鉄則です。迷ったら、|| や :: のように記号を2つ重ねると安全性が上がります。
ここからが本番:つなぎの罠との格闘
配線を組んでテスト実行したら、エラーは出ず「成功(SUCCESS)」。でもスプレッドシートを見ると、ネタが空っぽ。『1.(狙い:)』とだけ記録され、個数は1。20個出るはずが、空のものが1個だけ。ここから原因を切り分ける旅が始まりました。
切り分け1:③のネタ出しLLMを単体テスト
まず③だけを単体でテスト実行しました。すると、ネタが20個、正しいJSON形式で完璧に出力されました。つまり③のプロンプトもコードも正常。問題はもっと手前にある、と分かりました。
💡 実践のヒント: 「全体で動かない」ときは、ブロックを1つずつ単体テストして、どこまでが正常かを切り分けましょう。犯人を絞り込めれば、解決はぐっと早くなります。
切り分け2:②の分析LLMの出力を確認
次に②(分析担当)の『最後の実行』を確認。ここも正常で、テーマ分類など4項目の分析をきちんと出していました。②も③も単体では正常。ということは、犯人は『つなぎ』か『最後のコード実行』に絞られます。
切り分け3:③の本番出力を確認
全体実行したあとの③の出力を確認すると、こちらも20個のJSONを正しく返していました。②正常、③正常、つなぎも正常。残った容疑者は、ただ一つ。最後の④コード実行です。
真犯人:④コード実行の入力変数のつなぎ間違い
④の入力変数arg1を確認したところ、ここが③(ネタ出し=LLM 2)ではなく、②(分析=LLM)につながっていました。LLMが2つあるせいで、私はarg1のつなぎ先を取り違えていたのです。④は③の20個のネタではなく、②の分析テキストを受け取っていた。だから正規表現で『netas』を探しても見つからず、空を返していたわけです。
arg1のつなぎ先を、正しく『LLM 2のtext』に直しました。すると——全体実行で、ついにスプレッドシートにネタが20個ずらりと並び、個数も20になりました。長い切り分けの旅が報われた瞬間です。
💡 実践のヒント: LLMやブロックを複数置くと、変数のつなぎ先を取り違えやすくなります。LLM・LLM 2 のように似た名前が並ぶときは、つなぐたびに『これは何番のブロックか』を指差し確認しましょう。
切り分けの教訓:単体で動くのに全体で動かない時
今回いちばんの学びは、『単体で動くのに全体で動かない』ときの考え方です。エラーが出ず成功するのに結果がおかしい——これは一番やっかいなパターンですが、ブロックを1つずつ単体テストして『どこまで正常か』を確かめれば、必ず犯人にたどり着けます。今回の切り分けの流れを表にまとめます。
| 確認した場所 | 結果 | 分かったこと |
| ③を単体テスト | 20個出た | ③のプロンプト・コードは正常 |
| ②の最後の実行 | 分析4項目出た | ②も正常 |
| ③の本番出力 | 20個出た | ②③のつなぎも正常 |
| ④の入力arg1 | ②につながっていた | これが真犯人。③へ直す |
もう一つの学び:ネタの質はプロンプトで決まる
無事に20個出たのですが、最初のネタは正直『微妙』でした。清掃業の業務アプリ(在庫管理、顧客管理…)ばかりが並び、抽象的なタイトルが多かったのです。原因は、③のプロンプトで『清掃業の実務×Difyの具体例を半数以上』と縛りすぎたこと。私のブログは『清掃業の業務システム』ではなく『IT未経験者がDifyを学ぶ過程』が主役なのに、そこからズレていました。
そこで③の方針を3点直しました。業務アプリ縛りを外してDify自体の機能・つまずき・解決を主軸にする。抽象的なタイトルを禁止し、具体的な機能名・数字・失敗の状況を必ず入れる。実際に書いてきた記事タイトルをお手本として見せる。これだけで、『Dify設定5つの基本ミスと解決策』『遭遇する5つのエラーとその解決法』のような、ぐっと自分らしい具体的なネタに変わりました。
💡 実践のヒント: ネタ出しAIは『20個中3〜4個使えれば勝ち』の道具です。完璧を求めてプロンプトをいじり続けるより、刺さったネタを実際に書くほうが健全。質を上げたいなら、数を20個から10個に減らすと、水増しが減って一つ一つが濃くなります。
プロンプト全文(③ネタ出しLLM・改善後)
改善後の③のネタ出しプロンプトを掲載します。②の分析を受け取る変数は、必ずメニューから選んで挿入してください(手打ちはつなぎミスのもとです)。
# 役割
あなたは、個人ブログの企画が得意なコンテンツ編集者です。
読者の検索意図と筆者の強みを掛け合わせ、「読まれて、かつ筆者にしか
書けない」記事ネタを生み出すことを得意としています。
# 筆者の前提
– 横浜で清掃業を営む49歳、IT未経験からDifyを独学中
– 強み:清掃業の実務という現場 × ゼロから学ぶ正直な記録
– 読者層:Difyを学び始めた初心者〜中級者
# これまでの記事一覧
{{#開始.articles#}}
# 前工程の分析結果(これを最大限に活用すること)
{{#LLM.text#}} ← メニューから②のtextを選んで挿入
# ネタ出しの方針
– 「Difyの機能・つまずき・解決法」を主軸にする(業務アプリの紹介に偏らない)
– 筆者が実際に書いてきた記事のような、具体的で引きのあるタイトルにする
– 抽象的なタイトル(「〜を向上させる方法」等)は禁止
– 具体的な機能名・数字・失敗の状況のいずれかを必ずタイトルに入れる
– 「清掃業の実務」は主役にせず、筆者らしさの味付け程度にとどめる
– 分析で「手薄」とされた領域を最優先で狙う
– 初心者がつまずきやすい「お助け系」も必ず混ぜる
# 出力形式(厳守)
– 記事ネタを20個提案すること
– 下記JSONを「1行」で出力すること
– バッククォート(“`)や前置き・後書きを一切付けないこと
– 20個のネタは半角の「|」で区切ること
– 各ネタは「タイトル::狙い」の形にすること
– 値の中に波カッコ{ }やダブルクォート”を含めないこと
{“netas”:”タイトル1::狙い1|…|タイトル20::狙い20″}
コード全文(④コード実行)
import re
def main(arg1: str) -> dict:
m = re.search(r'”netas”:”(.*?)”‘, arg1)
text = m.group(1) if m else “”
netas = text.split(“|”)
lines = []
for i, n in enumerate(netas):
parts = n.split(“::”)
title = parts[0] if len(parts) > 0 else n
aim = parts[1] if len(parts) > 1 else “”
lines.append(f”{i+1}. {title}(狙い:{aim})”)
result = “\n”.join(lines)
return {“netas_text”: result, “count”: str(len(netas))}
※ ④の入力変数arg1は、必ず③(LLM 2)のtextにつなぐこと。出力変数はnetas_textとcountの2つを、コードのキーと一字一句そろえて作ること。今回はここの取り違えが最大のハマりどころでした。

テスト結果のサンプル
改善後のプロンプトで生成し、スプレッドシートに記録された20個の一部です(抜粋)。
作成日時:2026/06/10 18:00 / 個数:20
1. Dify設定5つの基本ミスとその解決策(狙い:初心者が陥りがちな設定ミスを解消)
6. 初心者必見!Difyで遭遇する5つのエラーとその解決法(狙い:初めて使う際のエラー対策)
9. Dify学習の失敗談:3つのつまずきとその教訓(狙い:筆者の学びの過程から得た教訓を共有)
18. Difyを使ったアプリ開発の初歩的な失敗と対処法(狙い:初心者が陥りやすい失敗と対策)
業務アプリの羅列だった最初の出力に比べ、『つまずき×解決』という自分のブログらしいネタが並ぶようになりました。

まとめ
今回の最大の学びは2つです。1つは、複数のブロックを連携させると『つなぎ』でつまずきやすいこと。特にLLMを2つ置くと変数のつなぎ先を取り違えやすく、しかもエラーは出ず『成功なのに結果が空』という分かりにくい形で現れます。こういうときは、ブロックを1つずつ単体テストして『どこまで正常か』を切り分けるのが、遠回りに見えて一番の近道でした。
もう1つは、ネタの質はプロンプト次第で大きく変わること。最初の微妙なネタも、方針を3点直し、お手本を見せ、縛りを調整するだけで、見違えるように良くなりました。AIに丸投げするのではなく、こちらが『どういう切り口がほしいか』を具体的に伝えることが、良い出力への近道です。
IT未経験から始めた私でも、LLM2つの連携という一歩進んだ構成を、つまずきながらも完成まで持っていけました。そんなに難しいアプリではないのに相変わらずエラーを出してます
まだまだですね。頑張ります!
次におすすめの記事
【Dify×WordPress】ブログにAIを住まわせよう! コピペだけで設置できる「埋め込みチャットボット」の作り方
xもやってるので良かったら見に来てください
次回も是非お楽しみに!


コメント