Keita Yagi

Google Apps ScriptとGoogleフォームのシステムを開発する

Google Apps ScriptとGoogleフォームのシステムを開発する

Google フォームはウェブベースのアンケート作成・管理ソフトウェアです。組織内外のアンケートやテスト・クイズの回答を集めたりお問合せフォームの代替としても活用することができます。回答はスプレッドシートに集計されるため、スプレッドシートの機能をうまく活用することで集計作業の効率化が行えます。中にはアドベンチャーゲームを作るといったツワモノもいたりします。

実際に現場で使い込んでいこうとすると、例えばプルダウン項目が多量で手作業で入力(さらには更新)が面倒だとか、ちょこちょこつまづきポイントがでてきます。Google Apps Script(以下、GAS(ガス))を使えばこうした困り事も解決できます。

GASを使ってGoogleフォームを操作するといった場合にどんなことができるのか?、というのが今回のエントリーの趣旨になります。Googleフォームについては以前にも投稿したエントリーがあるのですが、今回は公式リファレンスを確認しつつ動作イメージとともにやれるこをまとめていくといったことをしたいと思います。

Google Apps Scriptを使ってGoogleフォームを使う場合の構造の把握

実際にできることを確認していく前にGoogleフォームの構造についておさらいをしておきたいと思います。

Googleフォームは以下の3つで成り立っています。

  • FromApp
  • Form
  • Item

それぞれの要素の配置は以下の画像のようになります。

GoogleForms_13

実際に意識することが多いのはフォーム上の要素であるItem(以下、アイテム)の部分かと思います。アイテムはいわゆる質問に該当します。質問には以下のようなものが使えますね。

  • 記述式
  • 記述式(段落)
  • チェックボックス
  • ラジオボタン
  • プルダウン

Google Apps Scriptを使ってGoogleフォームを新規作成する

さて、何はともあれ、Googleフォーム自体を作成しないことには始まりません。Google Apps Script(GAS)でGoogleフォームを作ってみます。

ちなみに、今回はスタンドアロン型のスクリプトで開発を進めてみました。Google Apps Scriptの使い方のエントリーにも書きましたが、GAS作成時はスタンドアロン型かコンテナバインド型か(ウェブアプリ型)を決めて作っていくことになりますが、今回は様々なGoogleフォームを作っていくことを主眼にしたので、スタンドアロン型で進めることにした次第です。

話はそれましたが、下記がスクリプトを実行した前後比較です。

GoogleForms_01
GoogleForms_02

今回はとりあえず空のフォームを作成しただけなので、ファイルを開くと下記のように何も設定されていません。

GoogleForms_03

次にGASを使って様々な選択肢や設定を追加してみます。今回は下記のような内容を反映してみました。

  • チェックボックスの質問を任意のテキストで追加
  • ラジオボタンの質問を任意のテキストで追加
  • ページの切り替えの追加
  • 日付入力の質問を追加
  • 記述式の質問を追加

上記をGoogleフォーム作成と同時に実行すると下記のように反映されます。

GoogleForms_04

回答する際のGoogleフォームの方も確認すると下記のような形で表示されています。

GoogleForms_05
GoogleForms_06

Google Apps Scriptを使ってGoogleフォームを作る場合に追加できる質問のまとめ

上記はサンプル的にGASで追加できる質問の一部を使いましたが、他にも下記のような質問を追加することができます(クラス名やメソッドは開発者向けの内容です)。

質問の種類 クラス名 追加するメソッド
グリッド型のチェックボックス CheckboxGridItem addCheckboxGridItem()
チェックボックス CheckboxItem addCheckboxItem()
日付 DateItem addDateItem()
日付と時刻 DateTimeItem addDateTimeItem()
経過時間 DurationItem addDurationItem()
グリッド型のラジオボタン GridItem addGridItem()
Google Apps ScriptとGoogle ドライブのシステムを開発する

Google Apps ScriptとGoogle ドライブのシステムを開発する

Google ドライブはパソコン、タブレット、モバイルデバイスからファイルやフォルダを保存・共有・共同編集することができるオンラインストレージサービスです。個人のGmailアカウントでは15GBから無料で使え、Google Workspaceの場合、Starterプランで30GBから利用可能です。

Google Workspaceのアプリ以外にも、Microsoft Office のファイル(Word、Excell、PowerPointなど)でも共同編集でき、ファイル形式を変換する必要もありません。他にも HTML、PDF、画像といった、100 種類以上のファイルを編集、保存できます。

非常に利便性が高い一方、特にGoogle Workspaceでの活用においては、企業側のセキュリティポリシの運用上、外部への共有に制限がかかり、社内共有に留まっている状況もあります(この点については、別途エントリーをまとめる予定です)。

今回のブログでは基本的なGoogle ドライブの使い方ではなく、また特段共有に制限がかかってないことを前提として、GoogleドライブとGoogle Apps Script(グーグルアップススクリプト、GAS)を使ってどんなことができるのかをまとめていきたいと思います。

ちなみに、実は以前にnoteでGoogleドライブを活用したGASの事例についてはまとめたことがあります。

今回は公式リファレンスを確認しつつ、GoogleドライブとGASを使ってどんなことができるのかを確認していってみたいと思います。以下の説明ではソースコードについては省略し、またGoogle Apps Scriptのスクリプトエディタに表示されるログの結果を元に説明を進めたいと思います。

GoogleドライブのフォルダIDとファイルIDについて

