Gmail Filter as Code
@yamamoto_febc さんのブログ記事 で、jessfraz/gmailfilters というツールを知りました。なんでも、GmailのフィルタをTOMLで管理するツール、とのこと(実際の使用例などはkakakakakkuさんの記事 で紹介されています)。 それは素敵っぽい、ということで触ってみたところ、実際良い物っぽい感じはあったものの、TOMLというのが(個人的に)つらいし、releasedなバージョンではexportができない(機能自体はmasterにあるものの、一年前に機能開発されてからリリースが打たれていない、という点がちょっと不安)という二点が気になりました。 特にTOMLはどうにも好きになれず、やはりYAMLで書きたい、という気持ちが強かった+GWの自由研究が決まらなかったので自前で書き直し、これをGmail as Code (今はfilterしか管理できないけど、他の設定も管理できるようにしたい)からgmac と名付けました。 YAMLで設定したい — nasa9084@某某某某(0x1b) (@nasa9084) April 27, 2020 GMaC - Gmail as Code 大枠の挙動としては、jessfraz/gmailfiltersとそれほど変わりません。Gmail APIをgoogle.golang.org/api/gmail/v1 を使用して叩いているのも同じです。 jessfraz/gmailfiltersと比較して、違う点として次の様なものがあります: TOMLではなくYAMLで設定を記述する Gmail Web UIに比較的近い設定項目 jessfraz/gmailfiltersも実装しているArchiveやDeleteなどはもちろん実装 条件/アクションを個別に設定する形にした jessfraz/gmailfiltersみたいに全部まとまってるとわかりにくくない? larger_thanやsubject、has_attachmentといった条件も追加 starやimportant、category(私は使ってないけど)といったアクションも追加 OAuthの際に認証/認可ページを自動で開き、OAuth callbackも受ける jessfraz/gmailfiltersはURLと、OAuth tokenをコピペする必要がある credentials.jsonおよびtoken.json (OAuthの認証ファイル)を特定の場所に置き、そこから読み込む jessfraz/gmailfiltersは毎回ファイルパスを指定する必要がある kubectl-likeなサブコマンド配置 get/applyが個別に行え、(k8sに慣れている人は)比較的なじみやすいはず jessfraz/gmailfiltersはオプションフラグで挙動を変える方針っぽい CIで使いやすい(と思う) credentials.jsonを標準入力から読める OAuth refresh tokenを環境変数で指定できる jessfraz/gmailfiltersはファイルからのみ (そこそこ)ちゃんとテストを書いている 全部とはいえないけど・・・ jessfraz/gmailfiltersはほとんどテストがなくてちょっと怖い (そこそこ)ドキュメントを整備してある README.mdを頑張って書いた 逆にjessfraz/gmailfiltersがサポートしている、queryOrやarchiveUnlessToMeは実装していません。ORとか普通に書けばよかろう。 Manage with CI 実際に、GitHub Actionsを使用して自分のGmail Filterを管理するように設定しました。管理用のプライベートリポジトリにfilters.ymlとしてフィルタの設定ファイル(これ自体も gmac get filters -o yaml > filters.yml として出力したもの)と、次のGitHub Actions設定ファイルをおいてpushごとに適用するように構成しました。 ...