いつものAIチャットで業務改善!生成AIと対話しながら作る業務効率化ツール

塩澤涼
2025.10.28
最近ではAIに色々なドキュメントや、プログラムのコードなどを書いてもらうことがすっかり浸透してきました。
特にソフトウェア開発の分野では、生成AIを用いたエディタやツールを使用し、開発者がAIと対話しながら作業を進めるスタイルが当たり前になってきています。開発やプログラミングに直接携わっていなくとも、AI関連の話題でCursorやClaude Codeなどといったツールの名前を聞いたことがある方も多いのではないでしょうか?
ただ、業務上のちょっとした作業を効率化したいだけといった場合には、高機能な専用ツールの導入はハードルが高く、かえって手間がかかってしまうことも少なくありません。
そんなときは、普段使い慣れたChatGPTやGeminiなどのチャット画面から直接やり取りをして、AIに簡単なツールを作ってもらってみてはいかがでしょうか。この方法は生成AIが本格的に普及し始めた当初から存在しますが、AIを利用する専門的なツールが数多く登場している現在でも、複雑な導入手順や事前準備が不要で、手間やコストをかけずに作業を進められるという利点があります。
そこで、今回は具体的な例として「Slackへの自動投稿と、それに対するレスポンスの収集を行うBot」を、生成AIと対話しながら作成していきます。プログラミングの経験や知識がない方でも、AIに相談しながら作業を進められるので、ぜひ最後までご覧ください。
補足:事前の注意点
実際に作業を始める前に、いくつか注意しておきたい点があります。特に、業務でツールを利用する際は、以下の点にご留意ください。
▼社内・組織内のルールの確認
企業や組織内で試す場合は、利用するAIツールや連携させるサービス(Google、Slackなど)が社内のセキュリティポリシーやガイドラインに準拠しているか、必ず情報システム部門などに確認の上で行ってください。
▼テスト用の環境の用意
いきなり実際の業務で利用しているチャンネルで試すのではなく、まずは自分だけが参加しているプライベートチャンネルや、テスト用に作成した環境で動作を検証することをお勧めします。万が一の意図しない投稿やエラーを防ぐためにも、失敗しても影響のない範囲で試しましょう。
Botの全体像の設計
まず、どのようなBotを作成したいのか、その全体像を決めます。AIに作業を依頼する際は、この設計図が非常に重要になります。内容がうまく整理できない場合は、設計段階からAIに相談してみるのも良いでしょう。
今回は、以下のような機能を持つSlack Botを作成してみます。
- 週1回、決められたチャンネルにメッセージを投稿
- あらかじめGoogleスプレッドシートに書いておいた投稿文を読み取ってSlackに投稿
- スレッドへの返信を自動収集
- 投稿したメッセージのスレッドに付いたコメントをまとめて取得し、スプレッドシートに記録
つまり「投稿→反応を集める→可視化」という一連の流れを、自動化する仕組みです。用途としては、例えばチーム内で定期的にアンケート(今週のふりかえり、業務の困りごとなど)を行い、それに対するレスポンスを収集・蓄積していく――といったケースを想定しています。
また、Botの動作環境と利用するツールには以下を使用することにします。いずれも個人でも無料で利用可能で、複雑な設定なども少なめなので、今回のような作業を試す際にはうってつけです。
- Google スプレッドシート: 投稿する内容を管理したり、収集したデータを記録したりする場所として使います。
- Google Apps Script (GAS): Botを実際に動かすプログラムの実行環境です。Googleアカウントがあれば無料で利用でき、スプレッドシートなどGoogleの各種サービスとの連携がスムーズに行えます。
- Slack App: Slackへ様々な機能や自動化、Botなどを追加できます。Slack Marketplaceから既製品のアプリを導入できるほか、自分で独自のアプリを作成して利用することもできます。
AIと対話しながらBotを作成
Botの全体像が定まったら、実際に生成AIと対話しながら作成していきましょう。今回は、AIとして「Gemini 2.5 Pro」を使用しています。
実際の作業は、要件をまとめて伝えて完成品を丸ごと出力してもらうのではなく、ステップごとに分けて相談していくことにします。一つひとつ細かいステップに分けてAIに質問を投げかけることで、得られた回答をもとに作業を進めていくことができます。その都度、自分のイメージと実際の出力結果とのズレを確認しながら、適宜修正を加えつつ進めることができるため、精度の高いBot構築が可能になります。
補足:AIとのやり取りを同じチャットで続けるか、個別に分けるか
GeminiやChatGPTと対話する際、基本的に別々のチャットの内容は相互に参照されません。
会話の目的に応じて「同じチャットを続けるか」「新しいチャットを始めるか」を使い分けることで、より的確な回答を得やすくなります。
■同じチャットで会話を続ける場合
それまでのやり取りをAIが読み込み可能な範囲で参照して回答するため、文脈を踏まえた結果が得られやすいのが特徴です。
例えば、同じコードに関するやり取り――AIが作成したコードで発生したエラーを解消したい、といった場合であれば、最初にコードを作成してもらったチャットで続けるとスムーズです。
一方で、過去の会話に内容が引っ張られてしまい、今知りたい内容と関係のない情報が回答に混ざってしまうこともあります。
■新しいチャットで会話を始める場合
過去のやり取りに影響されずに、まっさらな状態でAIと対話を始められます。
明確にチャットを分けることで関係のない情報が混ざらず、トピックに沿った回答が得られやすくなります。
ただし、過去のチャットの内容を踏まえて回答してほしい場合は、そのチャットでのやり取りや、必要な情報を改めて伝える手間がかかります。
※ChatGPTの「チャット履歴を参照する」機能やGeminiの「「パーソナルコンテキスト」」機能のように、ある程度自動で過去のチャットを参照する機能が利用できる場合もあります。しかし、これらの機能では必要な情報が常に参照されるとは限らず、情報の参照のされ方も異なるため、やり取りの文脈を確実に管理したい場合は上記の使い分けが必要です。
今回はそれぞれのやり取りを別々の新しいチャットで開始し、エラーの修正などは元のチャットに続けて返信する形で進めました。
管理用のGoogle スプレッドシートを用意する
はじめに、Botが投稿するメッセージなどのデータを管理するためのスプレッドシートを準備します。どのような構成にすれば良いか、AIに相談してみましょう。
【プロンプト例】
Slack BotがSlackへ投稿するためのテキストや、投稿後のスレッドへの返信を蓄積・集計するためのGoogle スプレッドシートを作成したいです。
Botの処理はGoogle Apps Scriptで行い、投稿先チャンネルや投稿タイミングはGAS側で管理する予定です。
この目的を達成するために必要な「投稿管理シート」と「返信集計シート」の構成案(最低限必要な列など)を提案してください。
【AIからの回答例】
AIからの提案を参考に、今回は以下のような構成の2つのシートを持つスプレッドシートを作成しました。
「投稿管理」シート
AIの提案のうち、今回は投稿先チャンネルはGAS側で固定にしたいので、「投稿先チャンネルID」は省きました。また、「投稿ステータス」は処理の「完了」「エラー」の状態のみを記録する想定にしています。
-
- 投稿ID: 投稿を識別するためのID(今回は連番で記録)
- 投稿内容: Slackに投稿するメッセージ本文
- 投稿ステータス: GASの処理の完了状況(完了もしくはエラー)
- メッセージTS: 投稿したメッセージをSlack上で識別するためのタイムスタンプ(後でスレッドを特定し、コメントを収集するために使用)
- 投稿日時: GASの処理が完了した日時
「返信集計」シート
「元の投稿ID」はメッセージのタイムスタンプと役割が重複するため、こちらも省いています。
-
- メッセージTS: どの投稿への返信か紐付けるためのタイムスタンプ
- 返信内容: 返信コメントの本文
- 返信者ID: 返信したユーザーのID
- 返信者名: 返信したユーザー名
- 返信日時: 返信コメントが投稿された日時

