2019年5月17日金曜日

【G Suite専用】 Google Drive File Stream for Mac で同期できない、アカウントが停止する場合

自分が遭遇して解決するのに苦労したので備忘録としてまとめます。


基本的な対応


  1. システム環境設定 > セキュリティ にて、Google, Inc. に対して「許可」があれば許可する
  2. Google Drive ファイルストリームアプリを終了し、 $HOME/Library/Application Support/Google/DriveFS フォルダをリネームし、アプリを起動する(初期化)
  3. セキュリティ対策ソフトをオフにしてアプリを終了、起動しなおしてみる
    *解決するなら、セキュリティソフトのリアルタイムスキャンに対して
     /Volumes/GoogleDrive/
     /Users/{username}/Google Drive File Stream/
    の2つのフォルダを除外設定する
  4. ターミナルなら「sudo spctl --master-disable」をして、アプリ制限をなくしてアプリを終了、起動しなおしてみる
    *あとで、 sudo spctl --master-enable で設定をもとに戻しておく


までは


あたりにまとめて掲載していますし、他のサイトにも掲載されています。

Google Drive ファイルストリームのネットワーク設定を確認(プロキシ設定)


もしこれでも解決できない場合には、Google Drive ファイルストリームのプロキシ設定の問題かもしれません。筆者は

  • 同期が終わらない
  • DriveFSフォルダを削除すると、ログイン後にアプリが停止する
  • 他のアカウントでログインしようとしたら、プロキシ設定を見直せと警告がでる
という状況あったので、下記のように、設定 > ネットワーク設定のプロキシ設定を変更することであっさり解決できました。



 



2019年5月17日 @kimipooh

2019年5月6日月曜日

GmailのフィルタをCUI ツールで管理してみよう!

大量の Gmailのフィルタをどのように管理していますか。数十程度なら Gmail設定のフィルタから直接管理するほうが早いと思います。でも百を超えてきたら無理っぽい気がします。ではどういう方法があるのでしょうか。

  1. エクスポートしたフィルタデータ(XML)を編集して、インポートする
  2. Gmail APIを利用してフィルタを管理する
  3. ツール側で管理したフィルタ設定を Gmailにインポート(追加)する

あたりが考えられます。
「1」の方法は、エクスポートした XMLファイルをテキストエディタなどで開いて、直接編集することもできます。構造さえ理解できれば、下手なツールをつかうより直接編集したほうが早いだろうと思います。

「2」の方法については、Managing Filters (Gmail API) にあるGoolge Developer ガイドを使って直接プログラミングをするか、何らかのツールをつかうことになると思います。そのツールは少し探した程度では見つけられませんでした。

「3」の方法については、 gmail-yaml-filters が便利かなと思います。

ということで管理といっても、「3」の部分的なものになりますが、その紹介をしてみたいと思います。なお gmail-yaml-filters は プログラミング言語 Python を使ったツールになります。そのため、そこも含めた紹介をします。

参考GUI to manage Gmail filters? (Stackoverflow)

*環境:macOS 10.14.4 

STEP 1.  gmail-yaml-filters (GitHUB) を使えるようにする


1. Python3をインストールする


macOS 10.14 には、python 2.7 系が入っていますが、最近の主流は 3.x 系のため、そちらを使うことにします。

  1. https://www.python.org/downloads/ より macOS 用インストーラーをダウンロードしてインストール。
    ※ 2019年5月6日時点で、Python 3.7.3 が最新版です。
  2. ターミナルを起動して、
      python3 -V 
    コマンドにて、3.7.3 と出てきたらインストール成功しています。

2. pip コマンドへのPATHを通す


pip は、 Python に付随(2.7.9以上、3.4以上)していますが、PATHが通っていません。
macOS であれば

/Library/Frameworks/Python.framework/Versions/3.7/bin

に対するPATHを設定する必要があります。
今回は pip コマンドしか使わないので、すでにPATHが通っているはずの /usr/local/bin へ pip のシンボリックリンクを置くことで代用します。

ターミナルより(以下、一行で書く)
  • ln -s  /Library/Frameworks/Python.framework/Versions/3.7/bin/pip /usr/local/bin/pip
とすると /usr/local/bin/php に本体「 /Library/Frameworks/Python.framework/Versions/3.7/bin/pip」のシンボリックリンクが作成されます。ので /usr/local/bin/ にPATHが通っていれば 
  • pip -V
    pip 19.1 from /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pip (python 3.7)

のように pip コマンドが使えるはずです。

3. gmail-yaml-filters (GitHUB) をインストールする


ターミナルより

  • pip install gmail-yaml-filters

STEP 2. gmail-yaml-filters 用の設定ファイルを作成する


gmail-yaml-filters  の Sample Configuration を参考に作成してみてください。
ここでは my-filters.yaml ファイルに保存することにします。なおタブは使ったらエラーになるので注意。

例1)差出人が hogehoge@sample.com かつ 添付ファイルを含む場合、「Sample」ラベルを付与する
-
  from: hogehoge@sample.com
  match: "has:attachement"
  label: Sample