今後、Googleドライブを使って様々な処理を実現していきますが、その際にどのフォルダやファイルに対して処理をするのか、ということを指定しないといけません。これを何で指定するかというと、Googleドライブではフォルダやファイルに一意のIDが付与されますので、このIDを使っていくというわけです。

GASを開発する人にとっては必須の知識ですが、利用者の場合も知っておいて損はない事柄です。ファイルIDを意識することで、GASの操作や利用がスムーズに進むといったことがでてくるかと思います。

実際の確認方法を以下に示します。
まず、Googleドライブに特定のフォルダにアクセスすると、ブラウザでURLが確認できます。この時表示される下記の赤枠内の部分がIDとなります。

GoogleDrive_10

同様に、以下の[ID]の部分がフォルダIDになります。

https://drive.google.com/drive/u/1/folders/[ID]

ファイルIDについても同じように確認できます。スプレッドシートなどのGoogle Workspaceアプリの場合は、スプレッドシートを開いて以下のように確認できます。

GoogleDrive_11

同様に、以下の[ID]の部分がフォルダIDになります。

https://docs.google.com/spreadsheets/d/[ID]

GoogleドライブにアップしたPDFや画像ファイルの場合は、確認方法が少し異なります。Googldドライブのプレビューから「新しいウィンドウ」で開いたURLから確認することができます。

GoogleDrive_12
GoogleDrive_13

同様に、以下の[ID]の部分がフォルダIDになります。

https://drive.google.com/file/d/[ID]

以上がGoogle ドライブのフォルダIDとファイルIDの確認方法です。

 Google ドライブにあるファイルやフォルダをGoogle Apps Scriptで操作する

Google ドライブにあるファイルの情報をGoogle Apps Scriptで全取得する

それでは実際にGoogleドライブとGoogle Apps Scriptでできることを実例を交えて説明していきます。まずはGoogleドライブにあるファイルの名前を全て取得してみます。下記はログの一部ですが、ファイル名の一覧を取得しています。

GoogleDrive_01

ファイル名だけではなく、IDやURL、MIME Type、最終更新日など、ファイルに関する様々な情報も取得することができます。下記は、取得した情報をオブジェクトとしてまとめてログ出力したものです。これらの取得した情報を元に、スプレッドシートにURLを出力するとか、ファイル種別で絞り込みをかけるとか、最終更新日の日付をみて動作条件を変えるといった後々の処理に役立てることができます。

GoogleDrive_02

Google ドライブにある特定のフォルダのファイルの情報をGoogle Apps Scriptで取得する

先ほどはGoogleドライブにある全てのファイルの情報を参照しましたが、実際に何かを作ろうと思った場合、いちいち全ての情報を参照しにいくのはリソースの無駄ですし、利用用途としてはあまり一般的ではないかと思います。実際は、ある特定のフォルダを基準にして様々な処理を行っていくという方が自然です。
Google Workspaceのアプリ(例えばGoogleドキュメントやGoogle スプレッドシート)には、それぞれ固有のIDが存在しており、Googleドライブのフォルダにも当然ですがIDはあります。GASで特定のフォルダを指定する場合には、このIDを指定する場合が多いです。

以下はマイドライブ直下にある「Google Apps Script」というフォルダ内のファイル名を全て取得してきた結果です。左側が実際のGoogleドライブのファイルで、右側がGASのスクリプトエディタのログ上の結果になります。

GoogleDrive_04

Google ドライブにある特定のフォルダで新しいファイルをGoogle Apps Scriptで作成する

先ほどはファイルの一覧を取得したGoogleドライブのフォルダに新しいファイルを作成してみます。ファイル作成はGoogle ドライブで対応しているMIME Typeであれば一通り作成することができます。GoogleスプレッドシートやGoogleドキュメントはもちろん、PDFなんかも大丈夫です。また、フォルダも作成することができます。

今回は先ほどのフォルダに新しいフォルダを作成し、その中にHTMLファイルを作成してみます。
今回は一つのファイルだけを作成していますが、複数のファイルを一括で作成するといったこともできます。
新しいフォルダを作成しつつ、同時にファイルを作成するといったこともできますね。
筆者の場合だと、あるスプレッドシートにGASを使ってCSVやGoogleドライブの情報を収集し、定期的に実行するトリガーを使って、新しいファイルを複数作成する、みたいな使い方をすることが多いでしょうか。

GoogleDrive_05

Google ドライブにある特定のフォルダで一定時間以内に更新されたファイルをGoogle Apps Scriptでゴミ箱に移動する

ファイルを大量に作成できるようになると、今度はフォルダ内のファイル整理が課題となってきます。

以下では、現在の時刻とファイルの更新時刻を比較して1時間以内のファイルはゴミ箱に移動するといったことを行っています。また、逆にゴミ箱から元のフォルダに戻すといったことも自動で行えます。下記の画像では一番左がゴミ箱移動前、真ん中がゴミ箱移動後、右側がゴミ箱から戻した状態です。

GoogleDrive_07
GoogleDrive_08
GoogleDrive_09

定期的に古い情報のファイルをゴミ箱に移動するといった用途は多そうですね。この際、日付や時刻で参照する以外にも、ファイルのタイプ種別やファイル名などで絞り込みをかけて実行するといったこともできます。

Google ドライブのフォルダ・ファイルの共有範囲と権限について

Googleドライブのフォルダ・ファイルには共有範囲と権限があります。
共有範囲というのは、フォルダやファイルを「インターネット上の誰もが検索してアクセスできる」か「許可されたユーザーのみがアクセスできる」のかといった指定のことです。
権限というのはフォルダやファイルに対して「編集者」なのか「閲覧者」なのかといったパーミッションのことです。

