会社で使っている Qiita:Team が esa に移行されることになったので、早速作ってみました。

こんな感じに esa の記事を Helm Interface 上で絞り込んで、ブラウザで開くことが出来ます。

helm-esa

デフォルトでは絞り込み対象は “watched:true kind:stock” で検索された記事です。よく参照または編集するであろう記事を、Web ブラウザで素早く開く使い方を想定しています。

MELPAにも取り込まれた ので、M-x package-install helm-esa でインストールできます。

作りながら考えたこと

今回の helm-esa.el は helm-qiita.el [2016-05-06-1] の後継ツールのような気持ちで作り始めました。

最初、Qiita:Team の Stock は、esa だと Watch なのかなーくらいの考えで作っていましたが、やがてそうではないと気づきました。正確な意味で同じものはないと思います。

逆に esa の Watch は、Qiita:Team だと「通知を購読する」の記事全てです(Qiita API では取得できません)。

うーん、どうやって実装しよう?

考えていく中で、Qiita:Team は各個人で記事を Stock する作りであり、esa はみんなで Stock し、文書をみんなで育てていく設計思想だと改めて気づきました。

とは言え、何も考えずに全ての Stock 属性の記事を絞り込み対象とすると、対象記事が無駄に多くなります。

そのため、デフォルトでは汎用性のありそうな “watched:true kind:stock” を検索クエリとしつつ、“watched:true -in:日報” のように好みのクエリも設定できるようにしました。API 制限に達する可能性はありますが、"" を設定すれば全記事を対象とすることも出来ます。

工夫したのはこれだけなんですが、helm-qiita.el と比べてずいぶん柔軟なツールになりました。

ひとえに esa の設計の柔軟さによるものです。

設定方法

README.md に書いてあるとおり 、最小設定はこちらになります。

(setq helm-esa-team-name "Your esa team name")
(setq helm-esa-access-token "Your Access Token")
(helm-esa-initialize)

helm-esa-team-name は https://feedforce.esa.io/ の場合は “feedforce” を設定して下さい。

helm-esa-access-token は https://{team_name}.esa.io/user/applications から作れます。Read のスコープを付けて下さい。

手前味噌ですが、[2016-05-06-2] で紹介した方法を使うと、init.el にこのようなアクセストークンをべた書きせずに済みます。

使い方

M-x helm-esa で使えます。

helm-esa-source も用意しています。好みの helm-source を作っても良いでしょう。

私は esa の他に、自分のはてブ、自分の GitHub リポジトリ、Star を付けた GitHub リポジトリを横串検索出来るようにしています(設定はこちら )。高速に検索できるといろいろ捗ります。

カスタマイズ

helm-esa-search-query

前述のとおり、検索クエリのデフォルト値は “watched:true kind:stock” です。好みの検索クエリに変更しても良いでしょう(ドキュメントはこちら )。esa は検索クエリもだいぶ使いやすい・・・!

私はこのように検索クエリを変更しています。Watch している記事全てから、タイトルが日報から始まる記事を除外しています。

(setq helm-esa-search-query "watched:true -in:日報")

検索クエリに空文字を設定すると、絞り込み対象は全記事になります。

(setq helm-esa-search-query "")

ただし API 制限 もあるのでご注意ください。現時点では “429 Too Many Requests” が返った時点で、キャッシュファイル ~/.emacs.d/helm-esa の作成を中止します。

helm-esa-interval

デフォルトでは 1 時間に 1 回、Emacs Timer から非同期で esa の “GET /v1/teams/:team_name/posts” API を叩いて ~/.emacs.d/helm-esa を更新します。M-x helm-esa するとこのファイルが参照されます。

30 分に 1 回に変更したい場合はこのように設定します。こちらも API 制限にはご注意ください。

(setq helm-esa-interval (* 30 60))

制限事項

複数の esa team を絞り込み対象とすることは出来ません。良い設計を思いついて、気が向いたら実装するかもしれません。

余談

今回は以前と比べてマージまで時間がかかりました。レビューが厳しくなった気がします。

今回は https://github.com/melpa/melpa/pull/6186 を作ったのが 5/26 で、マージされたのが本日 6/10 なので、15 日です。

だいぶ昔になるので単純な比較はできませんが、helm-hatena-bookmark は同日helm-qiita は翌日 でした。

今回は0コメの Checklist を完璧にして PR を作成したら、8 日目に @purcell さんからコメントを頂きました。curl を直接使っているので、Windows 等への移植性が低いとのこと。

もっともな意見ですが、melpa 登録への必須条件ではなさそうだったので、すぐには直せないのでマージしてくれないかと書きましたが、コメントはありませんでした。

このままマージされなさそうだったので、昨日えいやっと request.el を使って修正 したら、別な方がマージしてくれました。

レビューは大変ありがたいのですが、以前はここまで厳しくなかったので、少々困惑しました。

@purcell さんはとても忙しいのに親切な人なのは分かっています。レビューにブレがあるのは仕方がないですね。