Slack Appを作成し、GASと連携させる
次に、Slackにメッセージを投稿したり、内容を読み取ったりするための「Slack App」の作り方をAIに尋ねてみます。
【プロンプト例】
Google Apps ScriptからSlackへのメッセージの投稿・取得を行うBotを作成したいです。
BotがSlackで行う必要のある操作として、以下の二つを想定しています。
- 特定のチャンネルにメッセージを送信
- そのメッセージについたスレッドのコメントの情報(返信内容、返信者のIDと名前)を取得
この2つの機能を実現するために必要なSlack Appの作成手順を教えてください。
【AIからの回答例】
AIの回答に従い、以下の手順でSlack Appを作成しました。
- Slack APIのWebサイトで新しいAppを作成します。
- 「OAuth & Permissions」メニューで、Botに必要な権限(スコープ)を設定します。今回はメッセージを投稿するchat:write、チャンネルの履歴を読み取るchannels:historyとgroups:history、ユーザーの情報を取得するためのusers:readを追加します。
- 作成したAppをワークスペースにインストールし、生成された「Bot User OAuth Token」をコピーしておきます。このトークンが、GASからSlackを操作するためのキーになります。
- Botを投稿先のチャンネルに追加します。今回はテスト用のチャンネルを用意し、そのチャンネルに招待しました。

