2019年3月22日金曜日

Googleアカウントの作成リンク「アカウントを作成」をクリックすると、「自分用」「ビジネスの管理用」が出てくる!?

Googleアカウントの作成リンク「アカウントを作成」をクリックすると、「自分用」「ビジネスの管理用」が出てくる!?






これはなんだという疑問をつぶやいた方がいたので調べてみました。

G Suite アカウントでログインしようとすると出てくる




これは、独自ドメインを持つメールアドレスで Googleアカウントを個人作成した上で、その後にその独自ドメインで G Suite を契約したときに起こる競合するアカウントの場合です。この場合、少なくても Gmailについては「個人のGoogleアカウント」でログインしようにも出来ません(パスワードが通らない)。

ビジネス向けサービスのカスタマイズに使われる?


Googleアカウント作成時に出てくる「自分用」「ビジネスの管理用」の選択肢は、Googleマイビジネス、広告、G Suite,ビジネス向け Google Play などのビジネス向けサービスについてのカスタマイズに使われるようです。なお、この設定は後から変更できます。


にあるように、Googleアカウントのビジネスカスタマイズの部分をチェックすると




最初に述べたようにビジネス向けサービスのカスタマイズに使われることがわかります。

2019年3月22日 @kimipooh

2019年3月8日金曜日

【GAS】Googleドライブ / チームドライブの特定フォルダ以下のファイル一覧を表示する方法

表示先は Googleスプレットシートにします。

のコードをちょろっとカスタマイズしたものです。

カスタマイズした点
  1. 作成するシート「YYYYMMDD」が存在した場合は、そのシートデータをクリアする
  2. チームドライブ場合、ファイルのオーナー値がないのでそのエラー処理を追加
  3. 最終更新日を追加

使い方


*導入方法は後述します。


1. 後述するGoogle Apps Scriptを仕込んだ Googleスプレットシートを開く

2. 上部メニューの一番右に「GAS」メニューが追加されています。これをクリックして「リスト作成」を選択します。


3. 一番最初にアクセスしたときに、認証画面がでます。


の ② を参考に、「許可」してください。

うまくいけば、


のようにファイルリストを Googleスプレットシートのシート「YYYYMMDD」(本日の日付)に表示してくれるはずです。

*なおチームドライブの場合、オーナーはチームドライブにありユーザー側にはありません。そのため、ファイルのオーナー情報が取得できない場合には「チームドライブ」という文字を挿入してます。

セットアップ方法


