AppSheetで承認をもらう作業をペーパーレス化してみた

こんにちは、@rilakkuma46です。3回目の投稿です。
過去2回Make、VBAにチャレンジした記事を書きましたが、今回はAppSheetというツールで業務改善ができないかチャレンジしてみました。AppSheetについても１時間くらい触っただけの初心者です。

:::note info
AppSheetとは
プログラミング言語を書かなくても、**簡単に**アプリが作れるツールです。Googleアカウントとの連携やスプレッドシートの利用など、Googleとの相性がいいです。
:::


## 実現したいこと：紙での承認業務をペーパーレス化したい
経費や出勤管理など承認を必要とする業務が無数にあり、業務ごとに承認をもらう手段が違います。中にはシステム化から取り残されているものもあり、「紙に書く→承認（印鑑）をもらう→保存する」という流れになっています。この部分で汎用的に使える承認システムを作ることが目標です。

## 今回できたもの：ある１業務の承認システム
汎用的なものは無理でした。代わりに、「勤務時間外で自己学習をする」という申請・承認をペーパーレスで行えるアプリができました。

https://x.com/Toshi82430/status/1833173528922997219


### 利用したもの
* AppSheet（無料ライセンス）
* スプレッドシート
* Googleアカウントが必要です
:::note warn
AppSheetのライセンスについて
ライセンスに種類があり、できることが異なります。
https://appstep.jp/media/appsheet-pricing/
:::

### 今の業務の流れ
![プレゼンテーション7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818386/b35888a3-e4e5-d278-f1a3-82b326af6304.jpeg)
申請書に承認印をもらい、ファイリングすることになっています。勤務実績で不明な点があるときに確認するために使用します。

### どんなアプリにするか？
業務をすぐに変えるのは難しそうなので、一連の流れをそのままデータ化し、ファイリング用に今と同じ仕様のデータを出力します。申請時に都度上司を設定するのではなく、あらかじめ設定しておきます。そのための管理者メニューを用意し、そこに印影データも保存しておきます。
こんな文章をChatGPTで聞いてみると・・・。１押しは「Power Automate Desktop（PAD)」、２番目にAppSheetを教えてくれました。PADは権限の壁があり今回のものを実現できそうにありません。AppSheetで作っていくことにします。



### アプリを作ってみた
##### ①スプレッドーシートを準備
データベース的な役割を果たします。アプリの入力項目と連携し、入力したものはここに書き込まれます。この設計が一番重要でした。後述の⑤⑥でうまくいかずここを何度かやり直しています。

▼ユーザー情報（申請者・上司・印影のデータ）
![ユーザー情報.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818386/5a5787d3-a478-c4d3-5b84-48badd28e1d6.jpeg)

▼申請内容（誰がどんな申請をしたか、承認の状況）
![申請内容.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818386/4ec30b54-3bf2-5946-18e3-b4086bb2db06.jpeg)
名前はメールアドレスで保存します。これにより、アプリにログインした人によって自分の情報が自動的に入力されるように設定できます。

##### ②AppSheetでアプリ設定画面へ
①のスプレッドシートの「拡張機能」＞「AppSheet」＞「アプリを作成」を選択してアプリの設定画面へ移動します。
![拡張機能.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818386/0b5fb253-666b-9528-8da2-c5308c92ff7b.jpeg)

##### ③Dataの設定（ユーザー情報）
Dataメニューで入力項目を１つずつ設定していきます。
![ユーザー情報Data.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818386/9e810f78-3141-8b9d-1a41-bbad6cb3223a.jpeg)
「KEY」の理解に苦労しました。”この値がダブったら駄目よ”という意味らしいです。
▼こんな感じでできあがりました。左が入力画面、右が登録後の画面です。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818386/eecc4150-fa2d-de45-3c47-de42c7b2adc3.jpeg">

##### ④Dataの設定（申請内容）
③と同様に入力項目の属性等を設定します。ポイントは、「名前」項目設定時に「Type」をRef、「initial value」を下記のように設定します。これによりアプリにログインしたメールアドレスを取得して、ユーザー情報シートから必要な情報を自動的に入力してくれます。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818386/8c675593-51f9-fe01-bbf2-622e9ce93bc7.jpeg">

##### ⑤Actionの設定
ボタンを押したときに何をするかという設定をする場所がActionタブです。
承認・否認ボタンの設定をします。「Set these columns」にボタンを押した後にすること、「Only if this condeition is true」に上司がログインしたときだけボタンが表示されるように設定します。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818386/11e158cf-f989-0657-a654-aa1b0d9b25fc.jpeg">

##### ⑥Botsの設定
「何かが起きたときに」「何をするか」という設定をする場所がBotsタブです。
まずは申請が登録されたときに上司にメールを送信する「申請通知」の設定です。
▼「申請が登録されたとき」
![スクリーンショット 2024-09-08 200825.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818386/8c23ab9f-31a9-e1c0-e0f6-d3a39afe6e3b.jpeg)
▼「上司にメールを送信する」
![スクリーンショット 2024-09-08 200956.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818386/85b7e018-94f6-e00a-85bc-b6f6098e3e10.jpeg)
同様に、上司が承認した「承認通知」・否認した「否認通知」の設定を行います。

:::note info
無料ライセンスではメールが管理者に送信されず、本人に送信されます。指定の宛先に送信するためには「Starter」以上の有料ライセンスが人数分必要です。アプリプレビュー画面下に「Preview app as」という欄があり、ユーザーを変えることで申請者画面・上司画面を切り替えてテストすることができます。
<img width="150" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3818386/bedb776b-1ab1-3c41-80b1-55695fe38515.jpeg">

:::


## 試してもらった
同じ部署のCさんに試してもらいました。Cさんとはこの承認業務について話したことがあり、共通の課題感を持っています。
私「承認業務がペーパーレスでできる簡易的なシステムを作ったんだけどどうかな？」
Cさん「どれどれ・・・」
ユーザー登録・申請・承認を見てもらいます。
私「ご感想は・・・？」
以下感想をまとめます。
* 〇申請時の入力は楽。
* ×なぜAppSheet？Googleアカウントは持っていない人がほとんどなので管理が手間。
* ×ライセンス費用がとても高額（$5×人数分必要）。人数分付与すると元が取れない。
* ×新しいアプリが業務ごとに生まれてしまう。


## 反省してみた
反省点としては２つ。
* 当初考えていたものが実現できず、途中で方針を大きく変えたこと。このため、当初の目標とはかけ離れてしまいました。当初は、「申請書をデータで作成→どこかに保存→保存を検知して自動的に上司に承認依頼送付→承認→承認済のデータ保存」というものが作りたかったのです。PADでは「どこかに保存」という部分がうまくいきませんでした。
* AppSheetというツールを選んだ理由が明確ではないこと。方針を変えた際、ChatGPTのおすすめからこれを選んだのですが、メール送信をテストしていたときに初めてライセンスのことを知りました。最初にわかっていたら選ばなかったかも。

そのためには、できること・できないことなど、ツールの特性についてある程度知っておく必要があると感じました。ツールも簡単に触れることがわかってきたので、もっと勉強し、当初の目標通りのものが実現できるよう再チャレンジしてみたいと思います。