ふくらみ

膨張し続けている

Google Apps ScriptでGmailの大量の未読を一掃する

最近忙しかったのでGmailを放置していたら酷いことになった。

f:id:tfukumachi:20171001020344p:plain
画像は再現

こういう大量の未読メールを手作業で処理するのはこのクソ忙しい中では不可能である。
そういうわけで、自らの手を汚さず機械の手で虫けらのような未読を一掃することにした。

一掃しよう

使うのはGoogle Apps Script(GAS)。Google神がこの世に遣わした文明の利器である。
詳しくは公式のドキュメントか、丁寧に解説してくれるアフィサイトがググればたんまり出てくるのでそちらを見てほしい。

余談だが個人的にGASは愛用しており、メールを処理してSlackに投げたり、OPACを叩いて図書館で借りた本の期限管理をしたり、Twitterbotを作ったりしている。Javascriptなので型なんかもなく無思考で書けるのが最高なのだ。

さて、端的に誰でもわかるやり方だけ書く。
とりあえずscript.google.comにアクセスするか、Google Drive新規>その他>アプリを追加からGoogle Apps Scriptを探そう。

何か画面が出てきたら、下記をコピペ。

function unreadKiller(){
  //メインの処理
  var inbox = GmailApp.search("in:inbox is:unread"); // max 500 threads
  var unreadCount = GmailApp.getInboxUnreadCount();
  for (var i=0; inbox[i] && unreadCount>0; i++){
    if(inbox[i].isUnread()){
      inbox[i].markRead();
      unreadCount--;
    }
  }

  //500件を超える場合の処理
  //使用済みトリガー削除
  var userProp = PropertiesService.getUserProperties();
  var userPropKey = "unreadKillerLastTriggerId";
  var triggerId = userProp.getProperty(userPropKey);
  if(triggerId){
    var triggers = ScriptApp.getProjectTriggers();
    for(var i=0; i<triggers.length; i++){
      if(triggers[i].getUniqueId() == triggerId){
        ScriptApp.deleteTrigger(triggers[i]);
        break;
      }
    }
    userProp.deleteProperty(userPropKey);
  }

  //継続用トリガーの追加
  if(unreadCount>0){
    var trigger = ScriptApp.newTrigger("unreadKiller").timeBased().after(10*1000).create(); //wait 10 sec.
    userProp.setProperty(userPropKey, trigger.getUniqueId());
  }
  //ここまで
}

コピペしたら上の「関数を選択」からunreadKillerを選び、隣の三角形を押す。
すると恐らく「許可が必要です」というダイアログが出るので、許可を確認
もしかすると次のような警告が出るかもしれない。
f:id:tfukumachi:20171001022145p:plain:w300
出た場合は、「unreadKiller(安全ではないページ)に移動」を構わず押す。
f:id:tfukumachi:20171001022343p:plain:w300
こんなものが出るので、差支えなければ許可してやってほしい。

あとはGmailの画面で少しずつ経る未読数を眺めるなり、面白いアニメを見る(※10/10まで)なりしよう。




f:id:tfukumachi:20160923224800p:plain



で、何をやっているの?

メインの処理は以下のとおり。

  • Gmailの未読メールを列挙する
  • ループさせて全部既読にする

慣れた人ならお怒りだろう。こんな単純な処理のためにブログ記事なんか書いて帯域を無駄遣いするんじゃない。大体なんだ。こんなコードに何十行もかけやがって。無能め。
申し訳ないのだが、正直5行くらいで済むはずだった。そう思っていたのだ。

実は、GASのGmailAppでスレッドを一回に取得できる数には限りがある。公式リファレンスには記載がないようだが、inboxやラベル等あらゆるスレッド取得処理において、最大取得数は500に制限されている。つまり、未読が500件を超える場合は先の処理を複数回実行する必要がある。

さらに面倒なのが、実行5分制限だ。GASでは1回のスクリプトの処理が5分以内に終了していなければならない。500件の未読メールを既読にする処理は、筆者の手計測でおよそ2~3分程度の時間がかかる。つまり、1000件を超えるような場合は手動でもう一度スクリプトを実行する必要が出てくる。ファッキンシット*1

というわけで、以下の処理を付け加える羽目になったというわけだ。

  • ScriptAppのトリガー作成機能で時間主導型トリガーを10秒後にセット
    →トリガーをかませば5分制限に引っかからない
  • 使用済みトリガーは勝手に消えてくれないのでこれを削除する
    ScriptAppが妙に痒いところに手が届かないせいで、削除にはトリガーのUniqueIdが要る
  • 削除のためのUniqueIdPropertiesServiceを使って保持する

未読の数が500件を超えない人で、余計な権限を与えたくない人は//500件を超える場合の処理以下を削除すると良いだろう。

f:id:tfukumachi:20171001030615j:plain
お わ り

*1:余談だが、無料のGoogle Apps Scriptでは一日あたりのGmail処理件数が20000までという制限もあるのでこちらにも注意する必要がある

駒場キャンパス~本郷キャンパス間1160.3kmを改札を出ずに380円で移動するぞ

筆者は現在、文京区本郷7-3-1に所在する大学に所属している。この大学は目黒区駒場3-8-1にもキャンパスを有しており、前者を本郷キャンパス、後者を駒場キャンパスと通称している。

で、この大学で問題となるのは、両キャンパス間の往復である*1駒場キャンパスの最寄り駅は京王井の頭線駒場東大前」、本郷キャンパスの最寄り駅は東京メトロ丸ノ内線都営大江戸線本郷三丁目」、東京メトロ南北線東大前」とされているので*2、ふつうは井の頭線で渋谷に出て銀座線へ、赤坂見附丸ノ内線に乗り換えることが多い*3。およそ40分、330円かかる。