Googleドライブのフォルダ・ファイルの共有範囲について

公式リファレンスのEnum Accessに一覧が乗っていますが、以下にも概要を示しておきます。
プロパティ 説明
ANYONE インターネット上の誰もが検索してアクセスできる
ANYONE_WITH_LINK リンクを知っている全員がアクセスできる
DOMAIN
Google Apps Scriptの使い方とシステム開発の基本

Google Apps Scriptの使い方とシステム開発の基本

本記事は、これからGoogle Apps Scriptの開発を始めてみたい、GASがどのように動いているのか興味があり理解したいといった方向けのエントリーになります。

Google Apps Scriptの使い方とシステム開発の基本

Google Apps Scriptを使うための準備

Google Apps Scriptを使うには、Google Workspaceのアプリ等に接続しつつ実現したいことを実行するコードをスクリプトエディタに記述(プログラミング)していく必要があります。ですので、下記の環境が必要になってきます。

  • パソコン/ブラウザ
  • インターネット
  • GmailアカウントもしくはGoogle Workspaceアカウント

パソコン/ブラウザ(PC環境)については正確にはスクリプトエディタが開きプログラミング可能なデバイスなら何でもいけるのではと思います。

Google Apps Scriptのスクリプトのタイプ(種別)

Google Apps Scriptの開発に入る前に知っておく必要があることの一つにスクリプトのタイプがあります。
Google Apps Scriptのスクリプトには3つの種類があります(参考)。

  • スタンドアロン型
  • コンテナバインド型
  • ウェブアプリ型

スタンドアロン型は、後述するコンテナバインド型と異なり、Google スプレッドシートやGoogleドライブなどのGoogle Workspaceのアプリと紐付かないスクリプトです。もしアプリと紐付けたい場合は、逐一アプリのID等を読み込みにいかないとけません。ライブラリ化したいものだったり、特段Googleのアプリと紐付ける必要のないものはスタンドアロン型を選択するのが好ましいです。

コンテナバインド型は逆に、特定のGoogle Workspaceのアプリと紐づくスクリプトになります。例えば、あるスプレッドシートを開いてそのファイルのメニューからGASのエディタを開くと、それはそのスプレッドシートのファイルに紐付いたコンテナバインド型のスクリプトとなります。Googleのアプリと連動させる場合は、ほぼほぼコンテナバインド型を選択すると思います。

上記2つのスタンドアロン型とコンテナバインド型とは少し軸が異なるのですが、ウェブアプリ型もあります。ウェブアプリ型は、スタンドアロン型もしくはコンテナバインド型とも連携して動かすことができます。例えばスプレッドシートでCSVファイルを読み込むようなインターフェースを作りたいといった場合、HTMLファイルでアップロード画面を作る必要があります。この時、コンテナバインド型スクリプトの中で、ウェブアプリ型のスクリプトを動作させるといった具合です。

やりたい事や状況に応じて、どのスクリプトのタイプを使っていくのかを選択していく必要があります。最初のうちは、コンテナバインド型を使うシーンが多いのかなとは思います。

Google Apps Scriptのスクリプトエディタを開く

Google Apps Scriptのスタンドアロン型のスクリプトエディタを開く方法

以降、ブラウザはChromeでの利用を前提として説明していきます。
まず、ブラウザのタブを開き、右上から利用したいアカウントを選択し、Google Workspaceのアプリを選択できるウィンドウからGoogleドライブを選択します。

scriptEditor_01

Googleドライブが開いたら、左上のメニューから「新規」を選択します。

scriptEditor_02

メニューが開いたら「その他 > Google Apps Script」を選択します。

scriptEditor_03

すると、GASのスクリプトエディタが開きます。「無題のプロジェクト」となっているので、プロジェクト名を変更しましょう。赤枠部分をクリックします。

「プロジェクトの名前を変更」のウィンドウが開いたら任意のプロジェクト名を付けて「名前を変更」を押します。これでプロジェクト名が変更されます。

今回は、「Hello World」をログに出力させるコードを記述して実行してみます。①は文字を出力させる関数です。②で実行ボタンを押すと、③で結果が出力されることが確認できます。

scriptEditor_06

以上が、スタンドアロン型のスクリプトエディタを開きプログラムを実行する方法になります。

Google Apps Scriptのコンテナバインド型のスクリプトエディタを開く方法

次にコンテナバインド型のスクリプトエディタを開く方法です。今回はスプレッドシートを使って説明していきたいと思います。

まずGoogle スプレッドシートを開いてメニューから「拡張機能 > Apps Script」を選択します。

すると、先ほどのスタンドアロン型と同様に、スクリプトエディタが開きます。プロジェクト名を変更したら、コード記述していきましょう。

今回は、スプレッドシート上でアラート画面を表示させ、「Hello World」を表示させてみます。

下記のようにコードを記述したら、実行ボタンを押して、先ほどのスプレッドシートに戻ります。

すると、下記の画面のように、アラート画面にHello Worldを記述することができます。

scriptEditor_09

コードに関する細かい説明は省略しますが、スタンドアロン型でも上記の画面を表示させるといったことはできるのですが、コンテナバインド型の方がコードの記述量も少なくなりスムーズな開発が行えます。

以上が、コンテナバインド型のスクリプトエディタを開きプログラムを実行する方法になります。

Google Apps Scriptをコードを書かないで開発するには

