紙の予定表を、毎月パソコンに「手で打ち直す」あの作業
紙で配られた来月の予定表を、自分のカレンダーやスプレッドシートに手で打ち直す。ホワイトボードの当番表も、手帳の走り書きも、結局おなじ。
考えなくていい作業のはずなのに、終わるころにはなぜか疲れていて、ちょっと報われない気持ちになる。1件ずつ目で追って、打ち間違えていないか見直して。急いだ日にかぎって日付を1日ずらして入れていて、あとからヒヤッとする。
正直に打ち明けると、これはずっと、わたし自身のことでした。毎月、紙の予定表を見ながらポチポチ打ち直して、「この時間、何に使ってるんだろう」と思っていた側です。
結果から言います(撮って送るだけで、表になる)
いまは、その打ち直しがまるごと消えました。やることはひとつだけ。
紙の予定表を、スマホで撮ってLINEに送る。
それだけで、数秒から十数秒で「日付・予定・時刻」が並んだ表になって、いつものスプレッドシートに追記されます。手で入力するという主作業は、まるごと無くなりました。

今日の話は、この一点だけ = 写真の文字をAIに読み取らせて表にする
「写真を読んで、表にする」。今日はここだけに絞ります。むずかしい仕組みは何も使っていません。
やったのは、AIに一言こう頼んだだけ。「この写真を読んで、日付と予定と時刻の表にして」。読み取りはぜんぶAIの担当です。
正直に言うと、わたしはコードを一行も書いていません。書いたのはAIで、わたしがやったのは、できあがったものを貼り付けて、許可しただけです。
同じものを作りたい人へ(コードは書きません)
コードは自分で書きません。ChatGPTやGeminiのような対話AIに、こう頼むだけです。
LINEに送った写真をAIに読ませて、紙の予定表から「日付・予定・時刻」を読み取り、Googleスプレッドシートに自動で追記する仕組みを、Google Apps Scriptで作ってください。写真の読み取りにはGeminiを使ってください。
読み取れなかった行や、日付が確定できない行は、推測で埋めずに登録を見送り、「ここが読めませんでした」と知らせてください。読み取れた行も、登録したあとに一覧で確認・修正・削除できるようにしてください。
あとは、AIが書いてくれたものを言われたとおりに貼り付けて、初回の許可をするだけ。「貼って、許可しただけ」——これが、このブログのいつものやり方です。
補足:Geminiは、個人がひとりで使うくらいなら無料枠で足ります。ただ、最初のAPIキーの取り方や、初めての許可画面で気後れしないコツは、それだけで一記事ぶんの話。作り方シリーズの別の回でゆっくり案内します。今日は「撮って送るだけで表になる」入り口だけにします。
(おまけ)中身が気になる人へ:写真→表だけの最小サンプル
※本筋は「コードを書かず、上のプロンプトでAIに作らせる」です。ここから下は、仕組みを見てみたい人向けのおまけ。これは“ぽけっと手帳”本体ではなく、写真→表の部分だけを取り出して単体で動く最小サンプルです(自分のGemini APIキーが必要)。
// 【最小サンプル】写真(予定表)をAIに読ませて、日付・予定・時刻をシートに書き出す
// ※「ぽけっと手帳」本体ではなく、"写真→表" の部分だけを取り出した単体サンプルです
// ※Gemini APIキーは無料で取れます(Google AI Studio)。キーは秘密に
const GEMINI_API_KEY = 'ここにあなたのAPIキー';
const MODEL = 'gemini-2.5-flash';
function 写真を表にする() {
// 1) Driveの画像を1枚読む(ファイル名は自分の画像に合わせる)
const blob = DriveApp.getFilesByName('予定表.jpg').next().getBlob();
// 2) AIに「読み取って表にして」と頼む
const prompt = 'この画像は予定表です。日付・予定・時刻を読み取り、'
+ 'JSON配列 [{"date":"YYYY-MM-DD","title":"予定名","time":"HH:mm"}] だけで返してください。'
+ '読めない項目は空文字に。説明文は不要です。';
const res = UrlFetchApp.fetch(
'https://generativelanguage.googleapis.com/v1beta/models/' + MODEL + ':generateContent',
{
method: 'post',
contentType: 'application/json',
headers: { 'x-goog-api-key': GEMINI_API_KEY },
muteHttpExceptions: true,
payload: JSON.stringify({
contents: [{ parts: [
{ text: prompt },
{ inline_data: { mime_type: blob.getContentType(), data: Utilities.base64Encode(blob.getBytes()) } }
] }]
})
}
);
// 3) 返ってきたJSONをスプレッドシートに書き込む
const answer = JSON.parse(res.getContentText()).candidates[0].content.parts[0].text;
const rows = JSON.parse(answer.replace(/```json|```/g, '').trim());
const sheet = SpreadsheetApp.getActiveSheet();
rows.forEach(function (r) { sheet.appendRow([r.date, r.title, r.time]); });
}
正直なところ、手書き文字の読み間違いはあります(だから、あとから直せる)
写真の読み取りは、完璧ではありません。とくに手書きの崩れた字は、AIでもたまに間違えます。
だから、いちばん大事にしたのは「間違えても、あとから気づいて直せる」ことでした。
- あやしい行は、推測で埋めずに登録を見送る
- 同じ予定がすでにあれば、登録前に「これ、入れますか?」と確認してくれる
- 取り込んだあとも、一覧から消せる・直せる
正直に言うと、わたしも一度やらかしました。別の予定表を間違えて送ってしまって、変な行がいくつか入り込んだことがあります。読み取りが少し化けて、そのまま登録されてしまった。でも、一覧から消せたので事なきを得ました。
だから、いちばん大事にしているのは「賢く完璧に読むこと」より、「間違えたときに、後から取り返せること」。任せて安心できる線は、たぶんそこでした。雑に撮って送って、送ったあとに一覧をさっと見ておく。それくらいの付き合い方が、ちょうどいいと思っています。
お金と、正直な実感
費用は、わたしの使い方では0円でした(Geminiの無料枠)。ただし、無料枠には上限があります。あくまで「個人がひとりで、毎月の予定表を数枚読ませる」くらいの範囲の話として読んでください。たくさんの人が一斉に使う前提だと、話は変わります。これで稼いでいるわけでもありません。
毎月の打ち直し——時間にすれば毎回10分ちょっと——が無くなってみて、気づいたことがあります。
消えたのは10分だけじゃなくて、机に向かう前の「また、これをやるのか」という、あの小さな気の重さごと、だったんです。
次回予告:撮った写真を、LINEとつなぐ回(第2回)
撮って送るだけで、紙とデジタルの「打ち直し」の溝が、ひとつ埋まりました。AI秘書「ぽけっと手帳」は、こういう小さな部品の積み重ねでできています。
次回・第2回は、この「撮った写真を、どうやってLINEとつなぐのか」を一つずつ分解していきます。コードが書けなくても、AIに任せて同じところへたどり着けます。
このシリーズのこれまで:AI秘書「ぽけっと手帳」(全体像)/第1回:紙の予定表を撮って送るだけ(写真→表)(この記事)/第2回:LINEに話しかけて予定を登録・一括削除/第3回:許可画面で気後れしないために/第4回:毎朝・前夜・週1の自動通知/第5回:カレンダー/フォトと連携(完結回)/応用編その3:受発注・請求 秘書(受注が来たら、選ぶだけで見積書・請求書のPDFに)/受発注 育てる編①:入金消込・督促・領収書PDF/受発注 育てる編②:受注した瞬間に在庫を押さえる/受発注 育てる編③:発注点アラートと発注書PDF/受発注 育てる編④:月次集計・売上グラフ・会計CSV(最終回)/基礎編:URLひとつで“自分の申込ページ”を作る(Webアプリ)/基礎編:申し込まれた瞬間に、確認メールが自動で返る/基礎編:申し込んだら、控えのPDFが自動で届く/基礎編:申込の控えが、勝手にドライブへ積み上がっていく/基礎編:申込のひとことを、届いた瞬間にAIが仕分ける/基礎編:誰も画面を開いていないのに、毎朝まとめが届く/基礎編:申込が来た瞬間、ポケットのLINEが鳴る(最終回)/応用編その4:申込・予約 秘書(満席の瞬間、ページが自分から閉まる)/申込・予約 育てる編①:キャンセル待ちと自動繰り上げ/申込・予約 育てる編②:承認制とお断り下書き/申込・予約 育てる編③:前日リマインダーと毎朝まとめ/申込・予約 育てる編④:管理ページ(最終回)
#AI秘書 #ぽけっと手帳



コメント