例2)差出人が、 hogehogeA@sample.com 以外、または hogehogeB@sample.com  以外の場合、「Sample2」ラベルを付与する。
-
  from: 
    any: [-hogehogeA@sample.com,-hogehogeB@sample.com]
    label: Sample2

例3)差出人が、hogehogeA@sample.com、 hogehogeB@sample.com以外の場合、「Sample3」ラベルを付与する。
-
  from: 
    all: [-hogehogeA@sample.com,-hogehogeB@sample.com]
    label: Sample3

*これについては次の書き方もできる
-
  from:
    any:
        -hogehogeA@sample.com
        -hogehogeB@sample.com
  label: Sample3

あるいは

-
  from:  -hogehogeA@sample.com   -hogehogeB@sample.com
  label: Sample3

例1)2)3)をまとめると
my-filters.yaml の中身は次のようになります。
-
  from: hogehoge@sample.com
  match: "has:attachment"
  label: Sample
-
  from: 
    any: [-hogehogeA@sample.com,-hogehogeB@sample.com]
  label: Sample2
-
  from: 
    any:
        -hogehogeA@sample.com
        -hogehogeB@sample.com
  label: Sample3

となります。

STEP 3. Gmailにインポートする


1. Gmailで利用可能な XMLファイルに変換します。


  • gmail-yaml-filters my-filters.yaml  > my-filters.xml

とします。これで


にあるようなXMLファイルがコマンドを実行した場所にできるはずです。
※今回の例の場合、/Users/ユーザー名/ 以下にあるはずです。つまりユーザーのホームディレクトリのところにあるはず。(Macintosh HD > ユーザー > ユーザー名)

2. 既存のフィルタをバックアップします。


念の為、かならずバックアップしておきましょう。


にあるように、Gmailのフィルタ設定で、フィルタをすべて選択して「エクスポート」ボタンを押します。

3. 変換した my-filters.xml をインポート(追加)


1. Gmailのフィルタ設定にある「フィルタをインポート」リンクをクリックします。


2. my-filters.xml を選択すると、下記のようにファイルが選択されます。「ファイルを開く」ボタンをクリックします。

3. すると my-filters.xml に設定したフィルタが出てきます。意図したフィルタになっていることを確認します。確認できたら「フィルタを作成」ボタンをクリックします。

4. 下記のようにフィルタが追加されていることを確認します。



すでにあるものは管理できませんが、このように比較的わかりやすい文法で新たに書き直すことで大量フィルタの管理しやすいかもしれませんね。

2019年5月6日 @kimipooh

2019年4月23日火曜日

【G Suite】GAM でGoogleグループへのメンバー一括登録方法(macOS編)

過去に、Google Apps Manager (GAM) を使っていろいろやろう にて触りの部分は書いていましたが、少し本格的に使わないといけなくなったので改めてまとめます。Google グループの一括作成方法については

を見ればわかると思いますので、ここでは一括登録のみに特化します。

なお一括登録前にバックアップ、すなわち現在登録済みのメンバー一覧のエクスポートから説明しておきます。

なお以下は、G Suite 専用であり、G Suite 管理コンソールにログイン可能な特権管理者向けのドキュメントとして残しておこうと思ってまとめたものです。

  • 前半:すでにインストールした状態での利用方法
  • 後半:macOSへのGAMのインストール方法

グループのメンバー一覧エクスポート


1.  GAMを使った場合


グループ名:sample-ml
MLメールアドレス:sample-ml@example.com 

と仮定します。

gam  info  group  sample-ml
....
....
 member: メールアドレスA (user)
 member: メールアドレスB (user)
 member: メールアドレスC (user)
 member: メールアドレスD (user)
 member: メールアドレスE (user)
 owner: メールアドレスF (user)
 manager: メールアドレスG (user)

のように出てきます。したがって
  • gam  info  group  sample-ml  > sample-ml-back.dump
とかファイルに出力すれば、グループの設定やメンバー(オーナーやマネージャーもわかる)を取得できます。

さらにメンバーが何名登録されているかが末尾に出力されます。

2. Googleグループの管理画面よりエクスポート



上記のように、Googleグループのメンバー一覧表示のバーに「メンバーをエクスポート」があります。もちろん管理権限を持っている必要があります。

これでエクスポートすると BOM無しUTF-8のCSVファイルで保存されます。
これを Microsoft Excel で開くと文字化けします。文字化けしたくないなら、BOMありのUTF-8に文字コード変換してあげてください。

macOS であれば、CotEditor というテキストエディタで開いて


のように文字コードを BOM付きにして上書き保存したらよいでしょう。
こちらはステータス(配送エラー等)がわかるので、便利です。

Googleグループへのメンバー登録


  • gam  update group  グループ名  add member  メールアドレス

もし Word等で一行一メールでメールデータを大量にもらったのなら、それを一旦テキストファイルに保存し直した上で
  • cat  ファイル名  | awk  '{print "gam update group グループ名  add member "$1}' 
