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

2019年2月11日月曜日

第一回 ローカル(非公式) Google Meetup in Okayama に参加して

非公式に、Google Product Experts を中心に Google サービスに興味のある何名かが岡山およびオンラインで集まって開催した Meetup です。いつも Meetup っていえば東京や海外だったので、西日本のどこかで出来ないかなぁと何名かのエキスパートと話し合っていたら、岡山に数名エキスパートがいることがわかったので、じゃあ岡山でやるか!というノリで開催されました。



どうせやるならセミナー形式だけじゃもったいないから、ハンズオンをやろうよ!と筆者が提案し、オンラインも交えたハンズオンを行いました。Googleサービスってウェブベースなのでハンズオンもオンラインでできちゃうんですよね!

ミートアップ会場 - Cafe & Bar もくもくガレージ


サイト:https://moku2garage.com/





もくもくと作業をしたり、いろいろな交流を支援しているとのことで、今回のイベントもワンドリンクを注文すれば、会場費無料で開催できました。そういう会場のコンセプトもあり、学生も様々なイベントをしたり、学校帰りによって、もくもくといろいろな作業をしたりしているとのことです。



今回、現地で参加した Google Product Experts のメンバーです!筆者を含めて3名。あとは Google Meet を利用したオンラインでの参加でした。

アイスブレイク - Google Product Expers に参加したのは何故?




いくつかのアイスブレイクネタがありましたが、これが結構盛り上がりました。筆者も含めて、仕事で Googleサービスを管理運用する必要性が出てきたからという理由や、なにか分からないことがあってヘルプフォーラムで質問したことをきっかけにいつのまにか。。というケースなどいくつかありました。

次にハンズオンをしました。実際に全部やると2時間コースになり、他の発表者との兼ね合いもあったので30分コース(最初の1つ目のみ)にしました。

ハンズオン - 実践!Google Apps Script を使ってより便利な Google サービスを体験してみよう! - 筆者 kimipooh




テーマ1 特定条件に一致した Gmail の添付ファイルを Googleドライブへ保存する方法

テーマ2 Google Analytics データを Googleスプレットシートに集約し、PDFでメール添付する方法


   このプレゼンテーションは、Google Apps Scriptを使ってGoogleサービスの利便性を向上する体験をするためのものです。基本的にドキュメントに沿って作業すれば簡単に使えます。

一つ目のテーマは、特定条件(Gmail検索)でGmailに添付されたメールを送信者ごとにGoogle Driveに自動保存するスクリプトです。もし、募集のためのデータを数百添付ファイルとして受け取る場合、添付ファイルを開くのに時間がかかってしまうと思います。そういった場合、本ツールを使えばその運用コストを大幅に軽減できます。

二つ目のテーマは、複数のGoogle Analytics データをまとめてHTMLとPDF形式で自動メール送信する機能です。もし沢山のGoogle Analytics を管理しデータを報告する必要がある場合には、本ツールは役立つと思います。

Google Meet の画面共有で、あちこちの画面の共有を切り替えるのに少し戸惑いましたが、割といけそうな感じでした。

GAS の開発環境を整えよう&Ad−ons開発に挑戦(中)- Fujitaさん



今回主催された Fujitaさん(写真手前)。

第1回 Google ローカルMeetup in Okayama(非公式)を開いた

でタイトルとなる「GAS の開発環境を整えよう&Ad−ons開発に挑戦(中)」や下記の発表資料とともに公開されています。

Google Apps ScriptでスプレッドシートとGoogleカレンダーを連携させて予定一括登録アドオンを作った(Qiita)


中級者向けの内容ということでした。
clasp(https://github.com/google/clasp)を使って、Google Apps Script をローカルで開発してそれを push できる仕組みとのこと。残念ながらプルリクなどの仕組みやバージョン管理はないようで、create/clone/pull/push が可能だということ。自分のスクリプトをローカルで開発したい場合には便利そうですね。

Google Apps Script のアドオン開発について知りたいと思っていたので、公開されるブログが楽しみです。発表時に提示されたのは、Googleスプレットシートに複数のGoogleカレンダーのイベントを列挙して、まとめて各カレンダーに登録するという Google Apps Scriptでした。

Apps Script as Serverless(Googleスライド) comame さん


今回間に合わなかったのですが、高校生(たぶん、日本での最年少 Google Product Expert かも)の comame さんが作成された資料を紹介しておきます。サンプルコードについては後から追加するそうです。Google Apps Script で Webサーバーをやってみようぜというノリのスライドです。

また、


が便利だよ。自分のスクリプトについてエラーログとかいろいろ出してくるからという情報提供あり。私自身は、トリガーがうまく走らない(実施にはコードに問題があった)理由をあれこれ探しているうちに上記にたどり着いた感じですが、改めて示されると便利なツールですね!


岡山電鉄 - 路面電車




岡山駅から会場までは 140円。前の電車に追いつく場合があり、その場合には割と近い位置に止まったりしていました。こういうのは京都の路面電車ではなかったなぁ、珍しいなぁと思いました。


Meetup が終わって・・・倉敷へレッツGOー!




せっかく岡山に来たので、なにか郷土料理が食べたいなーという話になって、倉敷にいって紹介してもらった郷土料理を食べてきました。




商店街を抜けてかなりあるくと、蔵屋敷が立ち並ぶ場所に出くわします。




美術館、そして人力車も走っていて、町並みもすごく良かったです、寒かったですけど。。。




さらにずっといくと、今回夕食を食べた富来屋本舗(口コミ)に到着。



利き酒セットの出てきた3種類のお酒、どれも甘めで飲みやすく美味しかったです。特に風がフルーティな感じで甘さが一番強く、手前の伊七がそれより少し甘めが抑えられていました。料理は、岡山おためしセットという、ちょっとずついろいろな郷土料理を楽しめるコースです。それで 2700円とはリーズナブル!




夜はデートコースとしてなかなか良さそうな感じがしました。白鳥も泳いでますね。

お土産




岡山といえば、桃太郎、桃太郎といえばきびだんご、ですよね!
三色入りを買ったのですが、好評だったのは白のやつだけでした。きびだんごにいろいろ味をつけると、駄目なのかなぁ。




その他、大手まんじゅう、マスカットきびだんご、高瀬舟羊羹、ハタダ栗タルトを購入。イベント用にプロジェクター持ち込んだこともあり、お土産と合わせるとかなり重くて持ってかえるのが大変でした。マスカットきびだんごは意外と美味しく、高瀬舟羊羹はとっても美味しく、ハタダ栗タルトも美味しったです。高瀬舟羊羹がなかなか見つからなかったのですが、岡山駅の新幹線乗り場近くにあるお土産屋さんで見つけました!

以上、いろいろと堪能できましたが、日本酒も美味しいですし、また行きたいですね!

2019年2月11日 @kimipooh