はじめに
仕事やプライベートで長いことSlackを使ってきましたが、ようやくSlackのAPIを完全に理解しました。つまりチュートリアルを修了しただけですが忘れたくないのでまとめました。
SlackのAPIを操る
まずは認証用のトークンを発行します。そのためにここからアプリを作成します。「From scrach」を選択して手動作成を行っていきます。アプリ名を適当に入力してインストールするワークスペースを選択したら作成を押して下さい。
下図が表示されたら今回のアプリで使うツールを設定するのですが、「Permissions」を選択します。
選択するとOAuthと認可設定ページに遷移すると思います。下図の設定セクションで「chat:write」と「file:write」の権限を付与します。「User Token Scopes」で権限を与えることでユーザーとして振る舞う事が出来るようになります。
後述のVimプラグインのために下記の権限も付与します。
identify
channels:history
groups:history
im:history
mpim:history
channels:read
files:read
groups:read
im:read
mpim:read
search:read
users:read
channels:write
chat:write
files:write
groups:write
あとは上の方へスクロールしてワークスペースにインストールするボタンを押したらSlackの方の設定は完了です。発行されたトークンは後で使うので控えておきます。検証には下記のコマンドを実行してメッセージが送れるか確認して下さい。
$ curl -XPOST -d 'token=【トークン】' -d 'channel=【チャンネルID】' -d 'text=hogemoge' 'https://slack.com/api/chat.postMessage'
Slack APIのエンドポイント一覧や使い方などの確認には公式ドキュメントが分かりやすかったです。
そしてVimでSlackする
SlackのAPIを完全に理解した後にすることと言えば当然決まっています。VimでSlackをします。まさにVim駆動開発です。VimでSlackをするプラグインは幾つかあったのですが、軒並みバグ対応中で手元では動かなかったためコマンドを作ることにしました。
~/.vim/command.vim
というファイルを作り下記のコードを記述して下さい。webapi-vimプラグインが必要なので未インストールの方はそちらからインストールをお願いします。
" slack投稿
command! -nargs=1 SlackPost :call s:SlackPost(<f-args>)
function! s:SlackPost(message)
let token = '【トークン】'
let channel_id = '【チャンネルID】'
let url = 'https://slack.com/api/chat.postMessage'
" messageをPOSTする
let res = webapi#http#post(url, {'token': token, 'channel': channel_id, 'text': a:message})
endfunction
更に.vimrcで上のファイルを読み込ませます。
source ~/.vim/command.vim
そうしたらVimを再起動して:SlackPost hogemoge
とすると指定したチャンネルにトークンを発行したユーザーとしてメッセージが投稿されます。
edit-slack.vim
edit-slack.vimというプラグインを知り乗り換えました。まずは通常通りedit-slack.vimプラグインをインストールします。続いて裏側で実行するSlackとの通信処理部分もビルドするのですがGoで行うので入れていない人は下記を実行して下さい。
$ brew install go
Goを入れたらedit-slack.vimプラグインの階層直下にedit-slack実行ファイルが置かれるようにします。
$ cd ~/.vim/plugged/edit-slack.vim
$ git clone https://github.com/yaasita/edit-slack.git
$ cd edit-slack
$ go build
※作成されたedit-slackという実行ファイルをedit-slack.vimディレクトリの直下に移す
$ ~/.vim/plugged/edit-slack.vim
├── LICENSE
├── README.md
├── autoload
│ └── edit_slack.vim
├── edit-slack
├── plugin
│ └── edit_slack.vim
└── syntax
└── slack.vim
あとは.vimrcに下記を記述します。
let g:edit_slack_token = "【トークン】"
let g:edit_slack_debug = 1
set fileencodings+=utf-8
set encoding=utf-8
vim slack://ch
とするとチャンネル一覧が表示されて送信したいチャンネルでgf
を開くとメッセージを入力出来るようになります。
終わりに
最近のSlackのアップデートではハドルミーティングなどがリリースされていましたが、音質や使い心地はどうなのでしょうか。見た感じではDiscordで事足りそうな機能でしたが……
ともあれSlackはAPIが豊富で他サービスとの連携が得意なチャットツールですが、その分使いこなせているか不安になります。また未知の便利機能を掘り下げられたらと思います。