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 ncc
ncc
はある.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 ページなどへ上げれが誰でもそのワークフローを使えるようになります。