ある日筆者は深夜にふと考えた。こんな経路、あまりにも詰まらない。首都圏には数多の公共交通機関があるのだから、上手く乗り継げばそこそこの時間と値段でエキセントリックな経路を使いキャンパス間移動が出来るのではないか。乗換検索サイトを開いてカチカチして、都電荒川線まで使った経路を完成させたあたりでふと思いついた。駒場から本郷まで、途中で改札を一度も通らずに移動できないものか

経路はすぐに思いついた。井の頭線京王線と繋がっており、京王線に都営新宿線が乗り入れている関係で、新宿から改札を通らずに大江戸線に乗り換えられる。

駒場東大前 - [井の頭線] - 明大前 - [京王線] - 笹塚 - [京王新線] - 新宿 - [大江戸線] - 本郷三丁目

という経路が成立した。380円、17.1kmの経路である。40~50分程度かかるようだ。
東京メトロの駅を使いたければ、下北沢で小田急線に乗り換え*4代々木上原から千代田線を使い、後は適宜乗り換えれば良い。都営新宿線は九段下で半蔵門線と改札を共有しているので、上記経路を使いつつそこで乗り換える手もある。

さて、ここで当然次のような疑問が浮かぶだろう。

本郷から駒場まで、途中で一度も改札を通らずに移動する最長の経路は一体何なのか

今回はそれを明らかにしてみた。

*1:まあ、概ね学年で分けられているので人によっては問題とならないのだが、サークルとか単位の関係で問題となる人間は多数存在する。

*2:実はこれら以外にも小田急線「東北沢」、千代田線「代々木上原」、同「根津」などが利用されることもある。

*3:学部によっては東大前の方が近いので、永田町で南北線へ乗り換える。また、ケチな学生は渋谷まで歩くことで井の頭線の130円を節約する。

*4:残念ながら、後述するように2017年度中をめどにこの乗換は不可能になる

続きを読む

シン・ゴジラ「360万人疎開」の嘘と真実

シン・ゴジラに登場する「首都圏一都三県の住民360万人が疎開」という設定について、なんかどっかのアルファツイッタラーが適当なことを言いそうな予感があったので今のうちに自分なりの考察を上げておこうとおもいます。以下は2016年12月発行の同人誌『東大特撮映像研究会部誌 第壱号』に寄稿した原稿の一部です。ブログ掲載にあたり一部改めています。

 シン・ゴジラの批評をする時、誰もが使う一言がある。「考え抜かれたリアルな~」「徹底的に考証された~」などである。確かに、シン・ゴジラ劇中では本職もうなるようなディティールまで拘った、現実に即した政府の対応が描かれ、ゴジラによる被害や諸外国の対応、その他諸々が実にリアルである。しかし、よく考えてみると全然リアルじゃない、というような部分も存在する。

 そんな部分のうち、最大のものが「一都三県の住民360万人が全国に分散疎開という数字である。360万人。多いと思うか少ないと思うかは人それぞれだろうが、実は検証してみると本来あるべき数字よりかなり少ないのである。

続きを読む

はてなブログで記事にパスワードをかけて暗号化する

先日こういう記事を書きました。無駄に記事を暗号化してパスワードを入れないと見れないようにしてあります*1

fukurami.hatenablog.com

はてなブログにはブログ全体にパスワードをかける機能は用意されていますが、記事単位でパスワードをかける手段は用意されていません。
今回は、はてなブログ卑猥で変態的な記事を堂々と書きたい変質者予備軍の皆様向けに、こんな感じにパスワードをかけて暗号化された記事を簡単に作る方法を書いてみます。

*1:見なくていいです

続きを読む

卑猥な記事

卑猥な記事なので、暗号化しました。下の毛が生えてない子は見てはいけません。パスワードは英数字3文字です。

※クソ記事です

続きを読む

【レビュー】アルティメットルミナス ウルトラマン02

先日バンダイから発売された光るガチャポン「アルティメットルミナス ウルトラマン02」についての記事です。
第一弾についての記事はこちら。

fukurami.hatenablog.com

f:id:tfukumachi:20161231010733j:plain:w600

なんとガチャポンフィギュアが光ってしまう!というギミックで大好評を得た「アルティメットルミナス」シリーズですが、なんと第二弾が発売されました。オーブの時に流れたCMを見た人も多いのではないでしょうか。
早速回したところ、前回に負けるとも劣らない素晴らしい出来栄えだったので、写真つきで記事にします。

続きを読む

クリスマスにプライムビデオで見られる傑作(?)特撮クリスマス回5選

f:id:tfukumachi:20161224001734p:plain
メリークリスマス!!
ことしのクリスマス・イヴは卒論と熱い夜を過ごす予定の筆者です。色々書くものたまっててすいません。
私事ですが、以前東大特撮映像研究会から『戦隊クリスマス回大全』『特撮クリスマス回大全』という同人誌を発行しました。年末になるとよくある、販促成分マシマシの特撮クリスマス回を古いものから順に網羅したという本ですが、なんとなくムシャクシャしたので、その中でも「傑作」と言えそうな名(迷?)クリスマス回を選んで紹介しようと思います。
せっかくなので、見やすいようにAmazonプライム・ビデオで見放題のものからいくつか厳選してお届けします。 基本的には単発回で、特に前後を知らなくても気軽に見られます。 特に恋愛要素とかは無いので安心してほしい。

続きを読む