皆さんこんにちは、横浜で清掃業を営む49歳、ヤスです。
前回は顔出し不要!YouTubeショート動画の「台本&画像プロンプト」全自動生成
のアプリを作りましたね。
突然ですが、自分のためのお金、自由に使えていますか? 「AIの有料プランに入りたい」「新しいキャンプギアが欲しい」……そんな大人の欲望を満たすための最大の障壁は、クライアントでもエラーコードでもなく、「妻の決裁(お小遣いアップの許可)」ですよね。
そこで今回は、AIの力を使って**「ただ自分が欲しいだけの理由」を「家族の未来と笑顔のための投資」へと見事にすり替え、有無を言わさぬ完璧な『家族稟議書』を全自動で生成するアプリ**を作りました!
途中で「目に見えないゴミ文字(スペース)」が原因の地獄のようなエラーにハマりましたが、それを根本から解決するプロの裏技も盛り込んでいます。中学生でも絶対に動かせるように解説しますので、一緒に作って奥様にハンコをもらいましょう!
【結論】 このアプリの仕組みは、「Dify(AI)」にあなたの本音を入力して凄腕コンサルタントに”家族へのメリット”に翻訳させ、「GAS」を経由してGoogleドキュメントの『稟議書』として全自動作成するという連携プレイです。
最大のポイントは、GASと連携する際によく起きる「フォルダIDのコピペミス(見えない空白が混ざってエラーになる現象)」を完全に防ぐため、「IDを使わず、フォルダの名前で直接探させる」という最新のGASコードを採用したことです。これでエラー発生率はほぼゼロになります!
【手順(ワークフローとGASの作り方)】
ステップ1:GASで「稟議書作成工場」を作る まずはデータを受け取ってドキュメントを作るGAS側の設定です。新規プロジェクトを開き、最初からある文字をすべて消して、以下のコードをコピペしてください。全行に分かりやすい解説をつけています。
JavaScript
// ▼▼▼ Difyからデータを受け取ってドキュメントを作るメインの窓口です ▼▼▼
function doPost(e) {
// もし途中でエラーが起きてもパニックにならず、原因を報告するための安全装置です
try {
// Difyから送られてきたデータ(JSON形式)を、プログラムが読める形に翻訳します
const params = JSON.parse(e.postData.contents);
// 翻訳したデータの中から、AIが書いた「稟議書の本文」だけを変数(箱)に取り出します
const proposalText = params.proposal;
// ★【超重要】IDを使わず、フォルダの「名前」で直接探しに行きます!
const folderName = "奥様説得ツール用";
// Googleドライブ全体から、その名前のフォルダを探し出します
const folders = DriveApp.getFoldersByName(folderName);
// フォルダを入れておくための空の箱を準備します
let folder;
// もしその名前のフォルダが「すでに存在している」なら、それを使います
if (folders.hasNext()) {
folder = folders.next();
}
// もし「存在していない」なら、GASが勝手に新しくフォルダを作ってくれます!
else {
folder = DriveApp.createFolder(folderName);
}
// 作成するGoogleドキュメントのファイル名を決めます(例:【家族稟議書】20260412)
const fileName = "【家族稟議書】" + Utilities.formatDate(new Date(), "JST", "yyyyMMdd");
// 新しいGoogleドキュメントをシステム上に作成します
const doc = DocumentApp.create(fileName);
// 作成したドキュメントの固有番号(ID)を控えておきます
const docId = doc.getId();
// ドキュメントの「本文」を編集するための準備をします
const body = doc.getBody();
// 一番上に、見出しとして稟議書のタイトルをデカデカと書き込みます
body.insertParagraph(0, "■ 家族稟議書(決裁願い)").setHeading(DocumentApp.ParagraphHeading.HEADING1);
// AIが考えた説得力MAXの本文を書き込みます(\n は改行という意味です)
body.appendParagraph("\n" + proposalText);
// 最後に、奥様がハンコを押す(サインする)ためのカッコいい決裁欄を作ります
body.appendParagraph("\n--------------------------------------------------");
body.appendParagraph("【決裁欄】 承認 ・ 却下 ・ 条件付き承認");
body.appendParagraph(" 妻サイン:");
body.appendParagraph("--------------------------------------------------");
// すべての書き込みを終了して、ドキュメントをしっかり保存して閉じます
doc.saveAndClose();
// 先ほど控えた番号(ID)を使って、完成したドキュメントの「ファイル自体」を掴みます
const file = DriveApp.getFileById(docId);
// 掴んだファイルを、「奥様説得ツール用」フォルダの中に移動させます
folder.addFile(file);
// 元々あった場所(マイドライブの一番上)に残っている古いファイルを削除して整理整頓します
DriveApp.getRootFolder().removeFile(file);
// すべて大成功したら、Dify側に「無事に作成完了しました!」という報告を準備します
const result = { status: "success", documentUrl: file.getUrl() };
// 報告データをJSONという形式に整えて、Difyに送信して処理を終わります
return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);
// 安全装置の後半:もしエラーが起きた場合の処理です
} catch (error) {
// 何がダメだったのか、エラーの原因をテキストにして準備します
const errorResult = { status: "error", message: "GASのエラー原因: " + error.toString() };
// エラー内容をDifyに送信して、どこを直せばいいか教えてあげます
return ContentService.createTextOutput(JSON.stringify(errorResult)).setMimeType(ContentService.MimeType.JSON);
}
}
⚠️ 忘れてはいけない「デプロイの儀式」 コードを貼り付けたら、画面右上の「デプロイ」>「新しいデプロイ」を開き、アクセスできるユーザーを**「全員」**にしてデプロイします。最後に発行されるURL(/execで終わるもの)をコピーしてください。
ステップ2:Difyの「開始」ブロック(入力設定) Dify側でワークフローを作成し、開始ブロックに以下の3つの変数を設定します。
item_name(テキスト型):欲しいもの(例:Dify Plusの有料プラン)price(テキスト型):金額(例:月額3,000円)true_reason(テキスト型):欲しい「本当の」理由(例:AIを使ってブログの作業を全部サボりたいから)

