【AppSheet】会社の技術書を管理するアプリを作ってみた

## はじめに

お疲れ様です！Wanoで情シスをやってますgibomです！
この記事は [Wano Group Advent Calendar 2023](https://qiita.com/advent-calendar/2023/wano-group) の11日目の記事です。今回はタイトルにある通りAppSheetの記事です。これからAppSheetを使ってみようと考えている方の参考になればと思います。

## 背景

弊社にはエンジニア向けの技術書やマーケティング、法務関連など、スキルアップに必要な技術書があります。最近では技術書の輪読会を開いてるようです。

しかし、「あの本どこにある？誰が借りてる？」「前に似たような本を買った気がする…」「ダブって買ってしまった…」などのトラブルが発生します。
また、Qiita内の古い記事はアラートが表示されるように、古い技術書は最新のセキュリティ情報や脆弱性の対策が反映されていないことが多々あるので注意が必要です。古い技術書は早々に廃棄し新しく技術書を買いたいですが、全てチェックするのは大変です。

書籍管理をスプレッドシートやNotionで作るのも良いと思いますが、今回はAppSheetでやってみます。理由は**無料で使えるから！**

## AppSheetとは

Google Cloudが提供するサービスの一つです。ほぼノーコードでアプリケーションを作ることができます。MicrosoftのPower Apps、サイボウズのKintoneみたいなサービスです。

https://cloud.google.com/appsheet?hl=ja

以前までは最上位プランでのみ利用ができましたが、2023年7月に弊社で利用しているプランでもAppSheetが使えるようになりました。

https://workspace.google.com/blog/ja/product-announcements/giving-more-customers-access-appsheet


物は試しです。手始めにAppSheetを使って、書籍管理アプリを作ってみましょう。今回は以下３点の機能が動けば成功とします。
・社内の技術書検索
・技術書の詳細情報の閲覧
・技術書の貸出管理

## 作成方法
今回は大まかな流れを説明します。詳しい操作方法はAppSheetの[ヘルプページ](https://support.google.com/appsheet/#topic=11981018)をチェックしてください。


### スプレッドシートを作成
まずはじめにデータベースを用意します。AppSheet用のデータベースを使用することも可能ですが初心者にはハードルが高いため、スプレッドシートを使うことにします。
まず、書籍一覧のスプレッドシートを作成します。かならず１行目はカラム名を記入する必要があります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958752/6a8f6ad7-c31a-bfe8-bfdc-387e8379f0d9.png)

:::note warn
カラム名が変わるとAppSheetが動かなくなったり、カラム設定が初期化されてしまいます。誤ってカラム名を修正しないように、１行目を[保護](https://support.google.com/docs/answer/1218656?hl=ja&co=GENIE.Platform%3DDesktop#zippy=%2C%E7%AF%84%E5%9B%B2%E3%82%84%E3%82%B7%E3%83%BC%E3%83%88%E3%82%92%E4%BF%9D%E8%AD%B7%E3%81%99%E3%82%8B)しておきましょう。
:::

### AppSheetを新規作成
次にAppSheetでアプリを作成します。
[サンプルアプリ](https://www.appsheet.com/Templates)を使用して作成することもできますが、さきほど作成したスプレッドシートと連携したいので、新規作成します。

AppSheetのページから
Create → App → Start with existing data を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958752/ffdf2030-d2c4-3ba2-c311-7f32b0c5a128.png)



アプリ名を決めたあと、さきほど作成したスプレッドシートを選択します。

![data一覧.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958752/dfa8b28f-6bff-ff0d-becb-ba4f86241d40.png)


数秒後、データベースが出来上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958752/e4546775-00a6-9fe1-883c-c3533951c0ad.png)


アプリケーションのプレビューも見れます。もう8割ほど完成したと思って良いでしょう。

<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958752/428a2e86-5764-89dd-2be7-5890d2697d9f.png">


ただ、プレビューを見るとISBNがNボタンYボタンになってます。
各カラム設定のTypeを変更して整えます。最終的にこのような形になりました。

<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958752/57cc7b22-c7d6-43bc-55d7-bb52d1a373eb.png">


管理番号はISBNにしようと思いましたが、同じ本が数冊あった場合の管理ができないなと思い、ISBNのあとにスプレッドシートの行番号を入れることにしました。



管理番号のカラム設定を開き、Auto Compute → App formulaに`CONCATENATE([ISBN],"-",([_RowNumber] + 1000)) `を入力しておきます。これでISBNが入力されると同時に管理番号が作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958752/46ac8027-409f-8b0e-bc30-dc1281b714fe.png)


アプリからISBNを入力する際は手入力も可能ですが、バーコードリーダー機能をONにすることでスマホのカメラを使ってバーコードを読み取ることができます。



### 書籍情報の自動化

GASが利用できるので書籍検索API「Google Books API」を使い、本のバーコード（ISBNコード）から書籍情報を呼び出してスプレッドシートに入力することにしました。

設定方法はコチラを参考に作成しました。

https://qiita.com/takatama/items/8c4f7f657d9925cde57f

### 完成

貸出履歴が残るようAutomationの設定を行い、社内の技術書のバーコードを読み取ってデータを登録します。
はい、完成です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958752/ac5aca48-eb93-3e9c-593e-f764d4921320.png)

貸出状況を選択すると、従業員一覧がドロップダウンリストで表示されます。本を借りたい方は貸出状況から選択します。（わざわざ自分の名前を探して登録するのは手間ではありますが、読んだ本をすぐ誰かに渡せるよう自分以外の名前を登録できるようにしておきました。）
このリストは入退社時に更新する従業員一覧スプレッドシートからデータと紐づいてます。これで入退社時に従業員一覧を更新すると貸出状況のドロップダウンリストも更新されます。

検索画面から読みたい本を絞り込むことも可能です。
↓ セキュリティで検索した結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958752/f2ea7612-16b8-1d9d-a145-3a04dc987787.png)


## まとめ
AppSheetを使ってみて、気づいた点は以下の通り。
1. 管理コンソールやヘルプページが全て英語です。最初は苦戦しますが、慣れてしまえば問題ないです。
1. デザインのカスタマイズ性は高くありません。ノーコードあるあるです。いや、むしろデザインが固定されているからこそスピーディーにアプリケーションを作ることができるのです。これはまぎれもないメリットです。
1. アプリを公開する際は、グループアドレスで共有できません。ひとつひとつ、気持ちを込めてユーザー登録しましょう。
1. データベースのカラム名が他のデータベースと同じ名前にしちゃうとバグが発生しました。カラム名はかぶらないように決めたほうが良いです。

とはいえ、とても使い勝手のよいサービスだと実感しました。
備品や検証用スマホ端末管理もAppSheetで管理できたらなと思います。

さいごに
**みなさーん、借りた本はちゃんと返してくださーい！**

---
現在、Wanoグループでは人材募集をしています。興味のある方は下記を参照してください！

[Wano | Wano Group JOBS](https://group.wano.co.jp/jobs/)