はじめに
GoでAlfred Workflowを作成できるawgo
について、簡単な使い方を紹介したいと思います。
実際にawgo
を使って、Slackのチャネルを開くWorkflowを作成してみているので、そちらもご覧ください。

Alfred Workflowとは
Alfredは多機能なランチャーアプリです。
無料版でも使えるのですが、有料版を購入することでWorkflow機能が使えるようになります。
Workflow機能は、コマンドを入力することでさまざまな作業を実行してくれる機能になります。Workflow機能が使えるようになると、自作したものや公開されているWorkflowが使えるようになり、さまざまなことができるようになります。
awgoとは
awgo
は、GoでAlfred Workflowが開発できるライブラリです。
あいまい検索やキャッシュなどWorkflowを簡単に作成できる機能が含まれています。
awgoでWorkflow作成
簡単なWorkflowを作成してawgo
の使い方を理解したいと思います。
今回は単純なコマンドを入力したら、通知がとぶWorkflowを作成します。
Alfred Workflowを作成
まずは空のWorkflowを作成します。
Bundle Idは設定しないとawgo
のプログラムを実行したときにエラーになってしまうので、設定します。他の項目もWorkflowを公開するのであれば適宜埋めた方がいいです。
プログラムを実行するScript Filterと通知をするPost Notificationを配置しておきます。
処理部分の実装
続いて、awgo
での実装です。
まずはプロジェクトを作成します。
mkdir awgo-workflow
cd awgo-workflow
Go Modulesの初期化とawgo
の追加をします。
go mod init github.com/monda00/awgo-workflow
go get github.com/deanishe/awgo
これで実装する準備は完了です。
今回実装するmain.go
は以下の通りです。
package main
import (
"os"
aw "github.com/deanishe/awgo"
)
// メインAPIとなるWorkflow
var wf *aw.Workflow
func init() {
// Workflowの初期化
wf = aw.New()
}
// Workflowの実行部分
func run() {
// 表示させるアイテム一覧となる配列
items := [...]string{"C", "C++", "C#", "Python", "Ruby", "Go", "Javascript", "Typescript"}
for _, item := range items {
// 選択肢となるItemの生成
wf.NewItem(item).
Var("itemName", item). // 変数名itemNameでAlfredの変数を扱えるようにする
Valid(true) // Valid(true)にしないと選択肢に出てこない
}
// コマンドライン引数からあいまい検索
args := os.Args
if len(args) > 1 {
wf.Filter(args[1])
}
// 選択肢がなかった場合の警告メッセージ
wf.WarnEmpty("No programming language.", "Try different programming language.")
// 結果をAlfredに送信
wf.SendFeedback()
}
func main() {
wf.Run(run)
}
処理の大まかな内容としては、選択肢となるItemを生成して、コマンドライン引数であいまい検索しているだけになります。
生成したItemには選ばれたときにAlfredで使える変数に値を残すようにしています。
Alfred Workflowから実行
main.go
単体で実行しても、エラーになりWorkflowの動きがわからないので、実際にWorkflowに組み込んで実行してみます。
まずはビルドします。
go build -o awgo-workflow .
ビルドが完了したら実行ファイルをWorkflowのディレクトリにコピーします。
WorkflowのディレクトリはAlfredから確認できます。
続いて、ビルドしたプログラムを実行できるようにScript Filterの設定をします。
「Keyword」はそのWorkflowをAlfredで実行するときのコマンドになり、「Argument Optional」にすることで引数を設定できるようにします。
また、Workflow実行時の引数を{query}
で使えるように「with input as {query}」も設定します。
プログラムの実行はコマンドライン引数に{query}
渡します。
続いて、Itemを選択したときにAlfredの変数に選択したItemの値を格納していたので、その値を通知で表示するようにします。{var:itemName}
とすることで、設定した変数にアクセスすることができます。
実行してみるとコマンドだけではアイテムの一覧が表示されます。
引数を入力すると、その文字列であいまい検索してくれます。
実行すると以下のように通知がされます。
まとめ
- awgoでAlfred Workflowが簡単に開発できる