なお、コードをどうしても書きたくない!という場合は、、、(出来ることは限られますが)スプレッドシートにもマクロ機能があるのでそれを利用するか、コードを書いてくれる人にお願いをするといったことになります。もし公開されているアドオンでニーズに適うものがあれば、それを使うといった方法もありますね。

もちろん、当オフィスにお問合せいただくのも大歓迎です!お困り事があればお気軽にご連絡くださいませ。

Google for Education 認定教育者レベル 2を取得しました

Google for Education 認定教育者レベル 2を取得しました

2022年2月12日にGoogle for Education認定教育者レベル2を取得しました。
なお、レベル1は2021年9月18日に取得済みでした。

Google認定教育者とは

公式サイトの説明によれば、レベル1、レベル2の定義はそれぞれ以下となっています。
『認定教育者レベル 1 を取得すると、授業で Google のツールを使いこなすスキルがあることを証明できます。』
『認定教育者レベル 2 を取得すると、専門知識とテクノロジー導入の高度なスキルを有していることを証明できます。』

資格取得を通じて得られたもの

試験に挑む過程で、Google for Educationのツールについてより(レベル1と比較して)広範囲な理解をすることができたこと同時に、現在の教育現場で求められる考え方やそれらの状況に対してどのようにアプローチしていくべきなのか、といったことを改めて考える機会になりました。

認定バッジ

GCE_Badges_01

今後の展望

認定教育レベル2を取得する過程で得た知識や考え方を今後の仕事(現場)へきちんと還元できるように目の前の機会に取り組んでいきます。

また、次のステップとして、Google認定トレーナーがあります。狭き門のようですが、思い切って近いうちにチャレンジしていく予定です。

Google Apps ScriptとGoogle Classroomのシステムを開発する

Google Apps ScriptとGoogle Classroomのシステムを開発する

Google Classroomはオンラインの授業支援ツールで、指導や学習を1か所で管理できるアプリケーションです。課題提出や先生と生徒のコミュニケーションのために使ったりすることができます。

今回のブログでは基本的なGoogle Classroomの使い方ではなく、GASを使ってどんなことができるのかをまとめていきたいと思います。

実は以前にnoteで公式ドキュメントのQuickstartの部分についてはまとめたことがあります(ちょうど1年前ほどの記事でした)。

今回はAPIリファレンスを確認しつつ、Googleクラスルームの情報を取得しスプレッドシートに書き出すGASを拡張していき、どんなことができるのかを確認していってみたいと思います。

Google ClassroomとGoogle Apps Scriptで複数のクラスを一括で作成する

スプレッドシートに記載した情報を元に、クラスを一括で作成してみます。クラス名やセクション名といった情報をスプレッドシート側に記載し、その内容をGoogle Classroom APIに渡すことで作成を実行します。

googleClassroom_01

ちなみに今回はスプレッドシートのメニューから実行できるように専用のメニューを用意しました。後述する機能も入っていますが、下記のようなものです。

「クラスの作成」を実行すると、以下のようにクラスが一括で作成されます。複数のクラスをいちいち手動で設定するより簡単かつ早いですし、後から何の情報を設定したのかを記録することもできるという意味でスプレッドシートから実行する方がより良いですね。

googleClassroom_03

Google ClassroomとGoogle Apps Scriptでクラスの情報を一括で取得してスプレッドシートに書き出す

今後、クラスの情報を取得して、そこから様々な処理をしていきたいのですが、まずは情報を取得するところから始めないといけないですね。ということで、GASを実行したアカウントが参加しているクラスの情報を一括で取得し、スプレッドシートに書き出していってみます。先程のスプレッドシートのメニューでクラス情報の取得を実行すると、指定したシートへ書き出すようにしています。

googleClassroom_04
googleClassroom_05

Google ClassroomとGoogle Apps Scriptで複数のクラスの情報を一括で更新する

先ほど取得したクラス情報の一覧のスプレッドシートを使って、クラス情報の更新もできます。スプレッドシートに記載してある情報であれば何でも更新できます。クラス名だったりセクション名だったり。例えば、先ほどの「テスト1」「テスト2」をそれぞれ「数学A」「数学B」といった内容に変更してみます。スプレッドシートのメニューから「クラス情報の更新」を実行すれば、これらも一括で更新することができますね。

googleClassroom_06
googleClassroom_07

Google ClassroomとGoogle Apps Scriptでクラスに副担任や生徒を一括で招待する

Googleクラスルームでは様々な役割が設定できます。担任や生徒以外に、副担任をおくこともできます。都度招待したり招待コードを使って招待していくことももちろんできるのですが、誰にどういう役割で送ったのかなどを管理しておきたいといった場合、やはりスプレッドシートを使って記録しつつ、一括で招待するといったことができると便利です。

以下のような招待管理用のスプレッドシートを用意し、メニューから招待を実行できるようにしました。招待実行すると、招待した側へメールが自動で配信されます。

googleClassroom_08
googleClassroom_09

Google ClassroomとGoogle Apps Scriptでクラスのオーナー権限を一括で委譲する

新学期に向けて、クラスのオーナー権限を委譲したいといったニーズがあるかと思います。そのような時にもGASを使えばこの作業を自動化できます。クラスIDとメアドを指定することでオーナー権限の委譲が一括で行えます。

ただし、元々そのクラスの教師になっていることが条件ですが、これは前述した副担任や生徒を一括で招待するスクリプトを実行して参加してもらえてさえいればクリアーできますね。

