スプレッドシートとGASで図書管理アプリを作る方法|ISBNから本の情報を自動取得してGlideでアプリにする
目次
本棚の本を管理したいけれど、タイトルや著者を1冊ずつ入力するのは面倒です。そこで、スプレッドシートにISBN(本の裏にある番号)を入れるだけで、本の情報が自動で入るようにして、それをGlideでスマホアプリにしてみました。
使うもの
| 使うもの | 役割 |
|---|---|
| Googleスプレッドシート | 本の一覧を管理する表 |
| GAS(Google Apps Script) | ISBNから本の情報を取得して、表に書き込む |
| openBD / Google Books API | ISBNから本の情報を調べられる、無料のAPI |
| Glide | スプレッドシートを、コードなしでスマホアプリにする |
GASは、Googleアカウントがあれば無料で使えるプログラムの実行環境です。JavaScriptで書けて、スプレッドシートやGmailなどのGoogleのサービスと簡単に連携できます。
手順1:スプレッドシートを作る
新しいスプレッドシートを作り、1行目に次の見出しを入れます。
| A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|
| ISBN | タイトル | 著者 | 出版日 | 出版社 | 説明 | 表紙 |

A列には、管理したい本のISBNを入れていきます。ハイフンはあってもなくても大丈夫です。
手順2:GASで本の情報を取得する
スプレッドシートのメニューから「拡張機能」→「Apps Script」を開き、次のコードを貼り付けて保存します。
// スプレッドシートを開いたときに、メニューを追加する
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('図書管理メニュー')
.addItem('図書データを取得', 'fetchBookData')
.addToUi();
}
// A列のISBNから本の情報を取得して、B〜G列に書き込む
function fetchBookData() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow();
if (lastRow < 2) return;
const rows = sheet.getRange(2, 1, lastRow - 1, 2).getValues();
rows.forEach(([value, title], i) => {
const row = i + 2;
const isbn = String(value).replace(/-/g, '').trim();
if (isbn === '' || title !== '') return; // 空の行と、取得済みの行は飛ばす
if (!/^(\d{9}[\dX]|\d{13})$/.test(isbn)) {
sheet.getRange(row, 2).setValue('ISBNの形式が正しくありません');
return;
}
const book = fetchFromOpenBD(isbn) || fetchFromGoogleBooks(isbn);
if (!book) {
sheet.getRange(row, 2).setValue('見つかりませんでした');
return;
}
sheet.getRange(row, 2, 1, 6).setValues([[
book.title, book.author, book.pubdate, book.publisher, book.description, book.cover,
]]);
});
SpreadsheetApp.getUi().alert('図書データの取得が完了しました');
}
// openBDから取得する
function fetchFromOpenBD(isbn) {
const res = UrlFetchApp.fetch('https://api.openbd.jp/v1/get?isbn=' + isbn, { muteHttpExceptions: true });
if (res.getResponseCode() !== 200) return null;
const data = JSON.parse(res.getContentText())[0];
if (!data || !data.summary || !data.summary.title) return null;
const detail = data.onix && data.onix.CollateralDetail;
const texts = (detail && detail.TextContent) || [];
return {
title: data.summary.title,
author: data.summary.author || '',
pubdate: data.summary.pubdate || '',
publisher: data.summary.publisher || '',
description: texts.length > 0 ? texts[0].Text : '',
cover: data.summary.cover || '',
};
}
// Google Books APIから取得する
function fetchFromGoogleBooks(isbn) {
const res = UrlFetchApp.fetch('https://www.googleapis.com/books/v1/volumes?q=isbn:' + isbn, { muteHttpExceptions: true });
if (res.getResponseCode() !== 200) return null;
const json = JSON.parse(res.getContentText());
if (!json.items || json.items.length === 0) return null;
const info = json.items[0].volumeInfo;
return {
title: info.title || '',
author: (info.authors || []).join(', '),
pubdate: info.publishedDate || '',
publisher: info.publisher || '',
description: info.description || '',
cover: info.imageLinks ? info.imageLinks.thumbnail.replace('http://', 'https://') : '',
};
}
保存したら、スプレッドシートを開き直します。メニューに「図書管理メニュー」が出るので、「図書データを取得」をクリックします。初めて実行するときは、権限の確認画面が出るので許可してください。

2019年当時の画面です。メニューの名前は、今回のコードとは少し違います
完了のメッセージが出たら、B〜G列に本の情報が入っています。

openBDとGoogle Books APIについて
openBDは、日本の本の情報を無料で調べられるAPIです。ただ、2023年にデータの提供元が変わり、今は国立国会図書館の書誌データをもとにしています。その影響で、表紙の画像が取れない本がかなり増えました。説明文が入っていない本もあります。
Google Books APIは、Googleが提供している本の検索APIです。APIキーなしでも試せますが、たくさんの本を一度に取得するとエラーになることがあります。その場合は、Google CloudでAPIキーを発行して、URLの最後に&key=APIキーを付けてください。
どちらのAPIも、収録されている本や取れる情報は変わることがあります。すべての本の情報が取れるわけではない点は、覚えておきましょう。
手順3:Glideでスマホアプリにする
Glideは、スプレッドシートなどのデータから、コードを書かずにアプリを作れるサービスです。2019年に作ったときは、スプレッドシートを選ぶだけで、すぐに次のようなアプリができました。

2019年当時のGlideの画面です。右がスプレッドシート、左がアプリのプレビューです
本をタップすると、詳細の画面が表示されます。詳細の画面には、表示する項目やボタンなどを自由に追加できました。

スマホのブラウザで開いてホーム画面に追加すると、ふつうのアプリのように使えます。


無料で試すならAppSheetも候補
Googleスプレッドシートのまま、無料でアプリにしてみたいなら、Googleが提供しているAppSheetも候補です。スプレッドシートを選ぶだけでアプリの形を作ってくれて、アプリの作成とテストは無料で始められます。使う人数や機能によっては有料プランが必要なので、くわしくは公式サイトで確認してください。
アプリにしなくても、スプレッドシートの「フィルタ」や、Googleスプレッドシートのアプリを使えば、スマホから本を探すくらいは十分できます。
よくある質問
ISBNから本の情報を自動で取得するにはどうすればいいですか?
GAS(Google Apps Script)から、openBDやGoogle Books APIにISBNを送ると、タイトル・著者・出版社・表紙の画像などを取得できます。この記事のコードを使えば、スプレッドシートのメニューから実行できます。
openBDで表紙の画像が取れないのはなぜですか?
2023年にデータの提供元が変わり、表紙の画像が収録されている本が大きく減ったためです。Google Books APIなら取れることもあります。
Glideは無料で使えますか?
無料プランはありますが、確認した時点では、無料プランで使えるのはGlideの中の表だけで、Googleスプレッドシートとつなげるには有料プランが必要でした。くわしくは公式サイトで確認してください。
GASのスクリプトエディタはどこから開きますか?
今のスプレッドシートでは、メニューの「拡張機能」→「Apps Script」から開きます。
まとめ
- スプレッドシートにISBNを入れて、GASで本の情報を自動取得できる
- 本の情報はopenBD→Google Books APIの順に探すと、見つかる本が増える
- Glideでアプリにできるが、スプレッドシートとつなげるのは有料プランから
- 無料で試すならAppSheetも候補
ISBNを入れるだけで本の情報がそろうのは、思っていた以上に便利でした。本以外でも、APIで情報が取れるものなら、同じ方法で管理表を作れます。
GASの使い方は、次の記事でも紹介しています。