メッセージを自動投稿するスクリプトを作成する
いよいよGASでプログラムを書いていきます。やりたいことを具体的に伝え、コードを生成してもらいましょう。
【プロンプト例】
Google Apps Scriptで、スプレッドシートとSlackのBotを使用して、Slackへメッセージを投稿したいです。
Bot用のSlack Appは作成済みで、`chat:write`、`channels:history`、`groups:history`、`users:read`の権限を追加しています。
また、スプレッドシートは以下の構成となっています。
スプレッドシートの構成:
* A列: `投稿ID`: 投稿を識別するためのID(連番)
* B列: `投稿内容`: Slackに投稿するメッセージ本文
* C列: `投稿ステータス`: GASの処理の完了状況(完了もしくはエラー)
* D列: `メッセージTS`: 投稿したメッセージのタイムスタンプ
* E列: `投稿日時`: GASの処理が完了した日時
以上の情報をもとに、以下の処理を行うコードを作成してください。
処理内容:
1. 「投稿管理」シートを確認し、「投稿ステータス」が「完了」になっていない行を見つけます。
2. その行の「投稿内容」をSlackチャンネルに投稿します。
3. 投稿に成功したら、そのメッセージのタイムスタンプ(ts)と投稿日時をシートの対応する行に記録し、投稿ステータスを「完了」に更新します。
- エラーになった場合は投稿ステータスを「エラー」にします
【AIからの回答例】
AIが生成したコードをGASのエディタに貼り付け、変数名やシート名などが自分の環境と合っているか確認します。また、AIの回答通り'SLACK_BOT_TOKEN'と'SLACK_CHANNEL_ID'をGASのスクリプトプロパティに設定しました。
スレッドの返信を収集するスクリプトを作成する
最後に、前回の投稿に付いたコメントを収集する機能を追加します。今回は処理をシンプルにするため、既に一度コメントの収集が行われたスレッドは対象外とする(一度処理を行った後にスレッドに新しい返信が付いていても取得しない)方針としています。
【プロンプト例】
Google Apps Scriptで、スプレッドシートとSlack Appを使用して、Slackに投稿されたメッセージへの返信を収集する処理を作成したいです。
Bot用のSlack Appは作成済みで、`chat:write`、`channels:history`、`groups:history`、`users:read`の権限を追加しています。
SlackのBotトークン、投稿先チャンネルIDはそれぞれ`'SLACK_BOT_TOKEN'`、`'SLACK_CHANNEL_ID'`という名称でGASのスクリプトプロパティに保存済みです。
また、スプレッドシートは以下の構成となっています。
スプレッドシートの構成:
* 投稿管理シート
* A列: `投稿ID`: 投稿を識別するためのID(連番)
* B列: `投稿内容`: Slackに投稿するメッセージ本文
* C列: `投稿ステータス`: GASの処理の完了状況(完了もしくはエラー)
* D列: `メッセージTS`: 投稿したメッセージのタイムスタンプ
* E列: `投稿日時`: GASの処理が完了した日時
* 返信集計シート
* A列: `メッセージTS`: どの投稿への返信か紐付けるためのタイムスタンプ
* B列: `返信内容`: 返信コメントの本文
* C列: `返信者ID`: 返信したユーザーのID
* D列: `返信者名`: 返信したユーザー名
* E列: `返信日時`: 返信コメントが投稿された日時
以上の情報をもとに、以下の処理を行うコードを作成してください。
処理内容:
1. 「投稿管理」シートの中で、まだ「返信集計」シートへ「メッセージTS」が記載されていない投稿を特定します。
* 既に「返信集計」シートへメッセージTSが記録されているスレッドは、新しい返信が付いている可能性を考慮せずスルーします。
2. その投稿の「メッセージTS」を使い、Slackの該当するスレッドに付いているすべての返信を取得します。
3. 取得した各返信について、親投稿の「メッセージTS」と、各返信の「返信者ID」「返信者名」「返信内容」「返信日時」を「返信集計」シートに1行ずつ記録します。
【AIからの回答例】
生成されたコードを既存のスクリプトに追記し、投稿から集計までの一連の処理が完成しました。
作成した一連の機能が正常に動作するか確かめる
ここまでの作業で目的とする機能が一通り作成できたので、改めて各機能に問題がないか試してみます。実際の使用時の状況を想定し、例えば以下のような複数のパターンで動作を確認しましょう。
【「投稿管理」シートからの投稿】
- 投稿内容が1件のみ記載されている状態で、メッセージの投稿が行われ、該当の行に結果が反映されるか
- 投稿内容が複数記載されている状態で、メッセージ1件のみの投稿が行われ、該当の行に結果が反映されるか
- 投稿内容が1件も記載されていない状態で、メッセージの投稿が行われないか
【「返信集計」シートへの返信内容の収集】
- スレッドに返信が1件もついていない場合にエラーにならないか
- スレッドに返信が1件だけついている場合に正常に返信が取得できるか
- スレッドに返信が複数件ついている場合に正常に返信が取得できるか
もし動作の問題や懸念点が見つかった場合は、その問題がクリアになるまでAIに相談と修正を繰り返します。例えば今回は返信集計の際に以下のような問題が発生したため、修正を行いました。
発生した問題と対応策の例
指定したメッセージタイムスタンプが見つからないというエラーの発生
Slackのメッセージタイムスタンプの仕様は、整数部分10ケタ+小数点以下6ケタの合計16ケタとなっています。Googleスプレッドシートでは、仕様上、合計15ケタを超える数値をそのまま扱うことができません。そのため、セルの表示形式が「数値」になっていると、タイムスタンプの末尾の値が丸められてしまいます。
今回は対策として、タイムスタンプの記録列の表示形式を「書式なしテキスト」に設定し、文字列として扱うようにすることで、投稿完了後にタイムスタンプの値がそのまま記録されるようにしました。
返信が1件もついていない投稿に対して、返信取得処理が毎回実行され続けてしまう問題
返信の取得を行う条件として「返信集計」シートへのタイムスタンプの記載有無のみで判定しているため、返信が1件もついていない投稿があった場合、返信の収集処理が毎回実行され続けてしまうという問題があります。
この点の対策として、AIに相談し、「4.Slack Appを作成し、GASと連携させる」の処理で集計対象のメッセージを特定する際に「投稿日が現在から過去1週間以内のもの」に絞り込むという判定を追加しました。
返信が多数ある場合に取得が途中で止まってしまう問題
メッセージに多数の返信が付いている場合、Slack APIで一度に取得できる返信数の上限を超えてしまい、すべての返信を取得できないことがあります。
ここもAIに相談し、「4.Slack Appを作成し、GASと連携させる」で作成したスクリプトへ上限を超える返信が付いていた場合の処理を追加してもらうことで対処しています。
GASのトリガーを設定し、定期的に自動で実行されるようにする
各スクリプトが正常に機能することを確認できたところで、作成したスクリプトを自動で動かすために、GASの「トリガー」を使用します。「時間主導型」の「週」単位で起動するトリガーを設定すれば、毎週決まった曜日にBotが自動で実行されるようになります。
今回作成したGASでは、ステップ3(メッセージの投稿)とステップ4(スレッドの返信の収集)が独立した処理となっているため、それぞれのメインの関数を個別のトリガーで設定しました。
完成
一通りの作業を終えて、Slackへの投稿とそれに対するリアクションを収集するBotが完成しました。設定したトリガーによって、今後は毎週決まった曜日に「スプレッドシートの未投稿メッセージをSlackに投稿する処理」と「過去の投稿への返信を収集してスプレッドシートに記録する処理」が自動的に実行されます。
プログラミングや開発の経験がない方でも、WebブラウザからAIと対話することで、こうしたツールを簡単に作成することができます。
「構想はあるけどコードが書けない」
「普段繰り返し行っている作業の自動化を試してみたい」
「GASやSlack APIを触るのは初めてだけど、業務で使ってみたい」
といった場合に、まずはAIに相談してみることで一歩踏み出せるかもしれません。
AIを利用する際に重要になるのは、AIに何をしてほしいのかをできるだけ明確にイメージし、伝えることです。事前に実現したい処理の流れが整理できているのであれば、具体的な目的と手順をAIに伝えていくことで、目的に合った出力を得ることができます。逆に、処理の流れが曖昧な場合でも、まずはその曖昧な点をAIに相談して実現したいことを整理するところから始めれば、同様に目的とする結果を得やすくなります。
最後に注意点として、このように手軽にツールを作成できるようになった反面、気づけば用途不明のアプリやスクリプトが増えてしまう可能性があります。作成したツールは作りっぱなしで放置せず、不要になったものは都度削除するなど、適切に管理していくことも忘れないようにしましょう。
弊社では、日々のちょっとした作業の効率化から、大規模な業務フローの改修まで、業務の改善に関する様々なご相談を承っております。
お困りごとがございましたら、是非お気軽にお問い合わせください。

この記事を書いたライター
塩澤涼
カスタマーサポート業務に10年以上従事し、対応窓口の体制構築や運用管理をはじめ、FAQの設計・改善、Zendeskをはじめとするサポートツールの導入・設定まで幅広く携わる。 また、GoogleスプレッドシートやGoogle Apps Scriptを活用したデータ管理や自動化、ブラウザ拡張機能の開発も手掛けるなど、技術的視点を活かした問題解決を得意としている。