以上、簡単にAPIでできることとのうち、ほんの一部を紹介してみました。近いうちに課題の管理についてもまとめていってみたいと思います。

なお、今なら、メールマガジンのご登録特典として、本記事でご紹介したGoogleスプレッドシート/Google Apps Scriptを共有いたします!ご興味のある方はぜひご登録くださいませ。

GoogleスプレッドシートとGoogle Apps ScriptでのR1C1記法の使い方まとめ

GoogleスプレッドシートとGoogle Apps ScriptでのR1C1記法の使い方まとめ

とあるお仕事でGoogleスプレッドシートおよびGoogle Apps ScriptでR1C1記法を使うことがありました。この投稿はその中で調べた事柄のまとめ記事になります。R1C1形式自体はGoogleスプレッドシート単体で使っていたことがあったのですが、Google Apps Scriptを使うことでより挙動の理解を深めることができたので、共有の意味も込めたエントリーです。

R1C1形式とは

A1形式とは、列をA,B,C…、行を1,2,3…と表示・指定する形式で
R1C1形式とは、列(Row)と行(Column)を数字で表示・指定する形式です。
R1C1ならA1セル、R1C2なら、B1セル、R3C3ならC3セルといった具合です。
エクセルでもGoogleスプレッドシートでも使えますね。

R1C1形式の使い所

A1形式の場合、行も列も連番的に処理をしたい場合、直感的ではありません。例えばBX列は何番目か即座にわかるかたはどのくらいいるでしょうか?指折り数えるのも辛そうです。もちろんスクリプトで連番を組むのもちょっと面倒です。
その点、R1C1形式だと行列が数値形式なので処理しやすいといったメリットがあります。例えば行だけでなく列方向にもループを回す場合ですね。列がアルファベットだと指差し数えたりスプレッドシート(エクセル)でカウントを使って番号確認したりとかしないといけないですが、数字であれば足し算引き算でいけます。

デメリットは私も正直そうですが、A1形式に比べたら全く慣れてません。初見だと正直面喰らいます。他のメンバーへの引き継ぎや共有を考えた時、多用しすぎているとちょっと辛いといったことがあり得るかもしれません。このあたりのバランス感は状況に応じて臨機応変にといったところになるでしょうか。

R1C1形式のつまづきポイント

相対参照と絶対参照

R1C1形式にも絶対参照と相対参照があります。A1形式だと$をつけて固定するやつですね。絶対参照の場合は、R1C1と指定すれば、A1を指すことになります。ややこしいのは相対参照です。R1C1形式で相対参照する場合はR[-1]C[-1]のように数値に括弧をつけます。そして、現在のセルに対しての相対位置を決める形になっているので今B2にいてR[-1]C[-1]としたらA1になりますし、今C3にいてR[-1]C[-1]としたらB2を指すことになります。
また、行/列のみを絶対/相対参照のように指定することもできます。

行列の関係

慣れれば大したことはないと思うのですが、A1形式は「列行」の順(Aが行、1が列)で表現されてますが、R1C1は「行列」の順(Rが行、Cが列)ですね。なので、A1からR1C1に変換もしくはR1C1で書いてA1でテストしようとする時に、行列置換は気をつけないといけない点です。
関係ないですが、たまに行列ってどっちが縦でどっちが横だっけ、聞かれたりしますが、漢字で行は横棒2本あるので横、列は縦棒2本なので縦、みたいにやったりしますよね。英語のRow, Columnからイメージでもよいと思います。

R1C1形式を実際に使ってみる

習うより慣れろ形式でいってみましょう!ということで、実際に色々ためしたスプレッドシートを用意しました。こちらからアクセスして頂き、ご確認ください。またコピーはこちらからもできます。参考までにどうぞ!

なお、筆者はGAS内でスプレッドシートの数式を制御する場合は、もっぱら本記事でご紹介したR1C1形式で対応をしています。数式を用いたGoogleスプレッドシートおよびGoogle Apps Script開発でお困りごとがありましたら、サポートできるかもしれません。こちらのお問合せページよりお気軽にご連絡いただければ幸いです。

参考サイト

How to use R1C1 Reference Style in Excel
Google スプレッドシートで セル参照にR1C1 形式を利用する
googleスプレッドシートのindirect関数でR1C1形式を利用する
「StiLL」デザイン情報148 StiLLコマンド–項目式にR1C1形式の数式を活用
R1C1参照形式って何のためにあるの?何が便利なの?
Google Apps Scriptで数列を記入する方法とR1C1形式について

Google Apps ScriptとGoogleフォームの事例集

Google Apps ScriptとGoogleフォームの事例集

以前に作成していたnoteで人気のあったGoogleフォームについてまとめてみたいと思います。今回の記事はGAS連携だけではなく、Googleフォームの標準的な機能のうち、お問い合わせや現場の事例で要望の多い内容についてもまとめていっていきたいと思います。Googleフォームは手軽である一方、正直制約もあるため必ずしも完璧であるツールではないと思います。しかしながら、工夫次第ではかなり幅広く利用することができるため、アンケートサービスなどのSaaSの契約をする前に、ちょっと立ち止まってGoogleフォームでやりたいことが実現できないか?といったことを考えてみるのは一興かと思います。

Googleフォームの項目をGASで一括作成/変更する

