スプレッドシートとGASで図書管理アプリを作る方法|ISBNから本の情報を自動取得してGlideでアプリにする

目次
  1. 使うもの
  2. 手順1:スプレッドシートを作る
  3. 手順2:GASで本の情報を取得する
  4. openBDとGoogle Books APIについて
  5. 手順3:Glideでスマホアプリにする
  6. 無料で試すならAppSheetも候補
  7. まとめ

本棚の本を管理したいけれど、タイトルや著者を1冊ずつ入力するのは面倒です。そこで、スプレッドシートにISBN(本の裏にある番号)を入れるだけで、本の情報が自動で入るようにして、それをGlideでスマホアプリにしてみました。

使うもの

使うもの役割
Googleスプレッドシート本の一覧を管理する表
GAS(Google Apps Script)ISBNから本の情報を取得して、表に書き込む
openBD / Google Books APIISBNから本の情報を調べられる、無料のAPI
Glideスプレッドシートを、コードなしでスマホアプリにする

GASは、Googleアカウントがあれば無料で使えるプログラムの実行環境です。JavaScriptで書けて、スプレッドシートやGmailなどのGoogleのサービスと簡単に連携できます。

手順1:スプレッドシートを作る

新しいスプレッドシートを作り、1行目に次の見出しを入れます。

ABCDEFG
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列に本の情報が入っています。

ISBNから本の情報を取得したところ

openBDとGoogle Books APIについて

openBDは、日本の本の情報を無料で調べられるAPIです。ただ、2023年にデータの提供元が変わり、今は国立国会図書館の書誌データをもとにしています。その影響で、表紙の画像が取れない本がかなり増えました。説明文が入っていない本もあります。

Google Books APIは、Googleが提供している本の検索APIです。APIキーなしでも試せますが、たくさんの本を一度に取得するとエラーになることがあります。その場合は、Google CloudでAPIキーを発行して、URLの最後に&key=APIキーを付けてください。

どちらのAPIも、収録されている本や取れる情報は変わることがあります。すべての本の情報が取れるわけではない点は、覚えておきましょう。

手順3:Glideでスマホアプリにする

Glideは、スプレッドシートなどのデータから、コードを書かずにアプリを作れるサービスです。2019年に作ったときは、スプレッドシートを選ぶだけで、すぐに次のようなアプリができました。

Glideでスプレッドシートを読み込んだところ

2019年当時のGlideの画面です。右がスプレッドシート、左がアプリのプレビューです

本をタップすると、詳細の画面が表示されます。詳細の画面には、表示する項目やボタンなどを自由に追加できました。

Glideで作った詳細画面

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

Glideで作ったアプリの一覧画面

Glideで作ったアプリの詳細画面

Glideの公式サイトを見る

無料で試すならAppSheetも候補

Googleスプレッドシートのまま、無料でアプリにしてみたいなら、Googleが提供しているAppSheetも候補です。スプレッドシートを選ぶだけでアプリの形を作ってくれて、アプリの作成とテストは無料で始められます。使う人数や機能によっては有料プランが必要なので、くわしくは公式サイトで確認してください。

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の使い方は、次の記事でも紹介しています。

関連記事LINE Botの作り方【2026年】Messaging API × GAS(Google Apps Script)でおうむ返しボットを作る

Related関連記事