Google Apps Script

Google Apps ScriptでStripe決済のシステムを開発する

Google Apps ScriptでStripe決済のシステムを開発する

Stripeはオンライン決済サービスを提供するプラットフォームです。StripeソフトウェアとAPIの利用が手軽で導入が簡単なことから、利用している企業の規模はスタートアップから大規模企業まで様々です。海外ではGoogleやAmazon、Uber、日本ではSmartHRやDeNA、freeeや日経新聞など名だたる企業が利用をしています。

オンライン決済ではPaypalが有名ですが、Stripeは利用の開始が最短で当日行えたりダッシュボードやセキュリティ周りのテクノロジーの品質が優れており、導入側のメリットは大きいです。また、手数料が3.6%と低いといったことも上げられます。

小規模事業者やそれこそちょっとしたイベントでの支払いでクレジットカード払いを手軽に導入したい、といった場合に活用できるのではないかと思います。

私自身もStripeの機能に明るいわけではないのですが、StripeにはPaymentsという個別決済機能、Invoicingというオンライン請求機能、Billingというサブスクリプション機能があります。実際に使うには、これらを利用用途に分けて導入していく形になるでしょうか。

今回は上記のうち個別支払いであるPaymentsについて、GASを使ってWebページに導入し、決済を行えるようにするということをやってみます。

実際の導入については、GASでStripe決済をゼロから爆速で実装を参考(ほぼそのまま)にさせていただきました。開発をする上での実装方法等は元記事をご確認いただければ幸いです。

Google Apps Scriptを使ってStripe決済を導入し、Spreadsheetに転記する

さて、実際に上記の記事を元に導入を行ってみました。テスト環境で問題なく動作したことを確認したので、本番環境でも動作できるかテストしてみました(自分のカードで自分に支払いをしてみました)。
まず、下記は元記事同様ですが、決済用のWebページです。Pay with Cardはカスタマイズ可能なのか詳しく調べてないので分かりませんが、デフォルトをそのまま出してます。
GAS_Stripe_01

上記の「Pay With Card」を押すと、同一ページ内で下記の支払い用のウィンドウが開きます。たまたま間違えてカード番号を入力してしまったのですが、この時点で「テストカードなのでは?」といったエラーが返ってきます。なかなか優秀ですね。

GAS_Stripe_02

実際に300円を支払ってみると、先程紹介した記事で設定しているように下記の完了メッセージが表示されています。こちらでは紹介しませんが、元記事で二重決済防止機能を実装して頂いており、当然ながらこちらも問題なく動作しました。

GAS_Stripe_03

こちらも元記事にありましたように、決済内容をGoogle SpreadSheetに書き出すというものでしたので、実際に行われているか確認をします。下記のようにきちんと反映されていますね。

Stripeダッシュボード側にいってみると、こちらも当然ですが、決済内容が反映されています。

GAS_Stripe_05

Stripeのダッシュボードはとても優秀で、こちらから返金対応もできますし、様々な不正対策も行えます。例えば、決済されたカードが実は不正利用されたものだったといった場合、Stripe側で検知されたり、リスクが高い支払いだといった内容も教えてれます。このあたりはPaypalとは大きく異る点だと思います。

Google Apps Scriptを使ってStripe決済を導入して使う案

上記のように単純な決済であれば、非常に手軽にGASで導入することができることがわかりました。実際はどういった導入事例が考えられるでしょうか?

元記事のさらに元ネタになりますが、Google Formsで請求する仕組みを考えるでは、Googleフォームで支払い方法を集計した際に、クレジットカード払いであれば、Stripe決済が行えるWebページのURLをGASでメール送信し支払ってもらうというものです。これはGoogle WorkspaceアプリとGASを組み合わせたとても良い事例ですね。

決済そのものではありませんが、Stripe APIを使ってStripe顧客情報をGoogle SpreadSheetに格納する(GASによるStripeのAPI連携)という方法もありますね。こちらはもう既にStripeを導入している人向け(業務効率化)でしょうか。

その他にも、販売方法や内容に応じて色々と実装はできそうです。

また思いついたらこちらに追記していきます。

 

Google Apps ScriptでWebアプリのシステムを開発する

Google Apps ScriptでWebアプリのシステムを開発する

Google Apps Scriptでは、Webアプリケーションの開発も行えます。GoogleスプレッドシートなどのGoogle Workspaceのアプリ内でのWeb UI化もできますし、HTMLページとしての公開も行えます。GASでは一般的なウェブ言語(HTML、CSS、JavaScript) を使って開発を行えます。必要に応じて、BootstrapやVueといったフレームワークを活用することで、よりモダンなWebアプリを構築することもできます。

今回のブログでは、公式リファレンスを確認しつつGoogle Apps Script(グーグルアップススクリプト、GAS)を使ってどんなウェブアプリケーションの開発ができるのかをまとめていきたいと思います。

本エントリーの想定読者は、開発者ではなく、GASを使うと具体的にどんな事ができるのかイメージを膨らませたいという読者向です。そのため、以下の説明ではソースコードについては省略し、実際の実行結果の画面とGoogle Apps Scriptのスクリプトエディタに表示されるログの結果を元に説明を進めたいと思います。もし本エントリーのファイルやソースコードについて確認したいという方がいらっしゃいましたら、お問い合わせフォームよりご連絡いただければ幸いです。