例えば、都道府県や学校名などをプルダウンの入力フォームで選択させたいといったケースがあるかと思います。そのような際に、手動で入力していくこともできなくはないですが、非常に時間がかかります。
こうした際に、項目を記入したスプレッドシートを用意し、その内容を読み込みGoogleフォームの項目として新規に作成するといったことができます。
また、Googleフォームは設定した項目ごとにIDが割り振られますが、このIDを活用して一度セットした項目の値を更新(変更/追加/削除)するといったことが可能になります。

GoogleフォームとGASで承認ワークフローを作る

Googleフォームはアンケートやお問い合わせ窓口以外にも、工夫次第で組織内の承認フローに活用することもできます。企業向けに稟議承認用のワークフローを作るというのが一番イメージがわきやすいでしょうか。
例えば備品購入用のワークフローを作ろうとすうると、Googleフォームで稟議に必要な項目を入力するフォームを作成し、GASを使って稟議承認のメールを承認者向けに投げて、承認者が可否をした結果が、スプレッドシートに蓄積されていくといったものです。
当オフィスで提供している「デジタル教材向けコンテンツ配信システム」のサービスお申込み部分でも活用しています。

Googleフォームで回答期限を設ける

以前のブログでも紹介しましたがnoteでの記事掲載時に一番人気のあった内容です。詳細は下記の記事をご確認いただければと思います。
・ 【そのまま使える】Googleフォームで回答期限を設けるスクリプト

Googleフォームの初期値を設定する

こちらも以前に紹介したnoteの記事に詳細がまとまっています。
・Googleフォームで初期値を設定する方法
関連する記事としてこちらもご参考にしていただければ幸いです。
・Googleフォームで初期値を設定する方法 (改)
・Googleフォームで初期値を設定する場合はURLの2000文字制限にご注意を

Googleフォームの回答内容を確認し編集する

