AlfredからSlackに投稿するworkflowをNode.jsで作る
AlfredからSlackに投稿するworkflowをNode.jsで作ってみました!
Node.jsを使うために「Alfy」というライブラリを利用します。
※本記事で作成するのは極力最小構成で動くものを目指しています。
エラーハンドリングなども実装していません。
環境
Alfred4(無料版ではworkflowの作成ができないため、有料版を用意してください)
Node.js 16.13.1
手順
1.Slackでアプリを作成する
Slackアプリの作り方は以下のサイトがわかりやすいです!
- 「スコープを設定する」で必要なのはUser Token Scopeですので、Bot Token Scopesの設定はなくてOKです!
- 「アプリをワークスペースにインストールする」まで実施してください。
2.Alfredでworkflowを作成する
Slackアプリの準備ができれば、次は実際にAlfredでworkflowを作っていきます。
必要なworkflowは「Script Filter」と「Run Script」の2つだけです。
Script Filter
Inputs->Script Filter
Script:./node_modules/.bin/run-node src/index.js "$1"
Run Script
Actions->Run Script
Script:./node_modules/.bin/run-node src/action.js "$1"
作成した2つのブロックを結びつけます
ここまででworkflowのinfo.plistが作成されます。
また、info.plistをコピーすることで任意のディレクトリでworkflowを管理できます。
- 作成したworkflowを右クリック
- open in finderを選択
- info.plistを任意のディレクトリに移動
- Alfredに戻り作成したworkflowを右クリック
- deleteを選択(info.plistをコピーしているのでここでは一旦削除してOK)
3.スクリプトを書いて実行する
ここからはinfo.plistを置いた任意のディレクトリで作業してください。
※公式ではnpm
を用いてますが、本記事ではyarn
を使っています。
- package.jsonを生成する
yarn init -y
- package.jsonに
"type": "module"
を追加する - Alfyをインストールする
yarn add alfy
4.スクリプトを用意する
srcフォルダを用意し、その中にindex.jsとaction.jsを作成する
index.js
import alfy from 'alfy';
const items = [
{ title: 'Slack投稿', arg: alfy.input },
]
alfy.output(items)
action.js
import alfy from 'alfy';
const postUrl = "https://slack.com/api/chat.postMessage";
const text = process.argv[2];
const token = process.env.TOKEN || "";
const channel = process.env.CHANNEL || "";
alfy.fetch(
postUrl,
{
method: "POST",
headers: {
Authorization: `Bearer ${token}`
},
json: {
channel: channel,
text: text
}
}
)
- 実行する
yarn alfy-init
4.環境変数を設定する
「1.Slackでアプリを作成する」で作成したアプリのtoken・投稿したいチャンネルのIDを環境変数として設定してください。
Alfredの右上にある[x]から設定できます。
Name | Value |
---|---|
TOKEN | xoxp-xxxxxx(作成したアプリのtoken) |
CHANNEL | (投稿したいチャンネルID) |
Slackデスクトップアプリ版の投稿したいチャンネルを右クリックし、「リンクをコピー」することでチャンネルIDは取得できます。
https://xxxx.slack.com/archives/{チャンネルID}
成果物
実際に動かした結果がこちらになります!
参考
Discussion