Google Apps ScriptでメニューつきのWebページを公開する

Google Apps Scriptを用いてHTMLページ(Webページ)を作成する際に単一のページを作るだけであれば、doGetという関数を用いて作成したhtmlファイルを読み込ませればすんなり表示してくれます。しかしながら、複数ページとなると少し工夫が必要になります。というのも、GASのWebページを公開した際に生成されるURLは一つだけとなっているためです。ページ遷移を実現するにはURLにパラメーターを付加して処理してあげる必要があります。

細かい実装方法は省略しますが、サンプルページはこちらよりご確認いただけます。

GAS_Web_01

ページ上部にあるそれぞれのメニューをクリックすると以下の各ページへ擬似的に遷移します。

GAS_Web_02
GAS_Web_03
GAS_Web_04

Google Apps ScriptでGoogleドキュメントにHTMLのサイドバーやダイアログを追加し動的処理を行う

ここではGoogleドキュメントにサイドバーやダイアログを追加してみます。ここで紹介するサイドバーやダイアログはGAS内のHTMLファイルを読み込み表示をさせています。HTML内で入力内容を受け付けるフォームやボタン動作の受け付けをすることで、Googleドキュメント内に値を反映させていくということをやっていきます。

なお、題材としてGoogleドキュメントで行っていますが、サイドバーやダイアログを追加することは、Googleドキュメント以外に、Googleスプレッドシート、Googleフォーム、GoogleスライドといったGASでのUI追加に対応しているGoogle Workspaceのアプリであれば同様のことが実現できます。

Google Apps ScriptでGoogleドキュメントにHTMLで構築したサイドバーやダイアログを表示する

まずは、Googleドキュメントにカスタムメニューを追加します。

GAS_Web_05

「サイドバー」と「ダイアログ」のメニューをそれぞれ実行すると、HTMLファイルに反映した本文テキストやGASで指定したタイトルが表示されます。

GAS_Web_06
GAS_Web_07

次に「サイドバー」の方を変更してみたいと思います。サイドバーで「見出し」「段落」を入力し、「ドキュメントへ反映」ボタンを押すと、Googleドキュメント側に内容が反映されるというものにしてみます。まずはサイドバーに入力フォームを追加します。また、HTMLそのままだと見た目があまりきれいではないので、CSSで背景色などの設定を行います。

GAS_Web_08

入力フォームにテキストを入力して「ドキュメントへ反映」ボタンを押すと、Googleドキュメントに該当の文字が反映されます。ドキュメント反映時に段落の方はハイライトの色を変更してみます。ボタンを押した分だけ値が反映されていることがわかります。

GAS_Web_09

次に、ダイアログメニューの方を変更します。ダイアログメニューでは、Googleドキュメントの内容を取得できるようにします。また、ダイアログメニュー上で取得したテキストをクリックしたら、「テキスト削除済み」という文字に変更するようにしてみます。

GAS_Web_10

上記のダイアログで「ページの要素一覧を表示」を押すと、下記のようにGoogleドキュメント内のテキストを取得できます。

GAS_Web_11

さらに、それぞれのテキストをクリックすることで、該当テキストの値の変更を行います。ここでは「テキスト削除済み」の文言に変更しています。

GAS_Web_12

いかがでしょうか?この他にもできることは様々にあります。今後も定期的にこのブログでGASでできる様々なことをアップデートしていきます。また、こんなことはできないの?といった疑問やご質問、ご意見などあればコメント欄かお問い合わせ頂けますようお願いいたします。

なお、冒頭でもご説明しましたように、上記で紹介したGoogle Apps Scriptをご利用になれたい方は、お問い合わせフォームよりご連絡いただければ、ファイルをシェアいたします。お気軽にご連絡ください!

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

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

Gmail(Gメール)はGoogleのフリーメールサービスです。パソコン・スマートフォン問わず様々なデバイスのブラウザで利用することができ、オフラインでも利用することができます。なんと現在では毎日10億人以上のユーザーが利用しているようです。セキュリティやプライバシー保護の面では、送受信のされる全てのメールに業界最高水準の暗号化技術が適用され、最先端のフィッシング対策機能も利用可能です。生産性向上という意味でも、Gmail自体の優れた検索性等に加えて、他のGoogle Workspaceアプリやツールとの連携が上げられるでしょう。

Google Workspaceユーザーであれば、Business Starter, Standard, Plus, Enterpriseいずれのプランでも「Gmail ビジネス用メール」「ビジネス用のカスタムメール」「99.9% 以上の攻撃をブロックするフィッシングおよび迷惑メール保護機能」「広告なしのメール機能」という主要な機能の利用が可能です。

今回のブログでは基本的なGmailの使い方ではなく、公式リファレンスを確認しつつGmailとGoogle Apps Script(グーグルアップススクリプト、GAS)を使ってどんなことができるのかをまとめていきたいと思います。

