Script)ライブデモ勉強会vol.2」のイベントレポートお届けいたします。前回も大好評だったGAS勉強会の第二弾!今回はライブデモ2本立てでお送りいたします。Workspace関連の開発業務に従事。ScriptやAppSheet等を用いたアプリケーション開発が得意。業務改善に関わる活動をされています。Queryなど幅広く活用していて、ここ最近はAsanaやノーコードツールにハマっているそうです。それでは早速ご紹介してまいります!たくさんあるフォームの回答数を自動収集する君をゼロから作成!伊藤さんからはGoogleフォームで回収したGoogleスプレッドシートから、定期的に情報を取得する方法をご共有いただきます。複数のフォームを同時に運用していると情報の管理が煩雑になってしまいますよね...!そんなお悩みも、この方法で解決することができます◎まずは通常通りGoogleフォームを作成。回答のタブからスプレッドシートを開き、回答が記録されるスプレッドシートを生成します。このフォームとスプレッドシートが複数ある想定で、GASを組んで行きます。シート」と記載)を作成しましょう。これらを毎日手動で更新していくのは大変なので、ここからは、GASを使って自動でシートが更新されるようにコードを書いていきます。ツールから「スクリプトエディタ」を選択します。次に、各Googleフォームの回答スプレッドシートのURLを、情報一覧シートから参照するように設定します。該当のスプレッドシート(情報一覧シート)からスクリプトエディタを開いているので、「getActiveSpreadsheet」と記載すれば、特にURLを指定せずとも、このスプレッドシートを指定しているのだとわかってくれます。)で指定することで正確に情報を取得できるようになります。次に、情報一覧シート内の、各フォームのURLを取得します。今回は情報一覧シートのD列に記載されている情報を取得したいので、listSheet.getRrange(‘D2:D’)と記載します。何行目まで該当になるかわからない場合は、(‘D2:D’)のように記載するとD列の2行目以降すべてを該当範囲とすることができます。次に、指定のURLがきちんと取得できているかを確認してみます。console.logの中にrowListを入れて、実行をしてみましょう。実行してみると、情報一覧シートのD列に記載された必要なURLがきちんと取得されていることがわかります。ここまででURLを取得する準備ができましたが、ここからは各スプレッドシートのURLごとにその中にある行数(=フォームの回答数)も取得できるようにしていきます。(row)を追加し再度実行。ついていることがわかります。不要なので、配列の0番目だけ取れば良い、という指示を記載し、URLのみを取り出せるようにします。なく、URLのみ取り出せるようになりました。ここから、各URLのスプレッドシートにアクセスしていきます。追加すると情報一覧シートのD列に記載してある各フォームのスプレッドシートにアクセスし、そのスプレッドシートの一番左のシートにアクセスしてくれます。answerSheet.getLastRowで最後にデータが入っている行の数値を取得します。することで正しい行数(=フォームの回答数)を取得できるように工夫しましょう。ここで出てきているエラーは、情報一覧シートでURLが記載されていない行があった場合、URLがないのにURLを開くように指示を出しているため発生しています。この場合は「空欄でない場合はURLを開く」という指示を入れればエラーが解消されます。ここまでで1各フォームの回答スプレッドシートのURLを取得する2取得したURLにアクセスし、スプレッドシートの行数(=フォームの回答数)を取得するところまで完成です。この後は、情報一覧シートの受付数に、スプレッドシートの行数(=フォームの回答数)を更新するようにプログラムを組んでいきます。スプレッドシートへの書き込み処理は上記のように記載します。指定すると、スプレッドシートのC列に指定した数字が反映されます。数字が先ほど取得した各フォームの回答スプレッドシートの行数数値になれば良いので、push関数を使って配列に数値を入れるように記載します。)、というような指示も追加で記載します。これで、手動で更新せずともプログラムが実行されれば受付数が自動で反映されるようになりました。最後に、プログラムの実行を定期的に行えるように設定します。スクリプトエディタからトリガーを開き、実行する関数を選択します。イベントのソースは時間主導型を選択し、1時間おきに情報を取得するように設定して保存します。この設定をしておくと自動で1時間おきにプログラムを実行してくれるようになります。これだけでなく、スプレッドシートを誰かが開いた時にプログラムが実行される関数も追加することで、スプレッドシートに「スクリプトメニュー」が追加されて、手動でリアルタイムの数値がわかるようにすることもできます。参加者からは「伊藤さんの仕組み色々応用できそうですね!」というコメントも!完全初心者でも、この流れの通りで実行すればGASのプログラムを作ることができます。続いて、Apachanさんからの発表です。ライブラリを活用してGAS利用者を増やそう!今回のテーマはライブラリ。ライブラリとは、作成した関数を他プロジェクトから利用できる仕組みのことです。GASを使って休日(土日祝+会社の祝日)の判定をしたい場合。通常であれば左側のコードを書かなければなりませんが、ライブラリを利用するとたった1行で完結することができます。IT初心者であってもこれくらいならできるのでは!と思わせられるような簡潔さですよね。それでは早速、ライブラリについての前提知識をインプットしましょう。基本的にはライブラリを識別するためにはLibraryという識別子がisBusinessDayのメソッドを呼び出しtodayの引数に指定されたものを入れるとなんらかのresult(戻り値)が出てくるような形になります。案件があるたびに、汎用性の高い処理を少しずつライブラリに登録していき、現在は50処理がライブラリに登録されているのだそうです!実際に書いたコードをライブラリに登録する様子も、デモでご紹介いただきました。今回のデモはスプレッドシートで管理しているシフトのデータが毎朝Slackに投稿されるようなプログラムを作成します。上記のように管理されているシフトをプログラムで情報が取りやすいように加工します。シフトシートの他に、配信用の別シートを作成し、today関数とHLOOKUPで今日のデータを抽出します。この「配信用」の情報を取得してSlackに流すようにプログラムを組んでいきます。Script」を開きます。スプレッドシートの操作の際にはgetActiveSpreadsheetを使用してスプレッドシートを指定、getSheetByNameでシートの名称(今回の場合は「配信用」)を指定します。getDateRangeを使って値の入っている部分のデータだけ取り出せるようにし、getValuesで複数のセルを指定します。ここで一旦ログを取ってみましょう。プログラムを実行すると上記のようなデータが取り出せました。この状態だと、日付の部分の数字が長くなっていますね。この場合は、getValuesをgetDisplayValuesに変更してあげましょう。すると、上記のように11月11日とシンプルな表示に変更することができます。外して、1行ずつデータを取得できるようにしていきます。recordsで1行ずつのデータを取り出せるように指定します。ここでも一旦実行して、きちんと記載できているか確認しましょう。続いて、hakoを使って配列の状態だったものをみやすい文字列に変換していきます。ここまで準備ができたら、このデータをSlackに送れるように連携していきます。投稿するのでmethodはpost、contentTypeはapplication/jsonと記載します。payloadの記載はSlackの指定によるものなのだとか。事前に連携ツールの規定はチェックする必要がありますね。これで実行してみると、外部ツールへの権限認証のポップアップが表示されますが、これを許可して実行します。すると、Slackに連携されて当日のシフトを送るスクリプトが完成しました。ここでもトリガーを時間で設定すれば、毎日決まった時間にSlackに通知されるようになります。デモはここで終わりではありません...!ここからは、初心者には少しハードルが高いこのスクリプトを、ライブラリを使って簡単に使えるようにします。今回は二次元配列を文字列に変換するプログラムと、Slackにメッセージを投稿するプログラムを、ライブラリを用いて実装します。手始めに、プロジェクトの設定からスクリプトのIDをコピーします。ライブラリの追加でスクリプトIDを記入し、検索、追加。これでライブラリは使えるようになります。1行だけで完了しました!(ここのTECHStreetは保存したスクリプトの名称で、変更することができます)続いて、Slackにメッセージを送る指示は、TECHStreet.sendSlackMsgの1行のみで完結。非常に簡潔になりました。このようにライブラリを用いると、「自分でもできるかも」と思える簡潔さでGASに取り組むことができます。このライブラリのおかげで、GASにチャレンジする人も増えてきたのだとか!GASに興味があるけどまだ試したことがない...という方はまずはライブラリを使って第一歩を踏み出してみるのもオススメです◎まとめイベントレポートは以上になります。シェアしてくださいね。最新情報とか聞きたいです(GAS関連)伊藤さん:なかったような気がします...Apachanさん:一部サービスの名称が変わったのは気づいていましたが...最近社畜気味なので追えていません。(Q)GASでシステム作った時の一番良い点とイマイチな点、聞いてみたいです。伊藤さん:1番良い点は、思い立ったらすぐにブラウザで作れるところ。点は、規模が大きくなると管理が大変になってしまうところですね。Apachanさん:予想外の広がりがあった時は、社内で受けたときが嬉しいです。期待値が上がっていって、もっと大規模で運用したいと言われたときにそれはGASでは・・・となってしまうのがイマイチといった点です。Googleフォーム以外で取得した回答データはどこかのスプレッドシートに管理すればいけるかな。Apachanさん:Googleフォーム以外で取得した回答データはどこかのスプレッドシートに管理すればいけると思います。伊藤さん:フォームと連携しているように見せかけて、スプレッドシートと連携しているだけなので、スプレッドシートさえあれば割と何でも使えると思います。(Q)業務で一番活用されるのはやっぱスプレッドシートですかね?他におすすめ活用ってありますか?導入したいのだよなぁ。伊藤さん:スプレッドシートがほとんどです。これが便利すぎるというのが理由です。誰でもいじれてしまうのでスプレッドシートをベースにしながらも、データポータルで表示して閲覧専用の画面を用意するという方法をとったりするとデータ改ざんの防止という点で良いかもです。Apachanさん:基本的にはスプレッドシートが軸足になって、メール内容を収集したり、チャットツールに通知したりという作りをしていきます。スプレッドシートをまずは抑えておけば良いかと思います(Q)なるほど、ノーコードではないのですね。エンジニアじゃなくても扱えますか?完全にIT初心者でも。伊藤さん:今日の内容に関しては全く同じ操作をしてもらえれば作ることができます。実際に自分で作るとなるといつもと違う作業になるので、つまずくことはあると思います。ブラウザ上でできるという点でコードを書いて実行という流れがやりやすいです。ここのハードルが下がるという意味では、初心者でも入りやすいと思います。_)m伊藤さん:スライドを共有するのでそこからコピー&ペーストできます。(Q)変数とかって命名規約あるのですか?すみません、初心者なもので。伊藤さん:大体こうするというのが分かってある程度のルールがあれば問題ないと思います。Apachanさん:開発現場によって違いますが、基本的にはキャメル形式が採用されます。(Q)初めて見るのですが、すごく勉強になります。文法はある程度覚えるしかないですね。楽しそうなのでやってみます。講師様はエンジニア職でしたでしょうか?伊藤さん:エンジニアです。Apachanさん:元々は10年くらい家電量販店で営業職をしていました。(Q)APIは簡単に扱えるのですね。なにか気を付けるべき点ってありますでしょうか?伊藤さん:API側の規約をしっかり見た方がいいです。間違いやすい点もあるので、実行する前にしっかりと確認しましょう。Apachanさん:トラブルにならないように利用するAPIのドキュメントは確認することや、リクエスト間隔を2秒ほどあけるなど...いっぱいあります。(Q)社内講師なのですか?どこで情報仕入れたり勉強されたりしていますか?伊藤さん:会社として案件があるときもあるし、自分で作っているときにやりたいことを調べて学んでいくことが多いです。やりたいことベースです。ひと息ついてから本を読んで網羅的に勉強しました。興味あるイベントに参加したり、YouTubeで良いコンテンツを見たり、Udemyでコンテンツを購入したりしています。(Q)ライブラリの公開はどのように行っているのでしょうか?Apachanさん:デプロイっていうところからやります。[画面表示での説明あり](Q)Slack以外でも簡単に行けますか?事例もありますか?伊藤さん:FreeeやSalesforceなど会社で使っているサービスもAPIが結構あります。ポリシーで使えるかどうかはまた別問題ですが...。その辺の連携を使って何か作ってみるのはいいかもしれないです。Apachanさん:何に依存しているかによりますが、LINEやTwitterも連携できます。ある程度APIが提供されているものであればできます。今回のイベントレポートは以上となります。StreetではIT・テクノロジーに関する様々なイベントや勉強会を開催しています!参加ご希望の方はフォームよりご登録をお願いいたします。Streetについてコミュニティ。