当サイトはAmazonなど一部広告より収入を得ています

購入完了メールから本棚リストを簡単更新!GASで作る「半自動」書籍リスト登録

master
スポンサーリンク

Kindle、honto、BOOK☆WALKER……複数の電子書籍ストアで本を買っていると、「あれ、この本もう持ってたっけ?」という瞬間がやってきます。

私もまさにその状態でした。数百冊の蔵書がバラバラのストアに散らばっていて、全体像がまったく見えない。そこで、購入完了メールから書籍情報を自動抽出し、Googleスプレッドシートに一元管理することにしました。

今回は、このシステムの設計思想と、開発中に直面した「意外な壁」について書いていきます。

この開発の流れだけ把握しておけば、Antigravity(無料のAIコードエディター)で同じ仕組みは簡単に作れますので、参考にしてください。

やりたかったこと

ゴールは非常にシンプルです。

  • 複数ストアの書籍を1つのスプレッドシートで管理したい
  • 新しい本を買ったらなるべく手間なくリストに追加したい
  • でも無料お試し版など不要なものは自分で選別したい

完全自動化ではなく「半自動」という選択をしたのは、3つ目の要件があったからです。購入メールには無料お試し版も含まれるため、自分の意思で「これは登録する」と選べる仕組みが必要でした。

完成したシステムの全体像

最終的に出来上がったシステムは、2つのフェーズから構成されています。

フェーズ1:既存蔵書の一括取り込み(ブックマークレット)

過去に購入した数百冊の書籍は、各ストアの管理画面からJavaScriptで直接データを抽出しました。3つのストアそれぞれ専用のスクリプトを作成し、ブラウザのコンソールから実行してGAS(Google Apps Script)のWebアプリに送信する仕組みです。

フェーズ2:新規購入の半自動登録(GAS × Gmail)

こちらが本記事のメインです。日々の運用はたったの1アクションで完結します。

  1. 書籍を購入すると、Gmailに購入完了メールが届く
  2. そのメールに「登録」ラベルを付ける(不要なものはスルー)
  3. GASが毎朝自動チェックし、スプレッドシートに追記

処理済みメールには自動で「book_registered」ラベルが付くため、二重登録の心配もありません。

苦労したポイント① ― メール解析の「沼」

最初に試みたのは、Gmailの購入メールから正規表現でタイトルを抽出する方法でした。しかし、これが想像以上に難しかったのです。

同じストアでもメール形式が違う

例えばAmazon Kindleの場合、購入完了メールには日本語版と英語版が混在していました。

  • 注文日: 2026年4月26日」と書かれているメール
  • Placed on 2026年4月26日」と書かれているメール
  • タイトルの直後に「販売者:」と来るもの
  • Sold By:」と来るもの

購入時期によってフォーマットが異なるため、両方のパターンに対応する必要がありました。

hontoの「おすすめ商品」トラップ

hontoのメールでは、購入商品の後に「お客様へのおすすめ商品」というセクションが続きます。これを切り分けないと、買ってもいない本までリストに入ってしまいます。

さらに厄介だったのは、ブラウザで見るHTML版メールとGASが取得するプレーンテキスト版で構造が全く異なっていたこと。HTML版では「商品名」という見出しの下にタイトルが並びますが、プレーンテキスト版では【商品】というマーカーの後にタイトル名という形式でした。

この違いに気づくまでかなりの時間を要しました。

苦労したポイント② ― GASの実行制限との戦い

GAS(Google Apps Script)には最大6分という実行時間制限があります。この壁に何度もぶつかりました。

スター検索のパフォーマンス問題

当初は「スター★を付けたメールだけ処理する」という設計でした。直感的で分かりやすい仕組みですが、実際に動かしてみるとis:starred の検索に5分以上かかることが判明。過去のスター付きメールが多いほど、Gmailの内部走査が重くなるようです。

結局、スター方式を廃止し、専用の「登録」ラベルを使う方式に変更しました。新しいラベルは中身が空のため、検索が一瞬で終わります。

著者名はAPIで自動補完

Amazon Kindleのメールには著者名が含まれていないため、Google Books APIで自動補完することにしました。
既存の書籍を取り込む際には、一括処理する関係でAPIの通信制限やGASのタイムアウトに引っかかり、安定して動きませんでした。新規書籍の取り込み時は数件の取り込みですので、問題なく動作しました。

設計判断:なぜ「半自動」を選んだか

技術的にはGmail監視を完全自動化し、全メールを自動処理することも可能でした。しかし、あえて「登録」ラベルを手動で付けるという1アクションを残しました。

理由は明確です。

  • 不要なデータの混入防止:無料お試し版や試し読みのメールを自動で弾くルールを完璧に作るのは困難
  • 制御感:自分の本棚に何を入れるかは、自分で決めたい
  • 運用コストの低さ:ラベルを付けるだけなので、数秒で終わる

「全自動」は魅力的ですが、「半自動」のほうが実用的で長続きするケースもあると実感しました。

技術スタック

用途技術
データ保存Google スプレッドシート
メール解析・自動登録Google Apps Script (GAS)
既存データ抽出JavaScript(ブラウザコンソール実行)
著者名補完Python + Google Books API

まとめ

シンプルに見えるシステムですが、実際に作ってみるとメール形式の違い・API制限・ストアごとのUI差異など、予想外の壁が数多くありました。

特に印象的だったのは、「メールのHTML版とプレーンテキスト版で構造が異なる」という発見です。普段何気なく読んでいるメールも、裏側では複数のフォーマットが共存しているのだと改めて認識しました。

完璧を目指すとキリがないので、「完璧よりも実用的」を基準に判断を重ねました。著者名の自動補完をGASから切り離したのも、スター方式からラベル方式に切り替えたのも、すべて「確実に動く」ことを優先した結果です。

私の場合は3つのストアで700行(シリーズまとめ買いは1行に整理)ほどのリストになりましたが、思考錯誤しながらも、すべての作業を半日ほどで終えることができました。半日と言ってもAntigravityが作業を行っていたため、その間は他のことをしながらといった感じでした。

一度整理してしまえば、今後はずっとこの仕組みで整理できますから、同じように蔵書管理に悩んでいる方の参考になれば幸いです。

master
スポンサーリンク
タイトルとURLをコピーしました