2018年12月21日金曜日

【応用A】Google Apps Script を使って、特定条件に一致した Gmail の添付ファイルを「差出人ごと」にGoogleドライブへ保存する方法

Google Apps Script を使って、特定条件に一致した Gmail の添付ファイルを Googleドライブへ保存する方法自体は、すでにブログでまとめています。このうち、スターを使った判別において、「差出人ごとにフォルダ分けして保存できないのかなぁ」と疑問におもったのでやってみた応用編第1段です。
例のごとく、やってみたことをまとめたので洗練されたコードかどうかはわかりません。

サンプルコード

ロジック


1. 差出人名「表示名 <メールアドレス>」のフォルダがなければ作成する

2. Gmailの添付ファイルを、「表示名 <メールアドレス>」フォルダに「追加」保存する

という機能を追加しただけです。

まとめ


もうちょっとマシなコードにできないかなぁとは思いつつ、まぁとりあえず上記ロジックをコーディングすることはできたので、とりあえずはよしという感じですかね。
これぐらいのロジックをうまく実装できれば、特定条件に一致したGmailの添付ファイルを、差出人ごとにフォルダにまとめて保存することができるので、そこそこ実用的に使えそうだなという感じです。

2018年12月21日 @kimipooh

2018年11月29日木曜日

Google Apps Script を使って、特定条件に一致した Gmail の添付ファイルを Googleドライブへ保存する方法

2018年12月18日 スターによる判別を追加(末尾のAppendix参照)
2018年12月21日 応用A 差出人ごとにフォルダに分けて保存
2019年01月09日 応用B Gmail の未読迷惑メール一覧をメールで受信する

この手の情報はネットで検索するといろいろ見つかりますが、最初から順番にやり方を書いたサイトがなかなか見つからなかったので備忘録を込めて書き出しておくことにしました。ここで説明するコードはとてもシンプルです。実際にはこれを応用していろいろできるかなといったところです。

ロジックとしては次の通りです。
1. Gmailの検索機能を使って、「未読 AND 検索演算子」で該当メールを絞り込む
2. 絞り込んだメールに添付ファイルがあれば、それを抜き出して Googleドライブの指定したフォルダに保存(ファイル名は、「差出人_ファイル名」)
3. 絞り込んだメールの添付ファイルチェック&抜き出しが終了すれば、そのメールは既読にする

こうすることで、この Google Apps Script を何回実行しても1度のみの実行で済むことになります。このあたりは「既読」「未読」で判定するのか、「処理済み」ラベルがあるかないかなどで判別するかは好きなようにしたらよいと思います。

またファイル名が「差出人_ファイル名」となっているのは、誰から送られてきたメールなのかファイル名にいれないと、分からない場合があるということです。このあたりは、用途に応じて変更したらよいです。

