🤖

AlfredからSlackに投稿するworkflowをNode.jsで作る

2022/03/17に公開

AlfredからSlackに投稿するworkflowをNode.jsで作ってみました!
Node.jsを使うために「Alfy」というライブラリを利用します。
https://github.com/sindresorhus/alfy

※本記事で作成するのは極力最小構成で動くものを目指しています。
エラーハンドリングなども実装していません。

環境

Alfred4(無料版ではworkflowの作成ができないため、有料版を用意してください)
Node.js 16.13.1

手順

1.Slackでアプリを作成する

Slackアプリの作り方は以下のサイトがわかりやすいです!
https://zenn.dev/kou_pg_0131/articles/slack-api-post-message

  • 「スコープを設定する」で必要なのは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を管理できます。

  1. 作成したworkflowを右クリック
  2. open in finderを選択
  3. info.plistを任意のディレクトリに移動
  4. Alfredに戻り作成したworkflowを右クリック
  5. deleteを選択(info.plistをコピーしているのでここでは一旦削除してOK)

3.スクリプトを書いて実行する

ここからはinfo.plistを置いた任意のディレクトリで作業してください。
公式ではnpmを用いてますが、本記事ではyarnを使っています。

  1. package.jsonを生成する
yarn init -y
  1. package.jsonに"type": "module"を追加する
  2. 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
        }
    }
)
  1. 実行する
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}

成果物

実際に動かした結果がこちらになります!

参考

https://dev.classmethod.jp/articles/send-to-slack-from-alfred/
https://blog.chick-p.work/nodejs-aflred-workflow/

Discussion