• Lightroom が快適に使える Mac
    • Mac Mini?
  • SIGMA 35mm F1.4 (EF)

洗濯機の脱水のたちあがり設定を、揺れを最大限許容するほうに変更した。

毛布を洗うときにかなり何度も脱水に失敗してすすぎからやりなおしたあげく、最終的には失敗してピーピーいっていたので、面倒だし多少の揺れ騒音は許容したほうが良いという判断をした。

Gmail のメールを OAuth 経由で読むことができることを今更ながら知った。なぜかずっと「Gmail はユーザ名・パスワード認証しかできなくて不便だな〜 パスワード書きたくないな〜 OAuth できたらな〜」と OAuth ができないものだと思いこんでいた。

で、簡単に読めるモジュールがあるかなあと思ったけど、ちょっと見た感じではないので自力で書いてみた。

Gmail + OAuth の基礎知識

概要としては

  • OAuth のアクセストークンを得る
  • メールアドレス (アカウント名) + アクセストークンを使って SASL XOAUTH2 フォーマットの文字列を作る
  • IMAP を使い、AUTHENTICATE コマンドで上記文字列を送って認証する

という感じで、OAuth は使うけれど、WebAPI で Gmail が読めるわけではなく、最終的には普通に IMAP を喋る必要がある。

ログインまでは比較的簡単で、ドキュメントを読めばあまり問題なくできた。

日本語で検索をする

SEARCH X-GM-RAW という、Gmail のウェブ版のシンタックスでメールを検索する、という機能があるのだけれど、これを使うのにかなり難儀した。というのも、マルチバイト文字列を使う場合どうすればいいかドキュメントがなく、なんとなく適当に書いても動かない。

結論からいうと、マルチバイト文字列で検索したい場合

  • IMAP の仕様上の「literal」で送る必要がある
    • literal は {bytes} をコマンド引数で指定したあと、任意のバイト列を送れる仕様 (IMAP は 7bit プロトコルだが、ここだけは 8bit が通る)
  • literal の文字コードは UTF-8 でいい
  • CHARSET UTF-8 をつける必要がある

でもって、最終的に該当部分の IMAP のリクエスト/レスポンスは以下のようになる

> NIC4 UID SEARCH CHARSET UTF-8 X-GM-RAW {47}
< + go ahead
> subject:アクティビティ  newer:2013/06/01
>
< * SEARCH 241354 241543 241544 242493
< NIC4 OK SEARCH completed (Success)

答えさえ知ってれば難しくはないけど、かなりハマった……

  1. トップ
  2. tech
  3. Gmail のメールを OAuth で読む (Perl)

「あわなそうだな」ということでも試しにやってみろ、やってみないとわからない、ということを言う人はとてもよくいるけど、アホだと思う。「あわなそうだな」ということを押しつけられたとき、やってみないとわからないかも、と思って試してみるのもアホだと思う。

物事を新しくはじめて「あいそうか」「あわなそうか」と、その結果の「あってた」「あってなかった」の組み合せなんて以下しかない。

  • 「あいそうだな」と思って実際「あってた」
  • 「あわなそうだな」と思った結果「あってない」
  • 「あわなそうだな」と思ったけど「あってた」
  • 「あいそうだな」と思ったけど「あってない」

そもそも最初から「あわなそうだな」と直感的に思うほどの苦手意識を感じているのに、結果として「あっていた」というのは、根本的にクリアのハードルが高い。

求めるのは結果として「あってた」ということだけだ。結果の頻度から考えて「あわなそうだな」ということをやるのは時間の無駄で、ただの被虐的性癖だ。

「試しにやってみろ」とか言う人は、何らかの成功体験を持っているのかもしれないけど、それは成功体験でもなんでもなくて、単に選択ミスをしたことを認めたくなくて「どんなことでも経験になる!!!」とか思い込みたいだけだ。本人の内面においては、そういう「どんなことでも経験になるんだ……」と思い込むことは健康上悪くないと思うけど、他の人にも同じような失敗をさせようとする人ってのは限りなく愚かで害でしかない公害みたいな存在だと思う。

やってみないとわからないかも、と思いながらやってみることをやめよう。