共用施設の受託解析の電子受付システムをGoogleのサービスで組み立てる-(1) Google Formを使った依頼の収集

#####[前の投稿]
[共用施設の技術員が受託解析の電子受付システムをGoogleのサービスで組み立てた](https://qiita.com/Umi_large/items/3819229b9f3d75ffe29f)
#やりたい事

1. ユーザーさんが受託解析を依頼する方法を電子化する
2. 依頼内容はクラウド上のデータベースに保存される
3. 依頼内容は作業担当者のみが後から修正できるように工夫する

#そもそもGoogle Formとは？
Google FormはGoogleが一般アカウントにも提供している、Webフォームの作成支援サービスです。

Webフォームは、紙の申請書様式のごとく決まった欄に情報を書き込んでもらい終わったら提出してもらうというプロセスをWeb上で実現するものだと考えてください。

作成したWebフォームは作成者が指定したGoogle Drive上の特定のディレクトリもしくはホームディレクトリに保存されます。

ユーザーさんの書き込みが終わった後にWebフォームを開くと収集された情報の外観をグラフ化して表示してくれたりしますし、Google Apps Scriptの特定の関数を利用して機能拡張も行うことができます。
(機能拡張についてはQiitaでも多くの記事が上がっているようです。1からGASでまだ無いものを作ってみる場合には[Googleのリファレンスページ](https://developers.google.com/apps-script/reference/forms/)も参考にしてみましょう。)

#Webフォームの作成

Google Drive上で右クリックすると画像のようなメニューが表示され、Google FromによるWebフォームの作成に進むことができます。

![92DC561F-B7BF-4C3A-8681-6CDFE910AA11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427422/70f7787e-85e9-325a-d379-f692d4961025.png)

この操作によって「無題のフォーム」が作成されるので、ここに収集したい情報を質問形式で追加していきます。

![E005DF02-2EB0-43C0-A91C-ED10D0D8E99E.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427422/1b7a6b41-3e0a-726d-1bf1-cf3967f94341.jpeg)

画像では「無題の質問」の右隣にある「ラジオボタン」と書かれたプルダウンメニューをクリックすると、情報の収集形式を変えることができます。

![59BECAEC-7289-41B5-9C72-14031B93F898.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427422/8b575427-cc93-97a1-acfc-464ffe693e9c.jpeg)

器用なことに、任意のファイル(例えばpdf, docx, pptx, xlsxなど)のアップロードにも対応できます。

#受託解析に必要な情報

1. ユーザー情報(ユーザー固有のID、氏名、メールアドレス、所属、連絡先など)
2. 受託の内容(メニュー、サンプル名、オプション、サンプルごとの特記事項など)

大きく分けると上記の２つが最低限必要だと想定されますが、細かく書き下していくと収集すべき情報は膨大になります。

**特にサンプルに関わる情報はサンプルの数だけ必要な情報量が変化するため、あらかじめ情報の収集要件と収集数を決めなければならないGoogle Formの設計とは一見して相性が悪いです。**

#オーダーシートを作ろう

どうせ決まった情報しか収集しないなら、大部分はオーダーシート(依頼票)のテンプレを提供して、記入済みオーダーシートを提出してもらおう。
(つまりは紙の依頼票を手渡ししてくるのを電子的な手続きに置き換える)

そのほうが、ユーザーさんにとっても自分で毎回毎回記入する項目を最小限にできてフレンドリーですね。

その上でWebフォームでは、一回の回答が一度の固有な依頼に相当できるようにより最小限の項目に絞って情報の収集要件を盛り込んでいきましょう。

#完成品

####Webフォーム
![0731AF88-4775-4DFE-A2A7-9FDD50279B15.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427422/e5aadcca-9e06-c06c-c268-bc2e115489b6.jpeg)

####オーダーシート
![F747CAEB-33E9-4BD1-9E93-66AF8E551B85.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427422/424b21fe-3f0c-66e6-95bd-9a859251f347.jpeg)

#収集した情報の回収

試しにテスト運用でGoogle Formに回答してみましょう。
回答するごとに回答件数がカウントされます。
すべての回答データを見るためにはGoogle Spreadsheetのロゴをクリックしましょう。

![C0E189B4-ED8E-4148-BA2B-7ACC88637434.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427422/366cab44-6ef7-6148-94ee-213c174e1b5f.jpeg)

するとGoogle SpreadSheet上に全ての回答データが回答日時順で展開されています。

![C21C120C-7E58-4448-AD35-379C3CA86BE9.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427422/156ad276-af7e-173b-ff45-8710b53c26cf.jpeg)

この際、作成されたSpreadSheet(今回は画像にある通り「受託解析の依頼（回答）」)には、「フォームの回答1」というシートが自動的に作られ、１つの要件が一行として記録されています。

この「フォームの回答1」というシートは、この後Google Formに新しく回答があると自動的に次の行に次の回答を記録していきます。

#実際の運用

「フォームの回答1」というシートはフォーム回答時などに自動的に読み込まれて次に次にと回答を記録していきますので、このシートを編集されるのは非常に都合が悪いことです。

なので、このシートの内容を引用しつつ編集可能な「フォームの回答引用」というシートを新しく作成しています。

作成した「フォームの回答引用」のA1のセルに以下の関数を設定して、これを他のセルにも展開することで「フォームの回答1」のデータを呼び出しつつ編集しても問題なさそうなシートができます。

```r:フォーム回答引用!A1
='フォームの回答 1'!A:A
```

![C85CFD9F-27BC-42B8-BE23-60F3EE66A013.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427422/eaddd320-0508-795c-207a-ff03b06b12d7.jpeg)

例えばWebフォームでの打ち間違えが発覚した時には、この「フォームの回答引用」のほうの該当する箇所を編集することによって、実際に行われた回答のマスタデータに直に触れることなくデータを処理することができます。

もし同じブック上に置いてあるのが嫌な場合は、別のSpreadsheet上でIMPORTRANGE関数を用いています。
私はこちらのページから知りました-[
【超便利】スプレッドシートで別シートから参照したり集計したりする方法まとめ](https://tanuhack.com/useful-tool/spreadsheet/refer-anothersheet/)

```r:別のSpreadsheetのあるシート!A1
=IMPORTRANGE("別のSpreadsheetのURL","'フォームの回答 1'!A1:G1000")
```

私の機関では「フォームの回答 1」から引用している範囲よりも後の列は、任意の関数を使って簡単な表計算処理などをさせる運用をしています。

#次回に課題になること

次に必要なことは受託解析の進捗管理をさせることやサンプルを返すなどのどうしても物理的な引渡しを管理する方法です。
これについても今後の別の投稿でもってどういうシステム運用にしたか書いていきたいと思います。

######[次の投稿]
[(2) Google SpreadSheetとGoogle Apps Scriptを使った依頼管理と引換用ウェブアプリの作成](https://qiita.com/Umi_large/items/9619a9d541678aeb52f3)