AppSheet初学者が学校用出欠管理アプリを作った(ノーコード)

# 概要

Googleのノーコードツール「App Sheet」を利用してモバイルアプリ（ブラウザでも動作）を作成する。

アプリの要求は以下の通り。

- Googleスプレッドシートにデータを格納する
- 学生がアプリを通じ出欠状況を報告する
- 学生の出欠状況一覧を表示する（今回は誰でも閲覧可能とする）
- 学生情報は登録・更新ができる（削除はできない）
- 出欠状況の更新・削除はできないようにする
- 学生はクラスに属しており学生情報登録時に選択できるようにする

アプリ完成後の動作は次のようになる。

## クラス画面
![クラス画面.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/b17f3522-eba0-1b1b-fd7c-f19f27e451f9.gif)


## 学生画面
![学生画面.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/42256042-2de4-1994-f1bd-45abad64b7ec.gif)


## 出欠一覧画面
![出欠一覧画面.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/cb1ca7ed-acfd-72a6-baf3-92890178b0c9.gif)

ここからはアプリ作成手順の解説だが、画像が多く説明文が不足しているため分かり辛くなっていると思う。
参考にされる方はご了承ください。

# スプレッドシートの作成

アプリの基となるデータを作成する。

まず、Googleドライブで新規スプレッドシートを作成する。

### 「学生」シート
![Untitled 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/e37069e1-1612-e2c8-1265-e7a820be5ad1.png)

### 「クラス」シート
![スクリーンショット 2021-08-21 011415.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/f16c185d-3ec0-df9e-16e3-2eb4e464f1ef.png)
このシートに限っては既にデータがある。

### 「出欠一覧」シート
![Untitled 3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/a5b487d1-a2ac-65e8-913a-1bd392029579.png)

これでスプレッドシートが完成した。
これを基にアプリを作成する。

![Untitled 4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/e1080b64-abb7-d2a9-2695-d3a89954db18.png)
ツール＞AppSheet＞アプリを作成
これでAppSheetに移動する。

# AppSheet初期設定

下図は初期画面である。既に自動的に作成されている部分もある。
![Untitled 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/80df531f-c5b3-2253-8f3a-6a88e4bb19b3.png)

まず、アプリ名などを変更する。
![Untitled 6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/22f548d4-b934-2820-6063-54b3c9d95fa1.png)
info＞Properties＞AppPropertiesで下線の部分を変更した。

# 無料版に対応した追加設定

今回はAppSheetを無料で使用するので例えば次のような制限がある。

- アプリ使用にGoogleアカウントでログインさせることができない（全公開アプリにする必要がある）
- オフライン動作に対応できない

無料で使用するには上記のような機能をオフにする必要がある。

１．全公開アプリ（ログインしない）にする
![Untitled 7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/5eafd136-b921-e093-6f92-6343fe823e5e.png)
Security＞RequireSign-inから下線を変更した。

２．オフライン動作機能をオフにする
![Untitled 8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/00b71c37-1f26-e2eb-340c-8b42ca43ea9c.png)
Behavior＞Offline／Sync＞OfflineUseから下線を変更した。

# データソースの登録

アプリで使用するスプレッドシートのデータを指定する。
左メニューの「Data」から行うことができる。

![Untitled 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/eb8dc81d-da11-78f3-a5e8-6d8707f1dec3.png)
このように3つのテーブルを登録した。

次に更新や削除などの権限を設定する。
下図のように設定できる。
![Untitled 10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/572dea8d-a994-9354-22d2-52d93bc204f2.png)
今回は下記のように権限を設定した。

- 学生 － UpdatesとAdds
- クラス ー Read-Only
- 出欠一覧 － Adds

次にカラムの設定をする。

## 「クラス」テーブル
![Untitled 11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/19386f44-ffec-19c2-af91-885d5e3b7c09.png)
下線を変更した。（あと見切れているけどクラスIDのSEARTH?もオフに変更した）

## 「学生」テーブル
![Untitled 12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/c2f8511d-f7c6-8eb6-7cfb-d44004f1e9db.png)
![Untitled 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/451e4cc0-2095-2fa6-99fa-72700f77317a.png)
下線を変更した。2枚目は見づらいが1枚目の続き。

また、鉛筆マークの部分については以下の通りに設定した。
![Untitled 14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/0edca3b8-08a1-7303-38d8-46719890f3a1.png)
クラスIDでは、データ型をRefに設定したので別テーブルを参照できる。
クラステーブルを参照するようにした。
尚、参照されたクラステーブルには「**Related 学生s**」のような新しい列が自動追加されるが気にしない。

![Untitled 15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/3cce3b0b-16e0-32a8-4770-c25bd1fc47ed.png)
性別では、データ型をEnumに設定したので選択式にできる。
「男性」と「女性」から選択させるようにした。

## 「出欠一覧」テーブル

今までと同じように設定するので説明を省略する。

検温の鉛筆マークだけ説明する。
![Untitled 16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/2d34776f-c83c-a26f-8f0e-29d21b8f2b35.png)
小数第1位まで入力できるようにしたいので上図のような設定をした。

# UXで表示設定

前項で作成したテーブルを表示する。
UXから設定できる。

## 学生画面

今回自動生成されていた「学生」については下図の設定をする。
![Untitled 17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/5f9aa541-15ba-8808-e8bc-5a882be25b9a.png)

## クラス画面
![Untitled 18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/dfdd2aa3-7737-896a-c0d8-3440544ec386.png)
新しく作成した。
場所をmenuにしたのでハンバーガーメニューのところに表示される。

## 出欠一覧画面
![Untitled 19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/ec336ee2-0777-049c-a34b-665405c21735.png)
新しく作成した。

あと、このUXの画面でレイアウトを調整したら完成。

# デプロイ

![Untitled 20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/84316851-cc33-7da8-1d87-4b8ad38edfdd.png)
NotDeplayedからデプロイできる。

![Untitled 21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/04867173-bc2c-b8c4-e80a-96d34e8cc76d.png)
下線部分のボタンを選択でデプロイ完了。

あとは、Users＞Linksからアプリを開くリンクを取得できる。
![Untitled 22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/206ffb81-6444-9c33-50ef-a0a9ad09e9ac.png)

# アプリ動作中のスプレッドシート

最後にアプリ動作中のスプレッドシートの様子を見てみる。
当たり前だが、データは同期されており、データは即反映される。

![Untitled 23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/5ba89fd6-537a-d4b3-ff84-ef4e465e2959.png)
![Untitled 24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/961112/dcb6dc2b-9df3-d363-bcba-19bbf6b1676f.png)