本エントリーの想定読者は、開発者ではなく、GASを使うと具体的にどんな事ができるのかイメージを膨らませたいという読者向です。そのため、以下の説明ではソースコードについては省略し、実際の実行結果の画面とGoogle Apps Scriptのスクリプトエディタに表示されるログの結果を元に説明を進めたいと思います。もし本エントリーのファイルやソースコードについて確認したいという方がいらっしゃいましたら、お問い合わせフォームよりご連絡いただければ幸いです。

Google Apps Scriptを使ってGmailを操作する前提知識

GASを使ってGmailを操作していくためにはGmailの重要な概念を把握しておく必要があります。それは、スレッドととメッセージです。1通ずつ送る(受信する)いわゆるメールに該当するのがメッセージ、メールへの返信などのやりとりをひとまとめにしたものがメッセージとなります。

実際の画面イメージで考えると以下のようになります。赤枠部分がGmail全体を指すGmailAppというクラス、紫がスレッドを指すGmailThreadというクラス、青色がメッセージを指すGmailMessageというクラスになります。

GAS_gmail_28

開発者向けの話になりますが、操作の対象がスレッドなのかメッセージなのかで、できることが異なりますし処理方法も変わってきます。以下が一覧になります。

操作 GmailApp スレッド メッセージ
新規メールを送信する
返信する
転送する
受信トレイに移動する
アーカイブに移動する
迷惑メールに移動する
ゴミ箱に移動する
重要にする/重要を外す
既読にする/未読にする
スターを付与する/スターを外す

Google Apps Scriptを使ってGmailを送信する

Google Apps Scriptを使ってシンプル(プレーンな)Gmailの送信を行う

まずは手始めに、非常にシンプルな件名、宛先(To)、本文を指定しただけのメールを送ってみます。

GAS_gmail_01

Google Apps Scriptを使ってGmailでHTMLメールを送信する

GmailではHTMLメールを送ることができます。GASを使ってカスタマイズしたHTMLメールを送ることができます。GASでHTMLメールを作成する場合、gsファイルまたはHTMLファイルを用いてスクリプトエディタ内で定義したりGoogleドキュメントを使う(後述)といった方法があります。まずはシンプルにgsファイル内で定義して送信してみます。

GAS_gmail_03

上記はスクリプト内で<h1>Hello World</h1>を記載してHTMLメールとして送信したものになります。

Google Apps Scriptを使ってGmailで添付ファイルを送信する

 

通常のメール送信と同様、GASを使ってファイルの添付も可能です。Google Workspaceのアプリ(GoogleドキュメントやGoogleスプレッドシート)およびGoogleドライブに格納したPDFファイル等にはIDが付与されますので、そのIDを使ってファイル添付することができます。今回は先ほどのHTMLメールを拡張して、GoogleドライブにあるPDFファイルを添付して送信してみます。

なお、今回はnoreplyもonにすることで返信不要のメールアドレスを生成もしています。noreplayについてはGoogle Workspaceアカウントであれば設定可能です(Gmailアカウントでは不可)。noreplay以外にもreplayToなどの設定もできます。

さて、今後、さきほどのメールを拡張するようなイメージでGASを使ってGmail送信をするスクリプトを作っていくのですが、その前に注意点があります。それはGASの制約です。

Google Apps ScriptのGmailの制約(割当と制限)について

以前に「Google Apps Scriptの制約 〜GASを使う上での注意点〜」というエントリーを掲載しました。この中にあるように、GASを使ってメール送信する場合、1日あたりの割当と制限があります(最新の情報についてはQuotas for Google Servicesに掲載されています)

Gmailに限ると、メールの受信数が無料のGmailアカウントや旧Gsuiteは100回、Google Workspaceアカウントの場合は1,500回までといった制限がります。さらに、Google Workspaceアカウントであっても、課金累計額が100ドルを超えておりかつ課金して60日以上が経過していないと無料のGmailアカウントと同じ扱いになるようです。

思ったより送信できる回数は少ないので、どの程度メール配信の残りがあるのかは確認していきたいところです。残りのメール送信回数を確認するためのメソッドが用意されており、getRemainingDailyQuota()を使うことになります。

例えば、下記はスクリプトエディタでログ出力をした結果になります。残り65回送信できるということになりますね。

Google Apps

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()
プルダウン ListItem addListItem()
ラジオボタン MultipleChoiceItem addMultipleChoiceItem()
記述式(段落型) ParagraphTextItem addParagraphTextItem()
均等目盛 ScaleItem addScaleItem()
記述式 TextItem addTextItem()
時刻 TimeItem addTimeItem()

Google Apps Scriptを使ってGoogleフォームの質問を変更(更新)する

質問は追加するだけでなく、変更することもできます。上記で作成したGoogleフォームの最後の質問の内容を変えてみます。

  • 質問の「タイトル」を変更
  • 質問を「必須」にする
  • 説明テキストを追加

といったことをしています。左側がGoogleフォームの編集画面、右側がGoogleフォームの回答画面です。

GoogleForms_07
GoogleForms_08

Google

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と連携する際にフラグ管理用の列を設けようとする場合はここの列が動いていくので何らか管理が必要になります。

その他

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