2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

支援相談員さんとのやり取り、行政・事業所とのメール連絡、Discordでの情報共有。

それぞれ単体なら小さな作業なのですが、毎回やっていると地味に負担が大きいです。
AI電話が禁止される昨今、ログを残すためにもメールは必須です。

特に困っていたのは、Gmailで作成したメール内容を、支援相談員さん向けにショートメールで共有したい場面でした。

GmailではGeminiを使って文面作成ができます。
一方で、GoogleメッセージはGemini非対応です。

そのため、

  • Gmail用の文章を作る
  • その内容を要約する
  • ショートメール用に短くする
  • Discord用には少し読みやすく整える
  • いつ、誰に、何を送ったか記録する

という作業のために、別途AIを立ち上げたり、手作業でメモしたりする必要がありました。

「これはブラウザだけで完結する小さな業務ツールにできるのでは?」

と思い、Claude Desktopに相談しながら、
Google Apps Script + HTML + Gemini API + スプレッドシートで簡易ツールを作ってみました。

この記事では、実装してみて分かったこと、ハマったこと、そして「完璧に動かなくても運用が楽になる」という話を書きます。


作りたかったもの

作りたかったのは、以下のような流れのツールです。

目標は大きく3つです。

  1. Gmail用のメール文面を作成する
  2. その内容を要約し、共有先ごとの文面に変換する
  3. 送受信・共有内容をスプレッドシートに残す

最初から本格的な業務システムを作るつもりはなく、
「自分が毎回困っている手間を少しでも減らす」ことを目的にしました。


なぜGAS + HTMLにしたのか

Claude Desktopに相談したところ、候補として以下の2つを提案されました。

  • GAS + HTML
  • 単一HTMLファイル

今回は、スプレッドシートとの連携やGoogleアカウント上で完結できることを重視して、
GAS + HTMLを選びました。

理由は以下です。

  • ブラウザだけで使える
  • Googleスプレッドシートに記録しやすい
  • Gemini APIキーをサーバー側に置ける
  • 個人用の小さな業務ツールとして始めやすい
  • デプロイすればURLからアクセスできる

Apps ScriptのWebアプリとして公開すれば、
Gmailやスプレッドシートを開く感覚で使えるのが魅力でした。


全体構成

構成はかなりシンプルです。

Google Apps Script
├── Code.gs        // Gemini API呼び出し、スプレッドシート保存
└── Index.html    // 入力フォーム、タブUI、コピー処理

使うものは以下です。

用途 技術
UI HTML / CSS / JavaScript
バックエンド Google Apps Script
文章生成 Gemini API
記録 Googleスプレッドシート
実行環境 GAS Webアプリ

UI側では3つのタブを用意しました。

  1. メール作成
  2. 要約・共有文面
  3. 送受信・共有管理

スプレッドシートの列設計

記録用のスプレッドシートには、以下の列を用意しました。

ID / 記録日時 / 種別 / 宛先 / 件名 / 本文 / 要約 / 共有先 / 共有日時 / ステータス / 備考

この設計にした理由は、あとから見返したときに、

  • いつの話か
  • 誰宛ての話か
  • 何を送ったか
  • 共有済みか
  • 相談員さんに伝えたか

を確認しやすくするためです。

メールはGmail内を検索すれば見つかります。
ただ、行政・福祉・事業所などのやり取りは、細かい経緯が積み重なるので、毎回Gmail検索をするのが地味に大変です。

そのため、最終的には「本文すべて」よりも、
要約とステータスが一覧できることが重要だと感じました。


実装した主な機能

1. Gmail用メール文面の作成

最初の画面では、以下を入力します。

  • 差出人の立場
  • 宛先
  • 目的
  • 盛り込みたい内容
  • トーン

入力するとGemini APIに送信し、件名と本文を作成します。

例えば、以下のような内容です。

目的:
退職手続きに関する確認

盛り込みたい内容:
3月に転居し、4月に相談員と面談後、事業所へメールで退職を伝えた。
受理の返信ももらっている。
しかし5月分の工賃明細が以前の住所に届き、現在の住所へ転送された。
来月から別のA型事業所に勤務予定なので、二重登録などがないか不安。