1. 一覧表示したいGoogleドライブ(チームドライブ含む)フォルダにウェブからアクセスします(https://drive.google.com)。

2. URLをみて、フォルダIDを調べます。
  • https://drive.google.com/drive/folders/フォルダID
これをメモっておきます。

3. Google Apps Script のテンプレート「getFolderlist」を開きます。
4. 「Raw」ボタンをクリックし、スクリプトをすべて選択してコピーします。

5. Googleスプレットシートを新規作成します。

6. ツール > スクリプトエディタ を開きます。


のコードをすべて削除して、「4.」でコピーしたスクリプトをペーストします。
そして保存(ファイル > 保存)します。
ファイル名は「getFolderlist」とします。
*名前はなんでもいいですが、説明上そうしておきます。

7. フォルダIDを設定します。
  • var Folder ID = "[Folder ID]";
について、[Folder ID] を「2.」でメモしたフォルダIDに置き換えます。
https://drive.google.com/drive/folders/フォルダID
*[Fold


保存(ファイル > 保存)



8. Googleスプレットシートを読み込み直します

ブラウザの再読込みか、一度閉じて開き直します。

上部メニューの一番右に「GAS」メニューがあればスクリプトが実装されているといえるので、これで準備は完了です。


付録. 特定フォルダ以下のサブフォルダ一覧表示


セットアップの「3.」のテンプレートを下記に置き換えると可能です。


2019年3月8日 @kimipooh

2019年3月5日火曜日

【ボツ / 備忘録】Gmailで予約送信するための Googleフォームを作成しよう!

数日前に、Gmail に予約送信機能を実装するには・・・ という記事を書きました。その中で、「Gmailの下書き+スター」+「Google Apps Script」を使った予約送信システムの全貌について詳しく説明したスライドを作成しました。

このシステムでは、件名の冒頭に {YYYY/MM/DD hh:mm} を入れることで、年/月/日 時:分以降に予約送信する仕組みを説明したものでした。実際には1時間ごとにチェックしたりするので、チェックする間隔によって時刻(時:分)ぐらいは遅延します。

件名の冒頭に {YYYY/MM/DD hh:mm} いれるのってミスする可能性あるんじゃない?


全角にしてみたり、フォーマットをミスったり、、ありえそうですよね。とりあえずスクリプトで YYYY/MM/DD と hh:mm スペースが複数あっても大丈夫なようにはしました。しかし予期せぬ入れ方をする人もいるでしょう。

Googleフォームで入力したデータをGmail下書きに保存してくれたら便利じゃない?


とまぁ思ったわけです。実際に、Googleフォームで入力したデータをGmailの下書きとして保存するという情報はネット上にありました。ならできそうだよね!?

やってみましょう!


ということで一日ぐらいかけてゴニョゴニョして完成させたのでした!

でも使えねぇ




筆者のGoogle Apps Scriptに関する技術が足りていない可能性はあります。そのため備忘録として残しておけば、いつかうまくいく日が来るかも知れません。そういう思いもあって残しておくことにしました。

何が問題かというと、Googleフォームは基本的にURLを知っていたら誰でもアクセスできます。G Suiteなら、G Suiteドメイン内のユーザーのみには限定できます。しかし特定個人には限定できません。一方、送信したデータは、Googleフォーム作成者のGmail下書きに保存されます。となるとURLを知られてしまったら、G Suiteならドメインユーザーぐらいまでには限定できますが、いずれにしても他人に自分のGmailの下書きにデータを勝手に保存されてしまうことを意味します。これはセキュリティ的にまずいですよね。

で、Googleフォームで特定アカウント以外がアクセスすると「送信」をdisabled 出来たら問題ないと思いました。しかしそれをどう実装するか分かりませんでした。
なおフォーム送信をして、Googleスプレットシートに保存まではされますが、Gmailへのアクセスはブロックできます。しかし、フォーム送信できてしまう段階で、うまくいけた!って思い込んでうっかり別アカウントを使って送信した場合、予約できていない可能性があります。そうなると運用上まずいから使えねぇ、、なのです。

以上を踏まえた上でどのように実装するかを説明します。

どうやるのか






上記スライドをご参照あれ〜。

2019年3月5日 @kimipooh

2019年3月1日金曜日

Gmail に予約送信機能を実装するには・・・

Gmail自体に予約送信機能(2019年3月1日時点)はありません。
*2019年4月1日に、予約送信機能の実装を計画しているよーという内容がアニメーション付きで、Hitting send on the next 15 years of Gmail(Google)に掲載されています。そのため、いずれ実装されるかなぁと思います。

いずれにしても、現時点(2019年3月1日)ではないため、欲しいのなら他の方法を考えなければなりません。筆者が所属する京都大学でも2月中旬にめでたくG Suite for Education のサービスが開始したこともあり、Google Apps Scriptでいろいろ出来ないかなぁと模索しているところでした。
そこで調べてみると、機能として実装するには下記のような方法があります。

1. サードパーティのアドオンをつかう


  1. [G Suite専用] G Suite MarketPlace で提供されている予約送信機能を追加する
  2. ブラウザのアドオンをつかう(Right Inbox, Boomerang 等)
  3. 電子メールソフトのアドオンをつかう(Thunderbird + 後で送信(アドオン))

2. Google Apps Script をつかう(自作する)


スクリプト開発サイト
アドオンがGmailにアクセスするのが許せない、心配だ!という場合もあると思います。たしかに
 Right Inbox のプライバシーポリシーには、
  • Right Inbox does not store the content of your emails.
の記述があり、ポリシー的には問題ないことになります。そうはいっても、それを信頼できるかは別の話です。となってくると自作するしかありません。

で下書きを利用したスクリプトを公開されている方がいたので、そのコードを少しいじって、使い方のマニュアルを作成してみました!



*Googleスライドの機能を使って、PowerPointやPDFに保存し直すことができます。資料については自由に使ってください。ただし免責事項(末尾記載)にあるように、現時点では動作チェックしましたが、未来に動かなくなっても責任は取りませんのであしからずー。

以下、上記スライドを書くまでの経緯です。


まずパッと思いついた方法は2つぐらいです。

1. Googleフォームで入力 ==> Googleスプレットシートに保存 ==> Googleスプレットシートを定期的にチェックして指定の日時になったらGoogleスプレットシートのデータを元にGmailを送信(Googleスプレットシート内のスクリプトエディタ:Google Apps Script + 時間トリガー)

2. Gmailに下書き保存。どこかに送信日時を入れておく ==> 下書きにある送信日時を過ぎたら送信(GoogleドライブのGoogle Apps Script + 時間トリガー)


です。後者が素直そうです。これについて作ってみようかなぁと思っていたらすでに作って公開している人がいました!!

Gmailで指定日時に送る ってのをGoogle Apps Scriptで書いた(きじとら)


そうそう、こんなことを実装したかったのだ!と思いました。
実際スクリプトを試してみると、
で筆者が出したスライドのように、「このアプリは確認されていません」という警告がでるので、「安全だよ!」という設定(詳細  > ○○(安全ではないページ)に移動)をしてあげる必要があります。
なお新規スクリプト作成については、G Suite Developer Hub 経由で作るのが見やすいですね! 下図のように実行できているかチェックすることもできます。


トリガーの時間制限に注意!!


Quotas for Google Services によれば、
  • Email read/write (excluding send)
    • 無料版   20,000 クエリ /日
    • G Suite 40,000 - 50,000 クエリ / 日(Editionによる)
  • Triggers total runtime
    • 無料版   90分 / 日
    • G Suite 3 - 6時間 / 日
だそうです。下書きのメールを read するわけですから、この制限にひっかかるのかなと思います。となると 1分ごとにチェックし、該当メール件数が 1通のみだとすると、60クエリ / 時、1,440クエリ /日 となり余裕です。しかしヒットする件数が多くなるとすぐに超えちゃいそうです。ただ、GmailApp.getDraftMessagesでの取得が 1クエリなのかヒットする件数なのかがいまいちわからない(探しきれない)ので、一度 1分ごとに実行してどうなるかチェックしてみないとだめかも知れません。

また、トリガーの実行時間も関係するかもしれません。無料版だと 90分。かりにスクリプト実行時間が 1回1秒、1分単位で実行すると 1,440秒 / 日(24分 / 日)なので、無料版だと微妙かもしれません。スクリプトの実行時間が 4秒(つまり 96分 / 日)かかると制限にひっかかりますね。


をみると 5-7秒 / 回 かかっているので、かりに 10秒 / 回 ぐらいかかると想定した場合、14,400 秒 / 日(240分 / 日 = 4時間 / 日)となり、G Suite でもギリギリということになります。1時間に1度なら、240秒 / 日 (6分 / 日)となり、余裕が生まれますね!

実際のトリガー間隔は、数時間あるいは日時ベース


予約投稿ですから、たとえば翌日以降の予約でよいというルールを設けておいて、翌日の早朝(6時とか7時)の1日に一度のみ実行することにして、予約は日のみ(時間は 0:00 と固定する)という手もあります。

あるは1時間おきにチェックして、予定している時間より最大1時間遅れるぐらいな気持ちで運用する( 10:00 に設定したら、遅くても11時ぐらいには送信される、つまりその日銃に送信されるよ)という感じにすれば十分です。


このように時刻まで厳密にしなければいくらでも運用の方法はありえます。


下書き&スターがあれば実行するにカスタマイズ!


送信予約日時を件名にセットして下書きにいれただけだとうっかり書きかけで送信してしまうかも知れません。Gmailは一文字でも変更したら下書きに自動保存するためです。そこで、さらに「スター」がついている場合のみ実行するよう変更すればどうかと思いました。

つまり
  1. {年/月/日 時:分} 件名 を入れて下書きに保存
  2. その下書きにいれたメールに「スター」をつける
この2つの条件が一致したときのみ、実行すればよいという仕組みです。こうすれば下書きにいれただけでは送信されません。

というわけで 2についてカスタマイズしたのでした。
そのコードは



に公開しました。

2019年3月1日 @kimipooh

【備忘録】Gmailのコンテキストメニュー(右クリック)が大幅強化!

年度末でバタバタしていて気づいてなかったのですが、Web版Gmailのコンテキストメニューが大幅強化したようですね!

によれば、G Suiteの場合即時リリース設定だと2月11日から提供が始まり、計画的リリース設定(一般含む)だと2月22日(G Suite Release Calendar)から提供開始されたとのこと。

コンテキストメニュー




返信と、送信者による検索あたりが地味に嬉しいかなぁと思います。

2019年3月1日 @kimipooh