会社で使っている Qiita:Team が esa に移行されることになったので、早速作ってみました。
こんな感じに esa の記事を Helm Interface 上で絞り込んで、ブラウザで開くことが出来ます。
デフォルトでは絞り込み対象は “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 さんはとても忙しいのに親切な人なのは分かっています。レビューにブレがあるのは仕方がないですね。