SlackをEmacsで使う
Emacsようの非公式Slackクライアント emacs-slack を使う方法を解説します。ほぼそのページに書いてある通りで いいのですが、tokenとcookieを auth-source で管理したりしなかったりする方法が(恥ずかしながらauth-sourceを使ったことが なかったぼくとしては)ちょっとわかりづらかったのでその辺中心に。
準備
init.el
を以下のような感じに書きます。use-package
が
使えない場合はrequire
等で代替してください。でもuse-package
を
使えるようにしちゃう方がいろいろ楽だと思います。
(use-package oauth2 :ensure t :demand t)
(use-package emojify :ensure t :demand t)
(use-package circe :ensure t :demand t)
(use-package request :ensure t :demand t)
(use-package websocket :ensure t :demand t)
(use-package slack :ensure t :demand t
:commands (slack-start)
:init
(setq slack-buffer-emojify t)
(setq slack-prefer-current-team t)
:config
(slack-register-team
:name "ワークスペースの表示名"
:default t
:token "xoxc-そのワークスペースの token"
:cookie "xoxd-そのワークスペースの cookie"
:full-add-display-names t)
)
token と cookie
ここがめんどくさいところで、アクセスするための credential である tokenとcookieを 公式webアプリから 手作業で取り出す必要があります。 ブラウザの開発者コンソールなどを使って文字列をコピペする、という 作業です。
- token は
TS.boot_data.api_token
- cookie は
d
というものですが、 emacs-slackの “How to get token and cookie” と書いてある節のとおりにやれば ok です。
token のみでいいワークスペース(少し楽)と cookie も必要なもの
(2倍めんどくさい)とがあるようですが
ぼくの場合は cookie が必要でした。
token は(cookieが必要な場合は) xoxc-
で始まる文字列、cookie は xoxd-
で始まる文字列です。
これらを上記の init.el
などの例にコピペすれば基本的には ok です。
M-x slack-start
で読み込みが始まります。
auth-source で credential を保護する
絶対他に誰も使わない環境でしたら上記で終了、でいいのですが いわゆる credential を 平文のまま設定ファイルにハードコード するのは気持ち悪い、と思います。そんなときは Emacs の auth-source を使いましょう。
auth-source とは ~/.authinfo
, ~/.authinfo.gpg
, ~/.netrc
いずれかのファイルにパスワード等の情報を記録しておくデータベース的
機能です。このファイル基本的には単純な行レコード形式の
key
value
の組み合わせなのですが、なんと!!
key
が machine
, login
, port
, password
の決め打ち
というびっくり仕様でした。(ぼくはこれで数時間はハマりました。)
とうわけで以下のような.authinfo
ファイルを作ります。以下の例では
awesomeworkspace.slack.com
とniceworkspace.slack.com
という
二つのワークスペースに同一e-mailでログインするケースを書いています。
port
でtokenとcookieを識別しています。
machine awesomeworkspace.slack.com login yagshi@hogemail.com port token password xoxc-123
machine awesomeworkspace.slack.com login yagshi@hogemail.com port cookie password xoxd-456
machine niceworkspace.slack.com login yagshi@hogemail.com port token password xoxc-789
machine niceworkspace.slack.com login yagshi@hogemail.com port cookie password xoxd-abc
次にこれを Emacs 側から参照します。*Scratch*
バッファで試します。
(auth-source-pick-first-password
:host "awesomeworkspace.slack.com"
:user "yagshi@hogemail.com"
:port "token"
)
"xoxd-789"
とこんな具合です。ちゃんと引っ張ってこられました。え?
host
にuser
って何かって?はいすみません、ぼくも良くわかってないのですが、
.authinfo
のmachine
キーは auth-source で引く時にはmachine
でもhost
でもいい。.authinfo
のlogin
キーは auth-source で引く時にはlogin
じゃだめでuser
にする。 ということのようです(←追記。環境だかバージョンによって少し違うみたいです)。 ここでは host, user, port にしました。横幅も揃いますしね。
さあ、ではinit.el
の該当部分をauth-source対応に書き直しましょう。
(slack-register-team
:name "ワークスペースの表示名"
:default t
:token (auth-source-pick-first-password
:host "awesomeworkspace.slack.com"
:user "yagshi@hogemail.com"
:port "token")
:cookie (auth-source-pick-first-password
:host "awesomeworkspace.slack.com"
:user "yagshi@hogemail.com"
:port "cookie")
:full-add-display-names t)
)
これでcredentialをハードコードすることはなくなりました。
でもまだ平文のままです。最後にこれを暗号化します。これは
簡単。単に gpg
コマンドで .authinfo
を .authinfo.gpg
に
するだけです。暗号化したら元の平文ファイルは消しておきましょう。
yagshi@x1turbo $ gpg -e .authinfo
(インタラクティブに鍵設定)
yagshi@x1turbo $ rm .authinfo
以上。