生成AIストリーム
「Claude 4」が作った自家用スキャナーエージェントが家族に大好評
保存したPDFを整理してDiscordで連絡する「AgentScanner」
2025年7月11日 11:51
今回の「生成AIストリーム」は「窓の杜」らしくPC自作ソフトの紹介です。自作ソフト、といってもGoogle Apps ScriptでScansnapで保存したPDFを整理してDiscordで連絡する、というめちゃくちゃ便利なアプリを「Claude Sonnet 4」を使ってあっという間に自分で開発しました、という話です。
最強すぎるScanSnap ix100と連れ添って10年
みなさん、ScanSnap iX100をご存知でしょうか。2014年にPFUから発売されたモバイルスキャナーです。重さ400gで電池内蔵、さらにクラウドサービス対応。片面シートスキャナーですが、家庭のダイレクトメールや回覧板の保存共有、領収書の保管など、大変役に立ちます。
10年以上前に発売された機種ですが、とくに後継機種もなく、現在も現役で使っています(販売も続いています!)。メーカーのPFUによるクラウドサービスは非常に便利で、スキャンしたPDFにはOCR処理によりファイル名が自動で付与されますし、スマホ連動や、名刺、レシート、会計ソフト、Google DriveやOneDriveをはじめとする各種クラウドファイルサービスに対応しています。
改めて調査してみたのですが、ScanSnap iX100を超える製品が10年ぐらい登場していないことに気づきます。特許か何かでもあるのでしょうか、それともiX100が強すぎて、他の製品が育たないのでしょうか。それというのも、ScanSnapの標準アプリ「ScanSnapCloud」(スマホ版)も、とても便利です。いまだに現役でサービスもメンテナンスが続けられている良い製品です。開発者の皆さんに頭が下がります。
一方でハードウェアのほうは、10年以上使っていると、リチウム電池もだいぶ弱ってきてしまいました。10年前と違って、世の中かなりDXが進んで、多くの文書がPDFになってきていますし、自分だけでなく、家族全員が個々にスキャナを管理するのも大変です。こうなるとPFUや他のメーカーのスキャナーへの浮気や、他のサービスで取得したPDFなども整理も含めて家庭内環境の再構築を検討したくなってきます。
保存したPDFファイルを“家庭内Discord”に通知したい
「Google Drive」へのPDF保存は各社のスキャナーでもできそうなので、手始めに『スキャンしたPDFの整理と通知』に着手することにしました。今までは私個人の「OneDrive」の指定フォルダーに全てアップロードしていたのですが、家族全員がGmailアカウントを持っていますし、なんなら家族共用のGmailアカウントもあります(自治会との連絡などに使っています)。また、一般のご家庭ならあたりまえのように家族全員で使うDiscordサーバーがあるとおもいます。え?ない? 「LINE」や「Slack」はありませんか? ともかく、“家庭内Discord”は家族の円滑で円満なコミュニケーションに重要ですので一刻も早くサーバーを立ち上げましょう。
- 🔗Discord - 楽しみ満載のグループチャットでゲームを
- https://discord.com/
さて一方で、スキャナ各社のソフトウェアはGoogle Driveへのファイル保存はできても、SlackやDiscordへの通知機能は実装されていません。ないならつくるしかない!
「Claude 4」を使ってプロンプト一発でつくります
作りたいものは、こんなふうに、書類をスキャンすると家族で共有しているGoogle Driveに保存され、Discrodでファイル名やサイズの通知が来ます。設定が間違っていた場合のエラー通知などもきちんと表示されるようにします。
実は今回のスクリプトは「Claude 4」の無料アカウントで作りました。
以下のようなプロンプトを入力して「ほぼ一発」でできました。そのまま「Claude 4」に貼り付けてみていただいても構いません。
・Scansnapで特定のディレクトリに新規PDFが保存されるので
・時間トリガーで起動した関数WatchNewFile()を起動して
・新しいファイルIDがきたら(Spreadsheet/Scansnap/シート[PDF]に記載)
・そのファイル名とGoogleDriveのURLを、DiscordのWebhookで伝えるGoogle Apps Script
シート名は[PDF](存在しない場合は新規作成)、WEBHOOK, FOLDER_IDはスクリプトプロパティで取得(ない場合は取得方法をダイアログ表示)、 SpreadsheetIDは自動取得でお願いします。
Scansnapの生成するPDFは「YYYYMMDD_(タイトル).pdf」という形式になります
シート[PDF]のヘッダは
書類日付,作成日時,追加日時,ファイル名,GoogleDriveURL,ファイルID
という順で、書類日付はファイル名の冒頭YYYYMMDD_から取得して「2025/05/31」形式でお願いします。GoogleDriveURLはテキスト形式。
・ユーザーが操作する関数はスプレッドシートのメニュー「Scanner管理」から利用可能にします。
・Discord通知はよりスタイリッシュにemoji満載で
・ユーザがシートを改造・拡張しやすくするため、できるだけセルの列番号をハードコードしない(ヘッダ名称で扱う)。
このプロンプトに対し、「Claude 4」は以下のような回答を返してきました。
スプレッドシートのメニューから操作できるように改良したScanSnap PDF管理システムを作成しました!
🎯 主な機能
📋 スプレッドシートメニュー
スプレッドシートを開くと「ScanSnap管理」メニューが自動で追加されます:
- 📋 設定: Discord WebhookとGoogle DriveフォルダIDを設定
- ⚙️ トリガー設定: WatchNewFile()の自動実行を5分間隔で設定
- 🔍 手動チェック: 即座にファイルチェックを実行
- 🧪 設定テスト: 設定確認とテスト通知を送信
- 📊 統計情報: 登録ファイル数や月別統計を表示
- ❌ トリガー削除: 自動実行を停止
🔧 自動機能
- 自動監視: 5分間隔でPDFファイルを監視
- 重複回避: ファイルIDによる重複チェック
- エラー通知: エラーもDiscordに自動通知
- 統計管理: 月別の登録統計を自動計算
📊 PDFシート機能
- 自動作成: 「PDF」シートが存在しない場合は自動作成
- 整理された記録: 書類日付、作成日時、追加日時など詳細情報を記録
- リンク機能: GoogleDriveURLをクリック可能なリンクに設定
- 視覚的な整理: ヘッダー行の色分けと列幅の自動調整
🚀 使用開始手順
- スプレッドシートにスクリプトを設定
- Google Apps Scriptエディタに上記コードを貼り付け
- 保存して実行権限を付与
- 初期設定
- スプレッドシートの「ScanSnap管理」→「設定」を選択
- Discord Webhook URLとGoogle DriveフォルダIDを入力
- 動作確認
- 「設定テスト」でDiscord通知を確認
- 「手動チェック」でファイル検出を確認
- 自動実行開始
- 「トリガー設定」で5分間隔の自動監視を開始
これで、ScanSnapで新しいPDFが保存されるたびに、自動的に「Google スプレッドシート」へ記録され、Discordに通知されます!
動作確認
「Google スプレッドシート」に[Scanner管理]というメニューが現れました。いい感じのemojiもついて映え映えです。
こんなふうに、書類をスキャンすると家族で共有している「Google Drive」に保存され、Discrodでファイル名やサイズの通知が来ます。ファイル名の文字起こしはScansnapによるものです。
家族の感想
- なにこれ超便利じゃん
- お父さんが占有していたスキャナーをみんなで使えるのいいね
- リンクをクリックするとPDFが見れるの助かる
- 郵便受けで受け取ったDMをとりあえずスキャンして通知できるのいいね
- スキャンしてすぐに確認してリサイクルにできるのいいね
- Discordのチャンネルで後から見ればいいのいいね
- DiscordでもGoogle Driveでも検索できるのうれしい
- 過去のPDFも含めてGoogle Drive上でフォルダで整理する前段として嬉しい
といった評価をいただいております。これでお父さんの株は爆上がりですね。
インストールの詳細な手順についてはこちらで解説しました。
- 🔗「AgentScanner」インストール解説
- https://j.aicu.ai/AgentScannerHowTo
だいたいここまで1時間かからないぐらい! 興味のある人は、表示形式やアイコンを変えたり……凝り始めるといくらでも凝れますが……。AIコーディングを使った日曜DIYとしてはこれくらいが適切なライフハックではないでしょうか。
「ChatGPT」などのAPIと連動して、中身の分析やフォルダーの分類、ファイル名の変更通知などを自動化してみてもいいと思います。
その場合はこのコードを拡張するというよりは、新規でGoogleAppsScript (.gs)を作って、該当のフォルダーIDを監視して処理をするようなスクリプトにするといいと思います。Google Apps Scriptには一度に処理できる時間の上限がありますので、AIエージェントとしていい感じに動作するような仕掛けを考えてみてください。
フィードバックは、しらいはかせ(X@o_ob)か、Githubリポジトリまでどうぞ。
- 🔗aicuai/GenAI-Steam · Discussions · GitHub
- https://github.com/aicuai/GenAI-Steam/discussions
以上、ストリーム感のあるAIライフハックでした!