にて正しくコマンド一覧ができているか確認した上で、
  • cat  ファイル名  | awk  '{print "gam update group グループ名  add member "$1}'  | bash
で一括登録できます。実際には出力結果をリダイレクトしてファイルに保存しておくことをオススメします。
  • cat  ファイル名  | awk  '{print "gam update group グループ名  add member "$1}'  | bash  >  グループ名.log 
あたりでしょうか。

登録成功
+ ./gam update group グループ名 add member メールアドレス
 Group: グループメールアドレス, メールアドレス Add as MEMBER 

すでに登録済みのため追加しない
+ ./gam update group グループ名 add member メールアドレス
 Group: グループメールアドレス, メールアドレス Add as MEMBER Failed: Duplicate, already a MEMBER

と出てくるので、

追加を試みたメールアドレス数
grep -v '+'  グループ名.log  | wc

すでに登録済みだったメールアドレス数
grep -v '+'  グループ名.log  | grep Duplicate | wc

などをすると、登録状況がわかるかなと思います。
このあたりはコマンドでいろいろできる人なら、いろいろできるでしょう。

注意!


必ず作業する前にバックアップをしておきましょう。
万が一ミスっても、バックアップしておけば戻せますよね(最悪メンバー一覧情報があれば)
  • gam info group グループ名 > バックアップファイル名


GAM を macOS にインストール



まず最初に注意ですが、gam はコマンドラインで G Suite を直接管理するためのものです。つまり G Suite の特権管理者がメンバーの一括登録をしたいときなどにつかうだろうと思いますので失敗したら Googleグループをあっさり削除してしまったり、ユーザーを削除してしまう事がありうるということです。そのことを正しく認識した上で使ってください。つまりコマンド操作に不慣れな人は使わないほうがよいということです。

また、つかうとき以外は機能OFFにすると安心かもしれません。
  • G Suite管理コンソール > セキュリティ  > API アクセス が ON
になっていることが条件になり、ここを普段 OFF にしているとアクセスを遮断できます。
なおここがOFFになっていると

  • ERROR: 403: Domain cannot use apis. - domainCannotUseApis

のようにエラーがでます。

1. gam を macOS にインストール

bash <(curl -s -S -L https://git.io/install-gam)

Can you run a full browser on this machine? (usually Y for MacOS, N for Linux if you SSH into this machine) N

*これ Yにすると、ブラウザベースで認証をしようとしますが、 localhost:8080 にアクセスできず(いろいろしましたが)、結局 ssh のほうにしました。

Please enter your G Suite admin email address: 特権管理者のメールアドレス
Go to the following link in your browser:
URL
Enter verification code: URLにアクセスし出てきた codeを貼り付ける
が出てくるので、URLにブラウザからアクセスして、特権管理者のメールアドレスでログインします。そうすれば、verification codeが出てくるので、これをコピーして貼り付けます。

次に

https://console.developers.google.com/apis/credentials?project=gam-project-****
1. Click the blue "Create credentials" button. Choose "OAuth client ID".
2. Click the blue "Configure consent screen" button. Enter "GAM" for "Application name".
3. Leave other fields blank. Click "Save" button.
3. Choose "Other". Enter a desired value for "Name". Click the blue "Create" button.
4. Copy your "client ID" value.

というのが出てくるので、支持に従って Google Developer Console にて GAM用のプロジェクトを作成して、クライアントIDクライアントSecretキーを取得してください。このあたりの詳細は説明しません。これができないレベルだと、使うのは危ないためです。

あといくつかの質問がありますが、割愛します。
どのAPIに許可を与えるのか等、個別に考える内容のためです。とりあえず今回は Googleグループに対する権限があればよいです。

でうまく行けば、

GAM installation and setup complete!
Please restart your terminal shell or to get started right away run:
gam() { "/Users/ユーザー/bin/gam/gam" "$@" ; }

に入ります。
$HOME/bin/gam あたりに PATHを通しておくか、直接 gam を実行すればよいでしょう。

GAM が使えるかの確認


$HOME/bin/gam/gam info domain 

として、G Suite のドメイン情報が出てきたらアクセスできていることになります。

なお以下、説明時に $HOME/bin/gam/gam は gam に置き換えます。

またコマンド詳細
  • $HOME/bin/gam/GamCommands.txt
にすごく見づらいですが載っていますのでここを見ればよいです。

2019年4月23日 @kimipooh

2019年4月2日火曜日

ついに Gmailに予約送信機能が・・・!?

2019年4月1日に、公式ブログ(Gmail Blog)において、

が公開され、その中で Schedule send(予約送信)の機能がアニメーション付きで紹介されていました。エイプリルフールネタかなぁと思ったのですが、ブログ最後に
  • We may have launched Gmail on April Fools’ Day, but the last 15 years have been no joke. And we’re looking forward to what’s to come.
とあるように、いたずらじゃないよーって言っているので期待大ですね!

2019年4月2日 @kimipooh

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