このような内容から、行政や事業所向けの丁寧なメールを作成します。


ハマりポイント1:Geminiが立場を取り違える

最初に困ったのが、差出人と宛先の立場が逆になる問題でした。

例えば、本来は「私が福祉課へ送るメール」を作りたいのに、
Geminiが「事業所側が利用者へ送る文章」のように書いてしまうことがありました。

これは、プロンプト内で「誰が誰に送るのか」を明示していなかったことが原因でした。

そのため、UIに以下の入力欄を追加しました。

差出人(あなた)の立場・所属

そして、プロンプトにも視点固定の指示を追加しました。

'【最重要・視点の固定】\n' +
'・このメールを書いて送るのは「差出人」です。文面は必ず差出人の一人称・立場で書いてください。\n' +
'・「宛先」は受け取る相手です。差出人と宛先の立場を絶対に入れ替えないでください。\n' +
'・差出人や宛先の役割を勝手に推測・変更しないこと。\n' +
'・入力に書かれていない事実を創作して追加しないこと。\n'

AIに文章作成を任せる場合、
「丁寧に書いて」だけでは足りません。

特に福祉・行政・契約・手続きのような文脈では、
誰が、誰に、どの立場で書いているかを固定することが大事でした。


ハマりポイント2:生成結果を編集できない

最初のUIでは、生成されたメール本文や要約文をdivで表示していました。

しかし、実際に使うとすぐに問題が出ました。

AIの文章は便利ですが、そのまま送るとは限りません。

  • 少し柔らかくしたい
  • 事実関係を補足したい
  • 言い回しを自分の言葉にしたい
  • SMS用にさらに短くしたい

という場面が多いです。

そのため、生成結果は読み取り専用ではなく、
inputtextareaで編集できるように変更しました。

<textarea id="s_summary" style="min-height:90px"></textarea>
<textarea id="s_sms" style="min-height:70px"></textarea>
<textarea id="s_discord" style="min-height:90px"></textarea>

これにより、

  1. Geminiに下書きを作らせる
  2. 自分で直す
  3. 直した内容をコピー・保存する

という流れにできました。

AIに全部任せるというより、
AIにたたき台を作ってもらい、人間が最後に整える形です。

この方が安心して使えました。


ハマりポイント3:.textContent.valueの違い

表示用のdivを編集可能なtextareaに変更したことで、
JavaScript側も修正が必要になりました。

divの場合は以下で取得できます。

element.textContent

しかし、inputtextareaの場合は以下です。

element.value

この変更を忘れると、

  • コピーできない
  • 保存できない
  • 次の画面に引き継げない

という問題が起きます。

そこで、コピー処理は共通関数にしました。

function getFieldText(id){
  var el = document.getElementById(id);
  return ('value' in el) ? el.value : el.textContent;
}

小さな変更ですが、
「表示だけのUI」から「編集できるUI」に変えたときに必要な修正でした。


ハマりポイント4:スプレッドシートに記録されない

スプレッドシート連携も一発ではうまくいきませんでした。

特に困ったのは、データがあるはずなのに管理画面側に表示されないことです。

原因確認のために、_debugCheck()という確認用関数を追加しました。

function _debugCheck() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  Logger.log('スプレッドシート名: ' + (ss ? ss.getName() : 'null'));
  Logger.log('スプレッドシートID: ' + (ss ? ss.getId() : 'null'));

  const sheet = ss.getSheetByName('メール管理');
  if (!sheet) {
    Logger.log('「メール管理」シートが存在しません');
    return;
  }

  Logger.log('最終行: ' + sheet.getLastRow());
  Logger.log('listRecords件数: ' + listRecords().length);
}

実行ログでは、スプレッドシート名、ID、最終行、件数は確認できました。

つまり、スプレッドシート側にはデータが存在していました。

ただ、再デプロイしてもWebアプリ側に反映されない部分があり、
今回は完全解決までは至りませんでした。


それでも運用は楽になった

最終的に、スプレッドシートへの完全自動転送はうまくいきませんでした。

ただし、そこで終わりにはしませんでした。