Googleフォームの作成者が回答方法を確認する場合は公式ドキュメントに掲載の方法で確認していけばよいわけですが、回答者自身が確認したい場合はどうするとよいでしょうか?主だった方法としては、下記のようなパターンが考えられます。
①回答の編集を許可する。この場合、ユーザーの挙動としては以下の様になります。フォーム回答後の画面に「回答を編集」リンクがあれば、そこをクリックして編集する。ただし、回答画面を閉じてしまったりすると編集することはできません。(参考:アンケートの回答を編集できるようにする
②メールアドレスの収集をONにして、回答の編集を許可する。フォーム回答後に届くメール(メールが届けばですが)にて回答内容を確認できます。また回答編集ボタンから遷移して編集できます。
③回答の編集を許可し、回答を1回に制限する。こうするとGoogleフォームへの回答時にログインが求められますが、①のように回答後に画面を閉じても、再度編集することができます。ただし、設定した通り1アカウントにつきユニークな1つの回答しか回答できません。
④GASを利用して回答を編集可能な仕組みを構築する。例えば、回答者毎にIDを付与するような仕組みを別途用意し、そのIDをキーにしてGoogleフォームの初期値を設定する仕組みを使い回すことにより、入力済みのフォームを取得できそうです。ただ、もちろん入力値自体に上限があるので、これも完璧な解決策とはなり得ない可能性があります。

Googleフォームで顧客管理システムを作る

こちらも以前に紹介したnoteの記事に詳細がまとまっています。
【そのまま使える】GAS/Googleフォーム/スプレッドシートによる顧客管理システム

Googleフォームの回答スプレッドシートのデータの扱い

Googleフォームの回答はスプレッドシートで勝手によろしくやってくれるわけですが、このスプレッドシートを使って色々データをいじってみようとすると、色々と疑問が湧いてきたりします。中にはそもそもそんな使い方しない方が良いのではないかといったものも含まれるかもしれませんが、実際に運用する中で、運用者の方でこんな風に使ってみたいが挙動が不安なので確認してほしいといったケースのものもあります。例えば以下のような内容です。

  • 回答したスプレッドシートの行を削除するとどうなるのか?
    • → スプレッドシートのデータからは当然に削除される。そして新たな回答があれば最後の行に回答が追加されていく。
  • 回答スプレッドシートに別のデータを移植してくるとどうなるのか
    •  例えば現在の回答されているデータの下に別のスプレッドシートから(同一形式の)データをコピーします。すると、次に回答があった場合は、コピーしたデータの下にデータが挿入される形になります。
  • ソートするとどうなるのか?
    • フィルタを使ってソートする分には特にデータは壊れたりしません。
  • 新しくフォームの項目を追加した場合
    • 回答側のスプレッドシートには新しく行が追加されます。
    • 回答スプレッドシートを用いて他のスプレッドシートやGASと連携する際にフラグ管理用の列を設けようとする場合はここの列が動いていくので何らか管理が必要になります。

その他

上記の内容から、こんなこともできるのでは?これはどうすると実現できるのか?といった疑問などありましたら、お気軽にコメント/お問合せいただければ幸いです!

Google Apps Scriptに関する過去ブログの人気記事トップ5

Google Apps Scriptに関する過去ブログの人気記事トップ5

当サイト開設以前に、noteでGoogle Apps Scriptに関する記事をまとめていました(記事一覧)。
本日はこの掲載記事の中で、人気のあった記事を紹介したいと思います。
各記事へは、それぞれの記事タイトルから飛べますので、ぜひご一読ください!

第1位: 【そのまま使える】Googleフォームで回答期限を設けるスクリプト

今後、当サイトのブログでGoogleフォームに関するまとめ記事を掲載予定です。
Googleフォームは簡単にアンケート作成ができるなど手軽でよいですね。一方で、このように回答期限を設けたり、少し突っ込んだことをやろうとすると色々と制約が多かったりします。

第2位:Googleフォームで初期値を設定する方法

続いて第2位も同じくGoogleフォーム関連です。以前に回答した結果を表示するには、回答直後の画面から遷移するなど、実は様々な方法があります。こちらの記事では裏技的にちょっと凝った方法で対応してみた内容です。

第3位:【そのまま使える】GAS/Googleフォーム/スプレッドシートによる顧客管理システム

GoogleフォームとGoogleスプレッドシートを使って、簡単な顧客管理システムを作成してみたものです。
顧客管理台帳を作るにはGoogle Workspace関連でも、もちろんこれ以外にも様々な方法が考えられますが、スプレッドシートを使うというのが一番簡単でとっつきやすい(一方で、限界もありますが)と思われます。

上位3つは何だかんだ、Googleフォーム絡めたものでした。Google Workspaceのアプリケーション群であれば、個人的にはGoogleスプレッドシートを軸に作業することが多いため、Googleフォームが人気というのはちょっと意外でした。単に関連する記事を書いてたりSEO的に引っかかりやすくなっていただけという可能性はありますが。

第4位:【そのまま使える】Googleスプレッドシートで請求書を自動生成するGAS開発プロジェクト Vol.3 〜プロトタイプ完成〜

実はこちらはプロトタイプなので、完成版の記事は「【そのまま使える】Googleスプレッドシートで請求書を自動生成するGAS開発プロジェクト Vol.5 〜Ver1.0リリース〜」として公開しています。
実際にこの請求書テンプレートですが、現在も個人的に活用しています。
正直なところ、請求書については、少額課金で十分恩恵を受けられるSasSが世の中には結構あります。なので、作っておいて何ですが、わざわざ発展させて作り込むというところまではいかないかと思います。
ただ、件数が膨大でなかったりちょっとしたきっかけで請求書を作ることになったといった場合は、(ちょっとした自動化を見据えて)GASでささっと作るというのはありかなというイメージです。

第5位:「SpreadsheetApp.openById を呼び出す権限がありません。」のエラーを解消する

こちらは躓きネタです。これだけに限らず、ちょいちょGASはつまづく部分があります。つまづき集でも作って置くと自分のためにもよさそうな気がしてきました。

以上、トップ5記事の紹介でした!

Google Apps Script システム開発上の制約 〜GASを使う上での注意点〜

Google Apps Script システム開発上の制約 〜GASを使う上での注意点〜

Google Apps Script システム開発上の制約

Google Apps Script(以下、GAS)は非常に優れた生産性向上のためのサービスですが、使用上の注意点もあります。
今回はその中でも「制限(実行の限界値)」と「割当(実行回数の制限)」に絞って説明をしたいと思います。

要するに、GASは無制限に使えるわけではなく、その実行回数や時間/データサイズに制限があるというお話です。アプリケーション開発や実行に際しては、この制約をきちんと考慮していく必要があります。

もちろん、ちょっとした個人用のアプリを作るくらいであれば、ほとんど意識しなくても問題はないです。ただ、複数人で使うような社内アプリケーションであったり、データ量が少し大きめのものを扱うような場合には、思わぬ部分でこうした制約が足枷になる場合があるので要注意です。例えば、個人のGmailアカウントでGoogleスプレッドシートやドキュメントを一括で複製するようなアプリを作った場合、1日の上限が新規250までとなっています。実際に生徒さんが100人以上いらっしゃるような学習塾のクライアント様のケースでこうしたGASの制約の懸念もあることから、Google Workspaceアカウントへ移行したという方もいらっしゃいました。

公式ドキュメント

こちらに現在の最新の制限と割当が掲載されています。

GASの制限と割当はこの数年で少しずつ変化しています。概ね半年-3年に一度くらいの間隔ですが、Google WorkspaceやGAS自体のアップデートに伴い更新されています。

例えばスクリプトの実行時間です。以前はG Suite Business(Google Workspaceの前進)以上のプランで、30分の実行時間が許容されていました。しかし、Google Workspaceへのリブランディングの前後でスクリプト実行時間は、個人アカウントであればGoogle Workspaceアカウントであれ、いずれも6分という条件になっています。

下記に2021年12月28日現在の内容を記載しておきます。
実はこちらのnoteで以前(2021年1月31日)に調査した内容をまとめたことがあるのですが、Google Apps Scriptのプロジェクト数の作成制限が設けられる(1日50個まで)など、やはりアップデートされてるものがありますね。

Google Apps Scriptの割当

割当のカウントは太平洋標準時(PST)の0時、つまり日本時間の16〜17時にリセットされます。

Current quotas

Google Apps Scriptの制限

下記は制限になります。

Current limitations

さきほどのGoogle公式ドキュメントを日本語訳しただけなのですが、こちらにスプレッドシート形式でまとめたものをおいてあります。コピーするなど、ご自由にご利用ください。

Google Apps Scriptとは何か? できることや使い方を解説します

Google Apps Scriptとは何か? できることや使い方を解説します

Google Apps Script(GAS)とは何か

Google Apps Script(グーグル アップス スクリプト。以下、GAS(ガス)) は、Google Workspace上のアプリケーション(GmailやGoogleスプレッドシート、Googleクラスルーム等)を素早く簡単に連携/拡張させることができるローコードプラットフォームです。Google Apps scriptを使うことで、Google Workspaceや他の外部サービス(SlackやChatwork、freee等)との連携が可能になり、ビジネスや教育現場での業務効率を最適化することができます。

Google Apps Scriptでできること

GASでできることは、様々な課題やシーンに合わせて想像次第で広げることができます。以下の内容は実現できることの一部です。(内容的に、多少重なっている部分もあります。)

①Google Apps Scriptで自動化アプリケーションを開発する

日常的なルーチンワークや時間のかかる単純作業の効率化をしたいのであれば、GASは強力なソリューションの一つになります。例えば、Gmailの一括送信であったり、Googleドライブのフォルダを一括でコピーしたり、Googleスプレッドシートで請求書を一括作成したりといったことができます。
一定の時間や条件でトリガーを発生させることもできます。ですので、毎日定期的にGoogle Analyticsからデータをとってきたり、自社サイトを横断的にクロールしてKPIをまとめるといったことも行うことができます。
これらは、カスタムメニューなどで提供される簡易的なUIを用いて、手軽に開発/利用することができます。

②Google Apps ScriptでWebアプリケーション(Web UI)を開発する

GASでは一般的なウェブ言語(HTML、CSS、JavaScript) を使って開発を行えます。必要に応じて、BootstrapやVueといったフレームワークを活用することで、よりモダンなWebアプリを構築することもできます。実際に当オフィスではこれらのフレームワークを用いて、短納期・高品質なアプリのご提供を試みています。
実際のソリューション事例としては、①スプレッドシートを簡易的なデータベースとして利用しつつ操作部分はWebのUIで提供する、②Google Cloud SQLを用いて本格的なデータベース連携Webアプリを構築する、といったパターンが考えられます。

③Google Apps Scriptでアドオンを開発する

開発したスクリプトをアドオンとして提供することができます。例えば、GoogleスプレッドシートベースのUIでGASのアプリを開発し運用しているけれども、ある時何らかの集計機能を他のスプレッドシートでも利用したいといった場合があります。こうした場合に独立したアドオンとして提供を行えば、一括で同一機能を修正できるといった利点があります。
また、開発したアドオンはGoogle Workspace Marketplaceで全世界へ共有することもできます。
なお、Google Workspace Marketplaceでは多くのサードパーティーのアドオンが多く提供されており、既にご利用の外部サービスと連携する際にはアドオンを活用するといった手段も考えられます。

④Google Apps Scriptでカスタム関数を開発する

Googleスプレッドシートで独自に定義した関数を開発することができます。例えば、西暦を和暦に変換する関数であったり、経理処理で軽減税率を考慮した消費税を計算する関数、教育分野で複数の評価項目から成績結果を返す関数などが考えられるでしょうか。アイデア次第で様々な関数を作りだせるところが魅力といえます。

⑤Google Apps Scriptでチャットボット(Chatbot)を開発する

お問い合わせの一次対応等にチャットボットを導入したい、といった場合にもGASを利用することができます。Google Chatを利用したチャットボットはもちろん、LINEやSlack、ChatWorkなど外部APIと連携させて構築することもできます。チャットアプリ側で質問された内容を、Googleスプレッドシート側で用意した回答データベースを元に返答するといったイメージになります。

Google Apps Scriptを使うメリット

Google Apps Scriptなら、すばやく簡単に開発が可能

実際に提供できるソリューションのイメージを前述しましたが、GASではこれらのアプリケーションを素早く開発できる環境にあります。開発言語が一般的なウェブ言語であることもありますが、それに加えて開発環境がGoogleのクラウドサーバー上にあるため、開発の敷居が非常に低くなっています。具体的にはプログラムを編集・実行・管理するスクリプトエディタや、操作対処となるGoogleスプレッドシートなどのドキュメント群、また事前統合されたGoogle アナリティクス、BigQuery などのAPI群の利用も可能です。利用可能なGoogleのAPIは100 以上にものぼります。
スクリプトもGoogleスプレッドシートなどと同様に他ユーザーと共有できますので、共同編集が可能です。

Google Apps Scriptで様々なシーンにおける生産性の向上を行う

「Google Apps Scriptでできること」で具体例を挙げましたが、ルーチンワークや単純作業の自動化が一番わかりやすい生産性の向上事例かと思います。個人的には、毎日行う事はもちろんですが、週1や月1回定期的にある業務で前回と同じ作業内容を(手順書などを確認しながら)繰り返すといったような内容に非常に効果を発揮すると感じています。トリガー設定で明け方にタスク実行するなどののオートメーション化もよいですね。
Webアプリ化やSlack等サードパーティーアプリとの連携・統合を行うことでも、日々のワークフローの効率化が可能です。

Google Apps Scriptはクラウドが前提のサービス

GASはGoogle Workspace / Google Cloud Platform上で動作するサービスであり必然的にクラウドでの実行が前提となっています。そのため、ローカルPC上で特別な環境設定をしなくても、開発や実行が可能となっています。
また、同時に共同での開発やサービス利用が可能となっている点も、開発者・利用者双方にメリットのある状況となっています。

Google Apps Scriptの制約 

上述しましたようにGASは手軽に開発ができますが、制約もあります。

Google Apps Scriptの制限(実行の限界値)

GASの関数の実行時間やメール添付のファイルサイズなどには上限があります。例えば、GASの関数の実行時間は現在は、無料アカウントもGoogle Workspaceのどの契約プランでも6分となっています。
最新の限界値はこちらをご確認ください。

Google Apps Scriptの割当(実行回数の制限)

GASによるメール一括送信やスプレッドシート等のドキュメント作成は非常に便利ですが、1日の回数制限があります。回数制限はGmailアカウントおよびGoogle