NodeJS を使った Alfred Workflow は、 Alfred から入力された情報を NodeJS スクリプトを通して Alfred の期待する形で出力する事で作れます。(入力を受け取れて出力できれば良いので特に NodeJS でなければいけないことはない)
準備
以下の通りに見ていきます。
ワークフロー作成
NodeJS 環境構築
ワークフロー作成
Alfred の Preferences からWorkflows を開き下部の+で開くコンテキストメニューにある Blank Workflow という項目からワークフローを作れます。
これを適当な名前(Blank WorkflowここではFoo)で作成します。
作成されたワークフローの上で右クリックして開くコンテキストメニューの中に Blank WorkflowここではFooOpen in Folder という項目があります。これで開くフォルダが Alfred Workflow になり、 NodeJS プロジェクトや Git リポジトリになるディレクトリになります。
NodeJS スクリプトなどを実行する際にそのファイルパスを指定する必要があります。このディレクトリ内にそのスクリプトファイルを含ませれば、ルートディレクトリからの相対パス指定でアクセスできます。
NodeJS 環境構築
Workflow ディレクトリにpackage.jsonを作り、以下の依存パッケージをインストールします。
yarn add -D nccnccはある.jsで読み込まれている依存モジュールの内容を取り込み1つの.jsファイルにしてくれるツールです。これにより作成した Alfred Workflow を別環境で使いたい場合に、一々依存解決(npmやyarnなどを用いた)をしなくても良くなります。
以下のコマンドいくつかのrun-scriptsを追加します。これでyarn devでsrc/main.jsに変更がある度コンパイルする開発モードで起動し、yarn buildでコンパイルだけされます。
npx npe scripts.dev 'ncc build --watch src/main.js'
npx npe scripts.build 'ncc build'NodeJS スクリプトを使うアクション
ワークフロー編集画面から右クリックで開くコンテキストメニューから Blank WorkflowここではFooOpen in FolderActions → Blank WorkflowここではFooOpen in FolderActionsRun Script から、そのアクションを実行する時に行われる Bash スクリプトを書けます。引数はシェルスクリプトと同様に渡されてきます。
eval $(/usr/libexec/path_helper -s)
export PATH=/usr/local/bin:$($(echo $SHELL) -ic 'echo $PATH'):$PATH
query=$1
node ./dist/index.js $queryこのワークフローのPATH変数には最初/usr/bin:/bin:/usr/sbin:/sbinとしか登録されていません。nodeが/usr/local/bin/nodeなどにインストールされてるとそのままでは実行すらできませんが、頭の2行を実行するとPATHにそのマシンのデフォルトシェルと同じ値が設定されるので使えるようになります。
後は引数をスクリプトに渡すだけです。
Run Action では最後をconsole.log(text)で出力します。そこで出力したtextが次のアクションのqueryとして渡されていきます。
もし Run Action ではなく、Script Filter の場合は、Blank WorkflowここではFooOpen in FolderActionsRun Scriptここに載っている JSON でconsole.logが必要など若干の違いはあります。
配布
Workflow 名の上で開けるコンテキストメニューに Blank WorkflowここではFooOpen in FolderActionsRun Scriptここに載っている JSONExport の項目があるので、ここから保存します。保存したファイルを Github リポジトリの Release ページなどへ上げれが誰でもそのワークフローを使えるようになります。