要約文や共有文面は生成できていたので、
シートへの記録だけ手動で行う運用に切り替えました。

結果として、かなり楽になりました。

具体的には、

  • メール内容を短くまとめる負担が減った
  • 支援相談員さん向けのショートメール文面に悩まなくなった
  • Discord共有用の文章も作りやすくなった
  • いつ何があったかをシートで追えるようになった
  • Gmailを役所名や事業所名で毎回検索しなくてよくなった

という効果がありました。

ツールとしては未完成でも、
日々のストレスを減らすという意味では十分に役立ちました。


実際に便利だったポイント

1. 「文章を考える負担」が減る

行政や福祉関連のメールは、言い回しに気を使います。

強すぎてもよくない。
曖昧すぎても伝わらない。
感情的になりすぎても困る。

その中間の文面を毎回考えるのは、かなり疲れます。

Geminiに下書きを作ってもらうことで、
ゼロから文章を組み立てる必要がなくなりました。


2. 共有先ごとに文体を変えられる

同じ内容でも、共有先によって文体は変わります。

共有先 文体
Gmail 丁寧・正式
ショートメール 短く、要点のみ
Discord 少し読みやすく、共有向け
スプレッドシート 後から確認しやすい要約

この変換を毎回手作業でするのは大変です。

AIに任せることで、
「同じ内容を、別の場所に合わせて言い換える」作業がかなり楽になりました。


3. ログがあると安心する

福祉保健関連のやり取りでは、

  • いつ連絡したか
  • どこに伝えたか
  • 返事が来ているか
  • 相談員さんに共有済みか

が重要になります。

頭で覚えておくには細かすぎます。

スプレッドシートに残しておくことで、
「たしか送ったはず……」という不安が減りました。


今回の学び

AIツールは「文章生成」より「文脈整理」に効く

今回やってみて感じたのは、
AIは単に文章を作るだけでなく、文脈整理に向いているということです。

特に、

  • 長いメールを短くする
  • 要点を抜き出す
  • 共有先に合わせて言い換える
  • 記録用に整える

という作業に向いていました。

プロンプトでは「視点」を明示する

メール生成では、視点の取り違えが致命的です。

そのため、

このメールを書いて送るのは誰か
受け取るのは誰か
どの立場で書くのか
入力にない事実を足してよいのか

を明示する必要がありました。

特に「支援する側」「支援される側」、「依頼する側」「受ける側」がある文脈では、
AIが推測で補完すると危険です。

完成しなくても、運用改善にはなる

今回のツールは、最終的に完全自動化まではできませんでした。

それでも、

  • 要約を作る
  • SMS文面を作る
  • Discord文面を作る
  • シートに記録する

という一連の流れはかなり楽になりました。

完璧なシステムを作る前に、
「一番しんどい作業だけでも減らす」ことには大きな価値があります。


今後やりたいこと

今後改善するなら、以下をやってみたいです。

  • スプレッドシートへの保存処理を安定させる
  • Gmail本文を直接読み込めるようにする
  • 共有先を自由に追加できるようにする
  • ステータス管理をもう少し見やすくする
  • 送信済み・返信待ち・完了などを色分けする
  • 個人情報を扱うため、保存内容のルールを明確にする

特に個人情報を含む可能性があるため、
APIに送る内容やスプレッドシートに残す内容は、運用上の注意が必要です。


まとめ

今回は、GAS + HTML + Gemini API + スプレッドシートで、
メール作成・要約・共有文面作成・ログ管理を行う小さなツールを作ってみました。

完全な自動化には至りませんでしたが、
日々の連絡業務のストレスはかなり減りました。

特に、GmailではGeminiが使える一方で、
ショートメールやDiscordへの共有では別途要約・言い換えが必要になるという課題に対して、
「一度作った文章を、複数の共有先向けに変換する」仕組みはかなり便利でした。

業務改善というと大きなシステムを想像しがちですが、
実際にはこういう小さな不便を減らすツールこそ、日常では効きます。

完璧な完成品ではなくても、
「昨日より少し楽になる」ツールは作る価値がある。

今回の一番の学びは、そこでした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?