蔵書をスマホでスキャンして一覧にしたいなあと思い、生成AIに手伝ってもらいながら、アプリを作成したのでメモ。この記事もほとんど生成AIが書いています。
会社とは関係ありません。本記事についてのお問い合わせをいただいてもお答えしかねます。ご了承ください。
参考URL:https://qiita.com/takatama/items/8c4f7f657d9925cde57f
前提条件
- Googleアカウント
- スマートフォン(バーコードスキャン用)
- 基本的なスプレッドシート操作知識
1. Google Sheetsの準備
1.1 メインスプレッドシートの作成
- 新しいGoogle Sheetsを作成
- スプレッドシート名: MyLibrary(何でもよい)
- 1つ目のシート名を Books に変更(これはコード内で指定しているので絶対)
Books シートの列設定 A列からI列に以下のヘッダーを設定:
ISBN | title | subtitle | authors | publisher | publishedDate | description | thumbnail | createdAt
- テスト用データの準備
- A2セルに 9784295021674 を入力(後でテスト用に使用)
2. Google Apps Scriptの設定
2.1 スタンドアロンApps Scriptの作成
重要: スプレッドシートに紐づいたスクリプトではなく、独立したスクリプトを作成します。
- Google Driveで新規作成
- Google Drive → 右クリック → 「その他」→ 「Google Apps Script」
- プロジェクト名: MyLibrary
- スプレッドシートIDの取得
- 作成したスプレッドシートのURLから以下の部分をコピー
https://docs.google.com/spreadsheets/d/【この部分がSPREADSHEET_ID】/edit#gid=0
2.2 Apps Scriptコードの実装
// スプレッドシートIDを使用(より安全)
const SPREADSHEET_ID = 'あなたのスプレッドシートID';
function fetchBookInfo(isbn) {
// デバッグ用:ISBNの値を確認
console.log('fetchBookInfo に渡されたISBN:', isbn);
const url = `https://www.googleapis.com/books/v1/volumes?country=jp&q=isbn:${isbn}`;
console.log('API URL:', url);
const res = UrlFetchApp.fetch(url);
const json = JSON.parse(res.getContentText());
console.log('API レスポンス:', json);
// エラーハンドリングを追加
if (!json.items || json.items.length === 0) {
throw `ISBN "${isbn}" の書籍情報が見つかりませんでした。totalItems: ${json.totalItems}`;
}
return json.items[0].volumeInfo;
}
function updateBook(isbn) {
// スプレッドシートIDを使用してスプレッドシートを開く
const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getSheetByName('Books');
const rowIndex = sheet.getDataRange().getValues().findIndex(row => row[0] == isbn);
if (rowIndex === -1) throw `ISBNが"${isbn}"の行がありません。`;
const info = fetchBookInfo(isbn);
// データが不完全な場合の対応
const row = [
isbn,
info.title || '不明',
info.subtitle || '',
(info.authors || []).join(', '),
info.publisher || '不明',
info.publishedDate ? new Date(info.publishedDate) : '',
info.description || '',
info.imageLinks ? info.imageLinks.thumbnail : '',
new Date()
];
sheet.getRange(rowIndex + 1, 1, 1, row.length).setValues([row]);
}
function testFetchBookInfo() {
// ⭐ 重要:ISBNを文字列として指定(引用符で囲む)
console.log(fetchBookInfo('9784295021674'));
}
function testUpdateBook() {
// ⭐ 重要:ISBNを文字列として指定(引用符で囲む)
updateBook('9784295021674');
}
// テスト用関数
function simpleTest() {
console.log('=== 単純テスト開始 ===');
const testISBN = '9784295021674';
console.log('テスト用ISBN:', testISBN);
try {
const result = fetchBookInfo(testISBN);
console.log('成功:', result);
} catch (error) {
console.log('エラー:', error);
}
}
2.3 Apps Scriptのテスト実行
- testFetchBookInfo() の実行
- 実行ログに書籍情報が表示されることを確認
- testUpdateBook() の実行
- スプレッドシートのA2行に書籍情報が自動入力されることを確認(私が書いた本が出るはずです!)
3. AppSheetアプリの作成
3.1 AppSheetアプリの初期作成
- スプレッドシートからアプリ作成
- スプレッドシート上部メニュー「拡張機能」→「AppSheet」→「アプリを作成」
- 「Customize withAppSheet」ボタンをクリック
3.2 Books テーブルのデータ設定
Data > Books >ViewColumnで以下を設定:
(横に長いので、矢印キーでスクロール)1行目に_RowNumberが入っているときがあるが気にしない
列名 | TYPE変更 | KEY? | SCAN? | REQUIRE? | INITIAL VALUE |
ISBN | Text | ✅ | ✅ | ✅ | |
title | Text | ||||
subtitle | Text | ||||
authors | Text | ||||
publisher | Text | ||||
publishedDate | Date | 外す | 空にする | ||
description | LongText | 外す | |||
thumbnail | Image | 外す | |||
createdAt | DateTime | 外す | =NOW() |
重要ポイント:
- ISBN列のSCAN?: 必ずチェック(バーコードスキャン機能に必要)
publishedDate,description, thumbnail, createdAt: REQUIRE? のチェックを外す
ISBNスキャン時の自動書籍情報取得:
- Automationタブに移動
- 左ペイン「Automation」→「New bot」
- Otherの「Bot name」をクリックし、「Create a new bot」
- New botの名前を適当に変える
- EVENT設定
- Configure event をクリックし、Create a new event →右側にSettingがでる
- Event name: Register(なんでもよい)
- Event source:App
- Table: Books
- Data change type: Adds のみチェック(他は外す)
- Condition: 空のまま
- PROCESS設定
- 「Add a step」→「Create a new step」→Setting
- 「Call a script」
- Apps Script Project: 作成したスタンドアロンApps Script(検索)を選択
- Function Name: updateBook(isbn)
- Function Parameters: [ISBN]→SAVE
4. 表示設定(Views)の調整
4.1 Books一覧の表示設定
UX > Books > Booksで以下を設定:
- View type: deck に変更
- View Options設定:
- Sort by: 空にする
- Main Image: thumbnail
- Primary header: title
- Secondary header: authors
- Summary column: publishedDate
AppSheetの画面で、左上の名前を変更するとアプリに反映される
スマホにAppSheetのアプリを入れて、Googleアカウントで入れば見られます。
素敵な蔵書ライフを。