おはようございます。まさきんです。
学校から配られるプリントは、いまだに紙が中心です。行事の日程、提出物の締め切り、持ち物。情報の種類も多く、うっかり見落とすと後で困ります。
そこで、プリントをOCRで読み取り、内容ごとにカレンダーとリマインダーへ自動的に振り分ける仕組みを作りました。今回はAPI呼び出しの実例まで含めて、具体的に紹介します。
きっかけは「見た記憶はあるのに内容を忘れる」こと
プリントは一度目を通しても、その場では覚えたつもりになります。ただ、1週間後には内容を忘れています。冷蔵庫に貼ったまま、締め切りを過ぎてしまうこともありました。
「見る」ことと「忘れずに実行する」ことは別の話です。なので、見た内容を仕組みの中に落とし込む部分を自動化することにしました。
仕組みの流れ
やっていることは次の3段階です。
- プリントをスキャンし、OCRで文字データに変換する(2段組みのレイアウトにも対応)
- 内容を「行事」か「やること(提出物・締め切り)」かに分類する
- 分類結果を、それぞれ適したアプリにAPI経由で自動登録する
行事はカレンダーへ、やることはリマインダーへ。役割ごとに置き場所を分けているのがポイントです。
OCR部分の工夫
学校のプリントはA4の2段組みレイアウトが多く、そのままOCRにかけると行の途中で左右の文章が混ざってしまうことがあります。なので、先に画像を左右2つに分割してから、それぞれ別にOCRへ渡しています。
from PIL import Image
def split_two_columns(image_path):
img = Image.open(image_path)
width, height = img.size
left = img.crop((0, 0, width // 2, height))
right = img.crop((width // 2, 0, width, height))
return left, right
この分割だけで、認識精度がかなり改善しました。もし読み取り結果を見て、まだ左右の文章が混ざっているようなら、2分割ではなく3分割にする、あるいは見出しの位置を手がかりに切る範囲を調整する、といった対応をしています。読み取り結果は文字データだけでなく、必ず元のプリント画像とも見比べて確認します。表組みや罫線はOCRで崩れやすく、特に日付と曜日の組み合わせを間違えるとカレンダー登録で致命的なミスにつながるためです。
分類のルール
行事とやることを見分ける基準を、次のように整理しています。
| 種類 | 判断基準 | 登録先 | 色分け |
|---|---|---|---|
| 行事(要参加) | 保護者の参加が必要な日程 | カレンダー | 赤 |
| 締め切り・支払い | 提出物や集金の期限 | カレンダー+リマインダー | オレンジ |
| 持ち物・準備 | 前日までに用意するもの | リマインダー | なし |
| 毎日の持ち物 | 筆箱・ノートなど日常的なもの | 登録しない | - |
分類に迷う項目は、原則「両方に登録するほうがマシ」という考え方にしています。後から不要なら消せますが、登録し忘れると気づかないままになるからです。
この仕組みは、結局スマホの中で動いています。カレンダーもリマインダーも、通知が届く先は僕のスマホです。仕組みを支える土台として、料金プランも一度見直してよいのではないでしょうか。
カレンダー登録の実例
行事はGoogleカレンダーのAPIで登録しています。色分けにはcolorIdというパラメータを使い、参加必須の行事は赤(colorId: "11")、締め切り系はオレンジ(colorId: "6")を指定しています。
title: "◯◯小: 運動会"
start.date: "2026-05-23"
end.date: "2026-05-24" # 全日イベントはendを翌日にする
description: "プリント該当箇所の要約"
colorId: "11" # 保護者参加が必要なので赤
colorIdは数値ではなく文字列として渡す必要があり、ここを数値型で渡すとAPIエラーになるので注意しています。時刻が決まっている行事(保護者会14時からなど)は、全日イベントではなく開始・終了の時刻を指定して登録します。
登録前には、同じタイトル・同じ日付のイベントがすでに存在しないか確認しています。学年だよりと別の配布物の両方に同じ行事が書かれていることがあり、確認を省くと同じ予定が重複登録されてしまうためです。
リマインダー・タスクへの登録と、あえての二重登録
締め切りや持ち物は、タスク管理アプリとリマインダーアプリの両方に、同じタイトルで登録しています。一見冗長ですが、意図的にそうしています。
python3 things_bridge_client.py add \
--title "◯◯小: 書道セット注文 (4/17まで)" \
--when "2026-04-17" \
--tags "学校,子ども,お金" \
--notes "キャッシュレス決済。申込書のQRから。"
タスク管理アプリは、チェックリストとして構造化して管理するのに向いています。一方でリマインダーアプリは、音声アシスタント経由や標準の通知でもふと目に入りやすいという特性があります。ツールの得意分野が違うので、あえて重複させています。
同じ内容を1か所にしか登録しないと、そのアプリを開かなかった日は情報ごと存在しないのと同じになります。二重に持たせることで、見落としのリスクを下げています。ただし、二重登録によるノイズを避けるため、リマインダー側に登録する前には既存の一覧を取得して、同名のものがすでに無いかを必ず確認しています。
リマインダーの既存一覧を確認する(重複防止)
→ 同名のリマインダーが無ければ、タスク管理アプリと同じタイトル・同じ期日で新規登録する
タイトルを一字一句揃えておくと、後から両方を突き合わせて確認したいときにも探しやすくなります。
日付の年号が省略されている問題
学校のプリントは「4月15日(水)」のように、年号が省略されていることがほとんどです。今の年度から年を補って登録する必要がありますが、3月に配られたプリントに「4月」と書かれている場合は、翌年度の4月を指している可能性を必ず検討します。
また、曜日を書き添える処理をする場合は、必ず日付から曜日を計算して機械的に組み立てるようにしています。人手や記憶で曜日を当てはめると、簡単にずれるからです。
やってみて感じたこと
一番助かっているのは、「見たけど忘れる」がなくなったことです。読み取った時点でカレンダーやリマインダーに反映されるので、あとは通知に従うだけになりました。
ただ、OCRの精度が完璧というわけではありません。特に手書きの補足事項が入っているプリントは、読み取りにくいことがあります。そういう場合は無理に自動化を通さず、自分の目で確認してから登録するようにしています。
こういう人に向いている
- 学校からの紙のプリントを、うっかり見落としがちな人
- カレンダーとタスク管理を使い分けている人
- OCRやAPI連携を使った小さな自動化に興味がある人
まとめ
プリントの内容を「行事」と「やること」に分類し、それぞれ適した場所に自動登録する仕組みを作りました。色分けや二重登録、重複チェックといった地味なルールを決めておくだけで、情報の扱いがかなり整理されたと感じています。
紙の情報をどう仕組みに取り込むかは、地味ですが効果の大きい工夫だと思います。
結局のところ、通知を受け取る先はいつも僕のスマホです。仕組みを長く使うほど、通信環境の比重も上がってきます。料金プランも一度点検しておいて損はないかもしれません。
本記事にはアフィリエイト広告を含みます。当サイトのリンクを経由して商品・サービスへお申し込みいただいた場合、提携先企業から成果報酬を受け取ることがあります。 また、運営者は楽天グループに所属する社員であり、紹介プログラムを通じた報酬を受け取る場合があります。記事内容・評価は広告の有無にかかわらず、運営者の実体験と調査に基づき作成していますが、 上記の関係性をご理解のうえお読みください。詳しくは免責事項・アフィリエイト表記をご覧ください。