Step 1. Googleドライブから Google Apps Script を使えるようにする


  1. ブラウザより Googleドライブ(https://drive.google.com)にアクセスします。
  2. 左上の「新規」> 「その他」>「アプリの追加」を選択
  3.  検索窓で「Google Apps Script」を入れて、Enterを押す
  4. Google Apps Script を「接続する」ボタンをクリック
これをすると、下図のように、Google Apps Script が追加されます。


うまくいけば、「新規」 > 「その他」に Google Apps Scriptが追加されています。


Step 2. 作業フォルダを作成し、Google Apps Script を新規作成する


新規 > その他 > Google Apps Script を開きます。

コードサンプルは次の通りです。
をコピーして、開いた Google Apps Script エディタの中身を消して、ペーストしてください。そして一旦保存してください。名前はなんでもよいです。
ここでは、「getAttechedFilefromGmailtoDrive」としています。

ここで変更が必要なのは3点です。
  1. var FOLDER_ID = '[Google Drive Folder ID]'; //保存するフォルダ
  2. var SEARCH_TERM = 'is:unread [Search Keywords for Gmail]';
  3. var myThreads = GmailApp.search(SEARCH_TERM, 0, 30); //条件にマッチしたスレッドを検索して取得 / 最大500 
一つずつ説明します。

var FOLDER_ID = '[Google Drive Folder ID]';

保存したいGoogleドライブにウェブからアクセスすると、そのURLは
  • https://drive.google.com/drive/folders/フォルダID
になります。
そのフォルダIDを指定します。
var FOLDER_ID = 'フォルダID'; 
のように設定します。

var SEARCH_TERM = 'is:unread [Search Keywords for Gmail]';

このサンプルコードでは一度に処理できる数は最大500です。
加えて、Google Apps Script の制限事項として、5分以内で処理がおわる必要があります。そのため、ある程度絞り込む必要があります。

is:unread は「未読」を意味して、未読 + 特定条件になります。
たとえば、特定の目的に沿って添付ファイルを送ってそれをまとめて1つのフォルダにいれたいとしましょう。
その場合には、件名を決め打ちにしてもいいですけれど Googleフォームなんかを使わない限り、誰か件名のタイプミスが生じる可能性があります。
そのため、エイリアスをつかうのがオススメです。
 ◯◯@gmail.com 
だとするなら
◯◯+hogehogeevent2018@gmail.com 
などの宛先におくってもらう(エイリアス機能で◯◯@gmail.com に届く)。
そして有効期限が、 2018年12月10日〜12月31日だとするなら


var SEARCH_TERM = 'is:unread to:◯◯+hogehogeevent2018@gmail.com before:2019/01/01 after:2018/12/10';

という条件設定になります。つまりは、下記の4つをすべて満たすメールということになります。
  1. 未読
  2. 宛先「◯◯+hogehogeevent2018@gmail.com」
  3. 2019年1月1日以前(つまり1日前の 2019年12月31日)
  4. 2018年12月10日以降

var myThreads = GmailApp.search(SEARCH_TERM, 0, 30); 


この場合、条件にマッチしたメールから最大30件抽出する設定です。最大は500までです。ここで注意点は、一日に Google Apps Scriptで抽出できる件数上限が低いことです。


の Email read/write (excluding send) によれば、
  • 無料版Gmail  20,000件/日
  • G Suite 50,000件/日
です。
一回30件なら、666回まで実行できますが、最大の500にすると わずか40回実行するだけで 20,000 回になります。もし5分おきに自動実行するトリガーをしかけていたなら、1時間に12回実行されるわけなので G Suite なら耐えられますが、無料版はオーバーしちゃいますので注意。

STEP3. 手動実行による動作検証



上図の「再生」マークをクリックしてください。
最初の1度目は、Google Apps Script が Gmail等にアクセスする許可を聞いてきます。「許可」してください。

これで意図したとおり Googleドライブにデータが入っていたら成功です。
また2度目に実行したときに、同じ添付ファイルが保存されていないことも確認してください。



上記は Word を抜き出した例です。

付録:時間による自動実行




  1. Google Apps Scriptエディタの編集メニューにある「現在のプロジェクトのトリガー」を選択します。
  2. 「+ トリガーを追加」ボタンをクリック
  3. 以下のように「時間主導型」にして、頻度を設定します。
上記だと1時間ごとに、getAttechedFilefromGmailtoDrive ファイルに保存した getMail関数が呼び出されます。

Appendix: 既読判別ではなく、スターによる判別をつかう


既読での判別は、メールを読まない場合はいいのですが、メールを担当者が読みながらシステムを稼働したい場合には使えません。その場合には既読の代わりにスターを使って判別する方法があります。ただし is:starred の場合には、スターがついた「スレッド」ごと判定されるため、is:unread のようにうまくいきません。そのことも含めて説明します。

サンプルコード

既読と異なるのは、Gmail検索でスター判別するのではなく、メッセージを処理する中でそこにスターがついているかどうかで判別しています。このコードは、【GAS】Gmailのメッセージにスターがついているか判定する方法とスターを付与する方法を参考にさせていただきました。

まとめ


Google Apps Script で一括処理はとても手軽で便利なのですが、制限があることに注意してください。それを超える場合には、たとえば電子メールソフトをつかうことで解決するかもしれません。

Thunderbird(IMAP設定)+ AttachmentExtractorアドオンで特定ラベルのメール内添付ファイルを一括保存(https://kitaney-google.blogspot.com/2014/09/googlegmail.html の「Appendix: 取り込んだメールから添付ファイルだけをファイルとして取り出したい!!」参照)

などの方法もあります。

2018年11月29日 @kimipooh

2018年11月17日土曜日

Pixel 3 で夜景モードを試してみた

現地時間18時に、ジャカルタのとある場所の室内から外の写真を撮っただけなので、そこまで参考になるかどうかはわかりません。ただ、試したことは備忘録として残しておかねば!ってモチベーションで書いてます。

まずは Google Play から Googleカメラのアップデートを確認




アップデートして、カメラのその他に「夜景モード」が追加されていたら準備万端です!

下記のように、かなり綺麗に写っているなぁと思いました。
特に暗いところになると、Googleカメラが、「夜景モードを試す」というメッセージを出してくれます。そこをタップしたら夜景モードになります。便利ですね!
またいろいろと試してみなければと思います!

夜景モード




通常モード(フラッシュなし)





iPhoneX のカメラ(通常モード、フラッシュなし)




iPhoneX の Night Camera アプリ




後に空港内から外の景色をとると


通常だと、かなり暗いですね。

下記のように夜景モードだとかなり明るくなっているのが分かります。これは結構つかそうですね!



2018年11月17日 @kimipooh

2018年11月12日月曜日

Google クラウドにデータってどのように保存されてるのだろう?

Google サービスを使っていると、そのデータが Google のどこかのデータセンターにあるサーバーに暗号化されて保存されているだろうというイメージまでは理解できますが、実際にどのような手法で保存されているかまでは分からないと思います。そのため、たとえばサーバーからデータが盗まれたり、見られたりすると漏洩するんじゃないかと不安に思う場合もあるかもしれません。

その疑問について、10月23日に開催された Google Cloud Summit '18 in 大阪 の展示ブースのや実際に説明を聞きました。そのことを紹介してみたいと思います。

たとえハードディスクを Google データセンターから盗み出しても意味がない


ファイルは、複数拠点・複数サーバーにランダムに分散保存されるので、1つのデータセンターのデータをまるごと盗んだとしても、目的にファイルを元の形にすることは不可能に近い。さらにデータセンターもGoogle社員だとしても、ごく少数の人しかアクセスできない堅牢なものにしているでしょうから、Google クラウドに保存されたデータを元の形として盗み出すのはほぼ不可能だと思いました。


上記が全体像のようですが、いまいちイメージがわかないと思います。
展示ブースのデモを順を追ってみてみましょう。

Step 1. 暗号化された通信を使ってデータを Googleクラウドに保存



Step 2. 複数ファイルに分割し、分割データを鍵付で暗号化



いきなりファイルを分割した上で、分割した各ファイルを別々に暗号化して、暗号鍵でロックしてしまうわけですね。

Step 3. 暗号鍵自体を、別の暗号鍵でさらに暗号化





暗号鍵自体を、別の暗号鍵で暗号化すると。つまり分割の際にアクセスを防ぐためのかけた暗号鍵を盗まれたとしても、暗号鍵自体を暗号した別の暗号鍵も一緒に得ることができないかぎり、1つの分割ファイルさえ復号化できないという念の入れようですね。

 Step 4. 分割した暗号ファイルは、それぞれ別の場所に保存


データセンター内の物理的なディスクを盗まれても、データの復元は不可能。どこの場所に保存されてるかはランダムであり、すべてを手探りで探し出すことは不可能とのこと。

また、データセンターの1つが完全破損しても、データセンター間で分割した暗号ファイル単位で相互バックアップしているので、他のデータセンターから瞬時に補完し、問題なくファイルを復元できる。

とまぁ、念には念をいれて拠点もサーバーやディスクの保存場所もランダムで複数箇所に保存されているなら、それら全部を探し出すのはちょっと不可能じゃない?と思っちゃいますね。

 Step 5. ファイルが更新された場合には?


 

ファイルを更新した場合には、別鍵で暗号化しなおし。

このあたりは使い回しをせずに鍵は毎回作り直しというのがいいですね。

疑問点:複数箇所に分散保存されたデータを高速復元可能なのは何故?


ここまで見ると、たった1つのファイルに対して世界中に散らばっているデータセンターに分散保存しているなら、そのファイルへのアクセスが遅くなるよね?だってアクセスするにはネットワーク越しに分割ファイルを集めてきて、これを復号化して元のファイルに戻すことが必要。そのためには、分割ファイルをネットワーク越しに集めてこないといけない。それってネットワークの速度にかなり依存しちゃうよね?そのあたりは大丈夫なの?という疑問が出てきます。

これについては、Google は海底ケーブルも含めて「自社」で光ファイバーを直接世界中に張り巡らせているため、自社内LANが、世界規模で構築できる出来るものすごいことをしているとのことでした。そのため、データセンターが世界中に散らばっていても、そのネットワークは Google社内 LAN になるため、高速通信できちゃうってことなのですよね。

つまりインターネット接続なしに、互いに接続できちゃうわけですので、他の影響を受けずに高速通信ができると、、それならたしかに速いでしょうね、規模が巨大すぎますけど。。。

Googleクラウドに保存されるデータは、すべて上記の対応がされている


Gmailは、添付ファイルも別途分散保存されている
動画も写真もデータもすべて分散保存されている

というから、すごいですね。

オンプレミスサーバーより、クラウドのほうが安全


これは筆者の見解です。

データは海外にある、物理ディスクを盗まれてもデータ漏洩しない仕組みとなっている。

オンプレミスでもクラウドでも、データ漏えいはユーザーの意識(アカウントの不正利用など)に起因することがほとんど

Googleアカウントは、ログイン自動不正アクセス防止機能(いつもと異なる場所、端末からアクセスすると自動的に一時ブロックする機能)、2段階認証やセキュリティキーなどによる強固な不正利用防止機能がある。

何よりオンプレミスサーバーのセキュリティ脆弱性対応には膨大なコストがかかる上に、その頻度は必ずしも高くない場合もある。またサービスの質もクラウドサービスと張り合うのはかなり辛い。結局利便性を求めてついつい無料のクラウドサービスを使ってしまう場合もあり、管理が難しい

以上から、オンプレミスサーバーで構築しないといけないケースや出来る規模もあると思いますが、クラウドサービスだからデータが盗まれるんじゃないかという点については、間違った理解かなと思います。

もちろん、クラウドサービスの提供元自体が信用できないと判断する場合はあると思います。また日本の法律が適用されないケースもあるでしょう。とはいえ、これだけクラウドサービスが身近に利用されている以上、それらと向き合わずに禁止したとしても、それを使いたい側からみたら抜け穴を探して使おうとするはず。そうではなくて、利用されることを前提として、どうしたら共存できるのかを考えたほうがいいかなと思います。

2018年11月12日 @kimipooh

2018年10月12日金曜日

【備忘録】Googleトップレベルユーザプログラムが、Googleエキスパートプログラムに名称変更・・

Google公式Twitterでつぶやかれた
をみて、Google トップレベルユーザープログラムのサイトをチェックしてみると


のように、Googleプロダクトエキスパートプログラムに名称変更するという注意書きとリンク先が書かれていました。まだサイト自体は英語のみで準備中のような感じですが、さすがに名称変更しただけで何も変わらないなんてことはないでしょう。どのように変わるか今後が楽しみです。

なお現在の筆者の Google プロダクトヘルプフォーラムでの称号を記念にスクリーンショットとっておきました。もしかしたら、何か変更になってしまうかもしれませんしね。

Gmailヘルプフォーラム

Chromeヘルプフォーラム

となっています。

今月末には、 Google Product Experts Summit 2018 が米国カリフォルニア州サニーベールで開催されます。そのあたりで詳しい話が聞けるのかもしれませんね。ちょっとワクワクしてきました!

Google エキスパートプログラムについて


Gmailヘルプフォーラム等で、Google社員による発表がありましたね!

従来

  • 注目ユーザー 
  • トップレベルユーザー
  • プラチナトップレベルユーザー


新規

  • シルバープロダクトエキスパート
  • ゴールドプロダクトエキスパート
  • プラチナプロダクトエキスパート

になりました。筆者は、プラチナプロダクトエキスパートです。
バッジのほうも下記のように変わっていました。



2018年10月12日 @kimipooh

2018年10月7日日曜日

Google Product Experts Summit 2018 に招待されたので行ってきますー

今年は10月末から11月にかけて、米国カリフォルニア州サニーベルでの開催になります。今年も招待されたので、行ってきます!

Google Product Experts Summit とは


Googleプロダクトのヘルプフォーラムや Twitter をベースとした Help on Social などを通じて、それぞれのプロダクトで Google から Google トップレベルユーザーの称号を付与されたユーザー達、Google プロダクトに関わる様々な Google社員が米国カリフォルニア州サニーベルに集結してブレインストーミングや様々な製品を体験できるサミットです。
今回は少し名前が変更になっていますが、これまでも Google トップレベルユーザーサミット(英語名称は、Google Top Contributor Summit / ハッシュタグ #tcsummit)という名前で2年に1度ぐらいの頻度で開催されてきました。筆者はその2回目2013年から Gmail、Chrome、G Suiteのトップレベルユーザーとして参加しています。

開催地について


  • 2011年 米国カリフォルニア州サンタクララ
  • 2013年 米国カリフォルニア州サンノゼ
  • 2015年 米国カリフォルニア州サンフランシスコ
  • 2017年 シンガポール(3地域に分けて開催)
  • 2018年 米国カリフォルニア州サニーベル

2011年、2013年、2015年は、マウンテンビューにある米国Google本社でも開催しています(2011年は、Google Japan Blog で公開されている「グローバル トップレベル ユーザーサミット 2011 のご報告」を参照)。2013年、2015年、2017年については、イベントまとめページに掲載しています。

どれぐらい参加しているの?


第1回目は、Googleトップレベルユーザーだけで、日本から4名、全世界から250名ぐらいだったサミットが、2013年には日本から筆者を含む7名、全世界から500名を超える人数が参加するようになり、2017年にはついに3地域に分けた開催になりました。今年はまた米国に集結することになります。過去のサミットでは、Google社員の方々も相当数参加されているため、今年は一体何名が参加することになるのでしょうか。ワクワクしますね!

2018年10月7日 @kimipooh

2018年10月4日木曜日

【バグ修正済み】Gmail / Inbox アプリで、旧Office フォーマット添付ファイルを開くことができない

2018年10月6日時点でリリースされた

  • Gmail 5.0.180921
  • Inbox by Gmail 1.3.180921

で本バグは修正されました。



旧Office フォーマットというのは拡張子でいうなら、doc, xls, ppt のことで、Office 2013以前のソフトで保存した形式になります。最近、Gmail ヘルプフォーラムで、旧Office フォーマットの添付ファイルを iOS の Gmailアプリで開くことができない(エラーになる)というスレッドをみて実際に試してみました。
他にも米国Gmail Help Forum でも、「Office Import Error Domain error 912 ... cannot open .XLS attachement with gmail app.」という類似のスレッドがあります。
Twitter でも、iOS11.4.1 になってから開くことができないというツイートがありました。

つまり、Office 2003 や 2007、2011 for Mac あたりのアプリを使って作成したOffice書類について、iOS の GmailアプリやInbox by Gmailアプリでは現在開くことができなくなっているということですね。

検証結果


結論として、下記の環境では確かに
iOS 12.0
iPhoneX
Gmail 5.0.180909
Inbox by Gmail

操作を完了できませんでした。
(OfficelmportErrorDomainエラー912)
(null)

と開くことができませんでした。

ただし、iOS標準にメールアプリだと開くことができました。
複数のアカウントで試して再現したので、Gmail関連アプリでは旧Office フォーマットはサポートされなくなったのか、あるいは一時的なバグなのかどちらかだろうなと思います。

再現手順


  1. MacのChromeブラウザより、https://gmail.com にログイン
  2. 新OfficeフォーマットのWord, Excel, PowerPoint書類(test.docx, test.xlsx, test.pptx
    旧OfficeフォーマットのWord, Excel, PowerPoint書類(test.doc, test.xls, test.ppt
    を作成
  3. それらを Gmailに添付して送信
  4. Gmailアプリ、Inbox by Gmailアプリ、iOS標準のメールアプリで受信する
  5. それぞれ開くか確認する

下記のように6つのファイルを添付して送信


Gmailアプリで受信すると


のように受信される。これを1つずつ開くと、下記のように旧Officeフォーマットのみエラーがで開くことができない。



次に、Inbox by Gmail でも同様の結果がでることを確認。

最後の iOS 標準のメールアプリでは、添付されたファイルをタップすると、まずはダウンロードすると出てきて、すべてタップすると下記のような添付状況になります。それらを1つずつタップすると、新、旧Officeともに開くことができました。



以上のことより、iOS12の制限ではなく、特定アプリ上でエラーになるということがわかりました。一時的なことかどうかわかりません。が、不便だなと思ったら是非、フィードバックして問題を報告しておくことをおすすめします。

2018年10月4日 @kimipooh

2018年9月19日水曜日

個人向け Googleアカウントに対するサポートありの有料プラン「Google One」が日本上陸・・・

Google Japan Blog に、Google One 日本語でも、もうすぐ提供開始 という記事が掲載されました。これをみると、Google One を購入(契約)していれば、Googleのエキスパートチームにコンタクトしてやり取りできるということです。つまりはサポート窓口ができるということなのでしょうね。

Googleドライブの有料プランは、Googne One に移行される


現在、Google の追加容量を購入する (Googleドライブヘルプ)から、「Googleドライブの「Googleドライブの料金を確認」のボタンを押すと、
のGoogle One に関するページに切り替わっています。
これをみると、Googleドライブの有料ストレージプランを契約されている人は、数ヶ月の間に Google One に自動的にアップグレードされるということ。それ以外は、一部のユーザーしか体験できないそうですね。

ストレージは家族最大5名まで共有できるというので、便利そうですね。

サポート以外にも特典がありそう



をみると、単にサポートがつくだけじゃなくて、いろいろな特典もあるみたいですね。ちょっと前に、100GB プランで 250円/月(年契約なら 2500円/年)でサポートを受けられるってかなり安いですよね。先行でいろいろ試したいので、今のうちに Googleドライブの有料プランを購入しておこうかなぁ。これで Google Drive File Stream が使えるといいんですけどねぇ...

2018年9月19日 @kimipooh

2018年9月13日木曜日

2019年3月末をもって、Inbox by Gmailがサービス終了

知人のつぶやきで知ったのですが、Inbox by Gmailサービスが今年度末(2019年3月末)で終了するということ。すでにヘルプにも移行についての情報が掲載されています。


Inbox by Gmail Help Forum でも嘆き悲しむ人、Gmailへの移行を嫌う人など様々な意見が出ています。

Googleサービスって元からそういう感じ


2008年4月に G Suite for Education (旧名 Google Apps for Education)を組織的に導入し利用し始めました。その頃から Gmail との本格的な付き合いが始まりました。それから11年目になるわけですが、Googleサービスは良くも悪くも革新的な機能を試行錯誤しながら取り入れるだけではなく、あっさりとサービスを廃止する決断も速いということです。たとえば、Google Spaces というSNSサービスは11ヶ月で幕を閉じましたし、iGoogle は結構長くつづいてユーザーも結構いたはずでしたが、その役割を終了したということで終了しました。Picasa も終了しましたし、それ以外にも
あたりにまとめられていますが、結構多くのサービスが終了しています。

こういうあっさり捨てる決断はなかなか難しいものですが、そうすることで過去に縛られずに新しいものが生み出せるという側面もあるのかなと思います。それについていくユーザーは大変ですが、じゃあ使わなければいいじゃん、と思うでしょうが、利便性の高いサービスを数多く展開されているので、そういうわけにもいかないのですよね。筆者個人的には、たとえ一時的に不便になっても、ワクワクする体験ができるならアリと思う性格なので、あまり気にはなりません。

Inbox by Gmail はサブ的な位置づけだなと思っていた


でた当初は、Gmailに置き換わるものかとも思いましたが、時間が経つに連れて、Inbox by Gmailのほうはいずれ消えるのではないかなぁと思っていました。何故なら、Gmailの方の機能がどんどん増えていって、ついにはUIが大きく刷新し、Inbox by Gmailの機能の一部も使えるようになってきたためです。そうなってくると、Inbox by GmailとGmailの2つを同時にリリースする意味が薄れてくるので、いずれ統合されるのじゃないかなーとは思っていました。

今後もいろいろ派生的なサービスが生まれたり、Picasaから Googleフォトへサービスが生まれ変わるように、面白い体験をさせてくれることを期待しています!もちろん、それによって不便なところが出てきたら、しっかりとフィードバックはしておこうと思います。

2018年9月13日 @kimipooh

2018年9月6日木曜日

【Mac】gdrive ツールを利用して、写真データをGoogleドライブのOCRに一括処理しよう!

Googleドライブには、PDFや写真のOCR機能がついています。
サポートされている言語も多くて、最近ではクメール語などを試してみましたが、結構使えそうだなぁと思います。で、単体でのやり方は簡単なのですが一括処理の方法が面倒なため、備忘録として残しておきます。Windowsならバッチファイルの知識、Macならシェルスクリプトの知識があると理解度があがります。以下は、すべてMacでの利用に特化した内容です。Windowsについては、GoogleDriveのOCR機能を使って、大量の画像ファイルをテキストに変換する の情報を参考にすればできるんじゃないかなーと思います。

単体でのやり方


下記の関連サイトをみると簡単にできるはずです。


一括処理のやり方


Google Drive CLI Client ツールであり、 gdrive を使った一括処理ができます。

必要なこと


  1. Google Drive のアップロード先フォルダのフォルダIDをメモる
    https://drive.google.com/drive/folders/◯◯◯◯◯
     
    のようになっていますが、この◯◯◯◯フォルダIDになります。
  2. gdrive を使えるようにする
     【G Suite 専用】G Suite ユーザー会 EDU分科会参加 - Google Drive CLI Client ツール による Google Drive 制御 の「利用準備」を参考にして、gdrive list で Googleドライブのファイル一覧が表示されるまで作業しておきます。

Step 1. OCRしたい写真を用意する


仮に ダウンロードフォルダ(~/Download)の sample フォルダに、拡張子 jpg ファイルをいくつか入れたとします。

/Users/ユーザー名/Download/sample
┣ ○○1.jpg
┣ ○○2.jpg
┣ ○○3.jpg
┣ ○○4.jpg
┣ ○○5.jpg

ここでの写真の名前はなんでも構いません。

Step 2. OCRしたい写真を調整


  • 画像の向きを調整
    プレビューアプリで開いて、回転ツールを使って向きを調整して保存しなおします。
  • 画像容量を2MB以下にする(しなくても動きましたけれど、、保証外なので)
  • その他、https://support.google.com/drive/answer/176692 に書かれた注意点を守る


Step 3. ターミナルより、gdrive コマンドにてOCR変換しつつアップロード(単体)


まずは単体でテストします。
  • gdrive import ~/Downloads/sample/○○1.jpg  -p フォルダID
これで、OCRされた結果のGoogleドキュメントが、フォルダIDのGoogleドライブ内のフォルダにアップロードされます。写真自体をアップロードしたい場合には、 import を upload に変えてください(gdrive upload ~/Downloads/sample/○○1.jpg  -p フォルダID)

Step 3. ターミナルより、gdrive コマンドにてOCR変換しつつアップロード(複数)


まずは複数のコマンドを組み合わせて、gdrive の単体実行を複数実行するようにします。
  • ls ~/Downloads/sample/*.jpg | awk '{ printf "gdrive import %s -p  フォルダID\n", $1}'
上記がダウンロードフォルダ→sampleフォルダ内にある拡張子 jpg ファイルに対して、gdrive コマンドを発行するためのコマンドです。

ここで実際に試すために画像として次の名前を使うことにします。
  • IMG_0945.jpg ベトナム語の料理メニュー
  • IMG_1232.jpg ベトナム語の料理メニュー
  • IMG_1546.jpg ラオ語の料理メニュー
  • 遺跡案内.jpg クメール語の遺跡案内看板

すると青文字のコマンドを実行すると、

gdrive import /Users/ユーザー名/Downloads/sample/IMG_0945.jpg -p フォルダID
gdrive import /Users/ユーザー名/Downloads/sample/IMG_1232.jpg -p フォルダID
gdrive import /Users/ユーザー名/Downloads/sample/IMG_1546.jpg -p フォルダID
gdrive import /Users/ユーザー名/Downloads/sample/遺跡案内.jpg -p フォルダID

のようなコマンドが4つ出てきます。

次に一括でこれらのコマンドを実行してみましょう。最期ほどの青文字に対して | sh を加えています。 
  • ls ~/Downloads/sample/*.jpg | awk '{ printf "gdrive import %s -p  フォルダID\n", $1'} | sh

Imported 文字列 with mime type: 'application/vnd.google-apps.document'
Imported 文字列 with mime type: 'application/vnd.google-apps.document'
Imported 文字列 with mime type: 'application/vnd.google-apps.document'
Imported 文字列 with mime type: 'application/vnd.google-apps.document'

ということでアップロードされました。


上図にあるように Googleドキュメントとしてアップロードされています。
日本語も問題なくアップロードされています。

たとえば

© ເສັ້ນຫມີ່ເຫຼືອງໄກ່ລາດ - chicken noodle

- ນ້ໍາຊຸບໃສ ໄກ່ລາດ ກະດູກໂຄ່ຍຫມູ, ເສັ້ນຫມີ່ເຫຼືອງໂຮມເມດ ສູດ“ເສັ້ນເສັ້ນ” - ຕ່ອນໄກ່ລາດ , ລູກຊີ້ນຫມູ ແລະ ຕ່ອນເລຶອດ , ໂຮຍຫນ້າດ້ວຍຫອມບົ່ວ , ຫອມເປ , ຫອມປ້ອມ ແລະ ຜັກທຽມຈຽວ
- Chicken, pork soup,homemade noodle by “ sensen “ - Chicken, pork meat ball and chicken blood, with garlic and spring onions


これをみると、+ は読み取れてませんが、割といけてるっぽく思います。
改行はされずに抽出されているところが見づらいかなとは思います。
*ラオ語の専門家じゃないので、正しく抽出できているかは調べていません。目視で大体あってるかなーという感じと、Google翻訳で一応意味が通るなというぐらいです)

以上のように、写真の場所を ダウンロードフォルダ内の sample フォルダに固定するなら、そこに写真をいれて、あとはアップロード先のフォルダIDを指定すれば手軽に一括処理できそうです。ただ大量にやった場合に、どこまで耐えられるかはわかりません。

2018年9月6日 @kimipooh

2018年8月29日水曜日

新しい Gmail でメール一覧表示の受信日時表示を「日時」表示にしたい!

従来の Gmail
  • 当日=○時:○分
  • 過去=○月○日
  • 日付部分にマウスポイントをあわせる(マウスオーバー)と、○年○月○日 ○時:○分がポップアップした。
新しい Gmail
  • 当日=○時:○分
  • 過去=○月○日
このように日付部分をマウスオーバーしても、スヌーズ機能など他の機能が動いてしまい、日時詳細が表示されなくなりました。代わりにメール本文に日時が表示されるようになりました。

そうじゃなくて、一覧表示で日時まで表示したい!って思うこともあるかもしれません。
もしそうしたい場合には、Gmailのスタイルを CSS上書きによって変更することで実現可能です。

Gmail Date+Time in Mail List レシピをつかう


Firefox の Stylishアドオン用のものが
ただ Stylish は
現在利用できない模様。筆者は、Stylebot を使っているので、これを使ったやり方を紹介しておきます。

Step 1. Chrome に Stylebot 拡張機能をインストール


まず
より Chrome に Stylebot 拡張機能を追加してください。

Step 2. Stylebot のオプション設定を開く


上部アドオンメニューにある「CSS」から「オプション」を開くか



chrome://extensions/ の拡張機能リストにある 


の「詳細」ボタンから「拡張機能のオプション」の右側にある□↑マークをクリックする


のいずれかで、オプション設定を開いてください。

Step 3. CSSを適用する条件と内容を追加する




左サイドメニューより「Style」リンクをクリックして、Styes の項目から「Add a new style...」ボタンをクリックしてください。


すると上図の画面が出てきます。

この画面は置いておいた上で、

にある、


をクリックして、表示されるテキスト内容(@-moz-ducument domain から始まる)を全選択し、これをコピー&ペーストで、


先程の画面の 1 という行のところにペーストしてください。
そして URL の入力ボックスについては「mail.google.com」を入れてください。
 

そうすれば、下記のような表示になるはずです。この状態では Firefox の Stylish 形式になり使えません。


そのため、

先頭の 1行目と2行目
@-moz-document domain("mail.google.com")
{

末尾 122行目
}
を削除してください。

すると下図のようになると思います。
これで末尾にある「Add」ボタンで追加してください。

追加できたら、下図のように、Styles に項目がふえてチェックが mail.google.com にチェックが入った状態になります。これで URLに mail.google.com があれば、ここに記載されたCSSに上書きされます。無効にしたければ、チェックを外すか Stylebot自体を無効にすればよいです。


CSS上書き前


CSS上書き後


となって、若干位置がずれてるなぁとは思いますが、一覧表示で日時まで出るようになります。このStylebotによるチェックのON/OFFについては、それを変更したらブラウザのリロードをしたら反映されます。

Appendix. MailPlain のカスタム Gmail CSSをつかう


macOS で動作する MailPlain (ウェブベースで複数の GmailやGoogleカレンダー等を確認できる)であれば、カスタム Gmail CSSという設定によって、上記日時変更が可能です。カスタム Gmail CSS に上記で説明した CSS をコピー&ペーストするだけです。




ですのでそういったCSS上書き機能のあるアプリやソフトであれば、Gmailの設定を変更することは可能です。といってもGmailも仕様変更されるため、ずっと使えるかというとそうではなく、何かGmailの表示がおかしくなったなと思ったら、一旦カスタムしたCSSを無効(削除)して、チェックしてみることも大事だと思います。



2018年8月29日 @kimipooh
2018年8月30日 追記(Appendix)

2018年8月22日水曜日

【備忘録】Googleフォームの段落で英単語数(ワード数)の最大最小の制限をかける方法

Googleフォームの段落では、回答の検証最大文字数と最小文字数は、回答の検証の「長さ」で簡単に設定できます。では、単語数はどうでしょうか。いろいろな方法はあると思いますが、Google Docs Help Forum で回答された方法が簡単そうなので備忘録を込めて書き出しておきます。

正規表現をつかう


正規表現には英単語が何回出てくるかで判定する方法をとっています。よくやるのは空白が何個あるかで判定する方法ですね。ただその場合には改行について考慮しなければなりません。


例1)5単語以上、10単語以下に制限したい場合


  • ^\W*(\w+(\W+|$)){5,10}$


\w = 英単語を構成する文字(a-z, A-Z, _ ,1-9)
\W = \wの否定


先頭から、0個以上の非単語文字
(1つ以上の単語文字(1つ以上の非単語文字か末尾))を5回以上、10回以下繰り返す
終端

そのため、I'm はもとより HogeHoge's, 1-2 なども2単語と判定します。


例2)5単語以上、10単語以下に制限したい場合( ' と -  はカウントしない )


' や - を含んでも 1単語とするためには、 

  • ^\W*([\w'-]+(\W+|$)){5,10}$
先頭から、0個以上の非単語文字
(1つ以上の[単語文字 or ' or -](1つ以上の非単語文字か末尾))を5回以上、10回以下繰り返す
終端

この赤い部分のように単語文字に ' と - を追加しておけばよい。

他にもよい方法はあるかもしれませんが、とりあえず上記で事足りそうなのでメモとして残しておきます。あるいはそのうち誰かのツッコミが入るでしょう (^^;

2018年8月22日 @kimipooh

2018年8月8日水曜日

ビジネス用メールアドレス(無料Gmailをベースに、G Suiteアカウントを付与するサービス???)について

いつの間にか浦島太郎になっていました。
G Suiteに新しいサービスが追加されたのか、「ビジネス用メールアドレス」なるサービスができてました。いつできたのだろう。

無料版 Gmail に対して G Suite のアカウントが追加されるようなイメージか


G Suiteの機能を限定的につかいつつ、別枠の扱いになっているサービスのように推測します。これは無料版Gmailに対して独自ドメインのG Suiteの1アカウントを紐付けて、無料版Gmailに対して、G Suiteアカウントが追加アドレスとして利用できるのですね。つまり、無料版 Gmailで、無料版Gmailに加えて、G Suiteアカウントのメールを1つ送受信可能になるサービスって感じでしょうか。

さらに、契約解除したら無料版Gmailに戻れると。ただし、G Suite の追加機能を有効にする(ユーザーを追加したり等)と、無料版Gmailには戻せなくなる、ドメイン特有のサービス(ドメイン用のGoogleサイトやグループなど)はデータが消えるということが注意点みたいですね。これは結構つかえるんじゃないでしょうか。これは結構つかえるんじゃないでしょうか。

現在のところ米国、カナダ、英国で登録されたアカウントのみです。

https://support.google.com/work/mail/answer/6236599?hl=ja&ref_topic=6248365

に掲載されているとおり、日本で登録されたアカウントではまだ使えないようですね。

これは G Suiteのスタートアップ的な位置づけなのかなぁと感じました。
早く日本で展開されてほしいですよね。

2018年8月9日 @kimipooh



2018年7月8日日曜日

【備忘録】Inbox by Gmail アプリが iPhoneX に対応!



ようやくでましたね。

左が iPhoneX 非対応、右が対応版です。少し枠が広がってどのアカウントでログインしたかフッター部分に表示されるようになったぐらいが違いでしょうかねぇ。いつ対応したかをメモっておきたいので、ブログにして書き出しておきます。




2018年7月8日 @kimipooh