ステップ3:Difyの「LLM」ブロック(凄腕コンサルタントAI) あなたの欲望を、家族へのメリットに変換する魔法のプロンプトです。
Plaintext
# 指示
あなたは世界一の交渉人であり、家庭の平和を守る凄腕のコンサルタントです。
夫が「自分のために欲しいもの」を、妻が喜んで「これは家庭のために投資すべきだ!」と錯覚するような、完璧な論理の【家族稟議書】を作成してください。
# 申請内容
・購入希望品:{{#start.item_name#}}
・金額:{{#start.price#}}
・夫の本当の購入理由:{{#start.true_reason#}}
# 構成条件(以下の見出しに沿って出力すること)
1. 【導入】日頃の感謝と、妻の負担をいかに減らしたいかという熱い思い。
2. 【現状の課題】今のままでは家族との時間や、家計にマイナスであることを指摘。
3. 【投資対効果(メリット)】「夫の本当の購入理由」を深読みし、それが結果的に「妻の自由時間の増加」「将来の家計へのリターン」「家族の笑顔」に直結することを3つのポイントで論理的に力説する。
4. 【結び】家庭の未来のための前向きな決裁のお願い。
# 出力形式
・余計な挨拶は不要です。稟議書の本文(テキスト)のみを出力してください。
・丁寧で誠実、かつ少しクスッと笑えるようなユーモアを交えた文体にしてください。

ステップ4:Difyの「HTTPリクエスト」ブロック(GASへ送信)
- メソッド:POST
- URL:ステップ1でコピーしたGASのURL
- ボディ:JSONを選択し、以下を貼り付けます。
JSON
{
"proposal": "{{#llm.text#}}"
}

【まとめ】 設定が完了したら、Difyでテスト実行してみてください! 「ブログ作業をサボってサウナに行きたいから」という身勝手な理由が、Googleドライブを開くと「AI導入により作業が効率化され、週末に妻がゆっくり休める時間と、家族で過ごす笑顔の時間が生み出されます」という、涙ぐましいほど完璧なビジネス文書に生まれ変わっています(笑)。

実は今回、GASのフォルダIDをコピペした際に「目に見えない空白(スペース)」が混ざってしまい、謎のエラーに何時間も苦しめられました。しかし、**「IDがダメなら、名前で直接探させればいい」**というプログラミング思考に切り替えたことで、圧倒的に使いやすい最強のコードが完成しました。
簡単そうに見えて毎度何かしらのエラーが出てくるのはなんでだろう
エラーと格闘して心が折れそうになることもありますが、それを乗り越えた先には「技術の無駄遣い」という最高の大人のエンターテインメントが待っています。完成した稟議書をプリントアウトし、印鑑を持って奥様の前に正座しましょう。技術的成長の証明も相まって、決裁が下りる確率は飛躍的に高まるはずです!
今回もエンタメアプリを作りましたが面白いですね。
xもやってるので是非遊びに来てください。私のエックス
次回も面白いにするか、役に立つ系にするかは未定ですが
何か作ろうと思います。是非お楽しみに!


コメント