- 作りたいアプリの構造を考える
- Google Apps Scriptの作り方
- Apps Scriptページでコードを書く
- アクセス権限の承認
- Logger.logの使い方
「自分で考えたツールが自分で作れるかも…!」
夢は膨らみ、はやる気持ちを抑えながら、まずは目指す最終形態を限りなくシンプルにした形でスクリプトを作成してみる。
とにもかくにも、自分でスクリプトを書いて、それが動く様子をすぐに見てみたい。
こんなことを人間に相談したらきっと
「気持ちはわかるけど、まずは基礎を学習しようか。話はそれからだよ」
と言われるに違いない。私が相談されたとしてもそう返すはず。
けど、わたしの相談相手は人間ではなくChatGPT。
どんな無理難題もとりあえずは「No!」と言わず答えてくれる頼もしい相棒がいるので、強引に突き進んでいける。
流れを確認
作りたいアプリの工程を箇条書きに
アプリの工程をシンプルに書き出してみましょう。
といった感じ。
ChatGPTにも、できるだけ細かく具体的に質問すれば、ピンポイントでコードを返してくれることがわかってきました。
まずは、Google Apps Scriptを作成する場所。二通りあります。
一つ目は、スプレッドシートやフォームなどの各アプリから「スクリプトエディタ」を起動する方法。
これは、フォームやシートなどの各アプリに付属する形になります。
もう一つは「Apps Script」のページから「新しいスクリプト」を作成する方法。
それぞれの特徴と違いは、素人の私より詳しい説明がすでに多くあるので省略。
私の場合はアプリをまたいで実行するタイプのアプリなので後者で作成。
入力画面を開く
「新しいスクリプト」を押して新規作成するとコード入力の画面に。
おぉ~~プログラミング!笑
ちなみに、入力すると勝手に色分けして行も整えてくれるスグレモノです。
さっそく
- フォームを開く
- フォームの要素(タイトル・質問の種類など)を取得する
- スプレッドシートに書き出す
を一つ一つGoogle Apps Scriptに翻訳していきます。
まずは
フォームを開くスクリプト
function myFunction() { const form = FormApp.openByUrl('ここにフォームURL'); }
フォームのURLは、編集モードのものを取得します。
例:https://docs.google.com/forms/d/***************/edit
↑最後に/editがつきます。
ちなみに、コードは1文字でも間違えると正常に動かないどころか、このエディタは保存すらさせてくれません。保存の時に赤文字が出たら、書かれている行数を頼りに一文字ずつ確認してみましょう。
例えば、↑の例ではURLは必ず「’」で囲む必要があります。(なぜなのかはChatGPTに聞いてね)
私はこの段階で「constって?」「form」って?とChatGPTを質問攻めにしました。笑
さて、フォームを開いただけでは実行しても何も起こらないので、フォームの要素を取得します。
フォームの中身を取得する
URLでフォームを開いたら、そのフォームがどんな構造なのか、中身を取得します。
//フォームの要素を取得 const items = form.getItems();
本当に取得できたのか、どんな風に取得したのかを目で確認するためには、LoggerまたはConsoleを使うそうです。追記してみます。
Logger.log(items);
ここまで出来たら、実行して何が起きているのか確認してみます。
実行ボタンポチっ
最初に実行ボタンを押したときだけ、アプリに自分のフォームを覗かせる権限を与えるための承認作業が必要になりますので、以下のようなダイアログボックスが出てきたら指示に従って進めましょう。
実行ボタンを押すと、エディタの下部に以下のような表示が現れます。
このItemという文字の数は、フォームに含まれる項目数によって異なります。
つまりgetItems()を使うと、フォームの要素を一つずつItemというまとまりとして取得してくれるということらしいです。そして、このItemの中にこの要素に
- 質問内容としてどんな文字が書かれている?
- 補足説明の文字は?
- 選択肢の種類はテキストボックス?ラジオボタン?
- 解答は必須?
- 正解は?配点は?
などなど、フォームを作成するときに設定した項目すべてがきちんと整頓されてぎゅっと詰まっている。。。というわけです。
ということは、項目の詳細をスプレッドシートに書き出すためには、さらに取得したItemの中身を一つ一つ読んでいく必要がある。ということなのだけど・・・
今だからこそ、こんな感じで順序だてて説明することができるものの、当時の私(ほんの二週間前の私)はそれすら理解できておらず、ただひたすら吐き出されるエラーとの闘いを繰り返すのみでした。(懐かしい…)
次は取得したItemの内容を取り出していきます。
コメント