目次
課題
蔵書を Notion のデータベースで管理していて、新しい書籍を購入するたびに手作業でぽちぽち入力していたが、以下の課題を感じていた。
- 単純に入力作業が面倒
- タイトルや著者を入力する際のフォーマットが統一できておらず、検索性が良くない
- 出版社等のカラムを新たに増やそうと思うと、途方もない手作業が発生しそうなのでやりたくない
やりたいこと
- ISBN から書誌情報を取得して、そのまま Notion のデータベースに入れられるようにする
- ISBN の手入力はどう考えても面倒なので、カメラでバーコードを読み取って入力できるようにする
処理イメージ
sequenceDiagram
autonumber
actor User
User->>+AppSheet Client: ISBNを登録
AppSheet Client->>+GAS: webhookでISBNをPOST
GAS->>+openBD: 書誌情報を検索
openBD->>-GAS: 書誌情報を返却
GAS->>+AppSheet Server: AppSheet APIで書誌情報を保存
GAS->>+Notion: Notion APIで書誌情報を保存やったこと
Spreadsheet を準備する
- 新しく Google Spreadsheet を作成する
- Spreadsheet 名 : isbn2notion
- sheet 名: books
- カラム名
- ID
- isbn
- title
- publisher
- pubdate
- cover
- author
- created_at
AppSheet アプリを作成する
AppSheetから新規アプリを作成し Columns の設定を行う
Make a new app→Start with your own dataと選択し、App nameには任意の名前を入力するChoose your dataを押下し、上記で設定した Spreadsheet 名を選択し、Selectを押下する- App が作成されたら画面左カラムから
Data→Columnsと遷移し、上記で設定した Spreadsheet 内の sheet 名(books)を選択した上で、以下のように各項目を修正する
AppSheet Workflow 機能から GAS を kick する設定を行う
- AppSheet の画面左カラムから
Automation→Botsと遷移する New Botを押下し、name としてWhen a books record is created, updated, or deleted, send a notificationを指定する- // TODO: ちょっと hacky な手順に見えるので、正攻法を確認すること
- Event の中身は以下のように設定する
Processesタブに遷移してtableとしてbooksを選択し、新しいtaskを作成する。taskの中身は以下のように設定する
Botsタブに戻り、作成したtaskをeventに紐付ける- 画面左カラムの
Manage→Integrations→IN: from cloud services to your appをEnableにする Create Application Access Keyを押下し、新しく Application Access Key を発行するShow Access Keyを押下して表示される文字列とApp Idを控えておく
Notion のデータベースを準備する
- 以下のような property を持つデータベースを用意しておく
- Title
- Author
- Publisher
- PubDate
- ISBN
-
内部インテグレーションを作成し、token を控えておく Notion APIを使用したインテグレーションの作成
-
内部インテグレーションをデータベースに付与する
- ページ右上の「共有」から、作成した内部インテグレーションを「招待」する
GAS を deploy する
$ clasp push