GoでAlfred Workflow作成
はじめに
GoでAlfred Workflowを作成できるawgo
について、簡単な使い方を紹介したいと思います。
実際にawgo
を使って、Slackのチャネルを開くWorkflowを作成してみているので、そちらもご覧ください。
Goでslackのチャネルを開くAlfred Workflow作ってみた
はじめに > こちらの記事はZennで投稿した「[Goでslackのチャネルを開くAlfred
Alfred Workflowとは
Alfredは多機能なランチャーアプリです。
無料版でも使えるのですが、有料版を購入することでWorkflow機能が使えるようになります。
Workflow機能は、コマンドを入力することでさまざまな作業を実行してくれる機能になります。Workflow機能が使えるようになると、自作したものや公開されているWorkflowが使えるようになり、さまざまなことができるようになります。
awgoとは
awgo
は、GoでAlfred Workflowが開発できるライブラリです。
GitHub - deanishe/awgo: Go library for Alfred 3 + 4 workflows
Go library for Alfred 3 + 4 workflows. Contribute to deanishe/awgo development by creating an account on GitHub.
あいまい検索やキャッシュなどWorkflowを簡単に作成できる機能が含まれています。
awgoでWorkflow作成
簡単なWorkflowを作成してawgo
の使い方を理解したいと思います。
今回は単純なコマンドを入力したら、通知がとぶWorkflowを作成します。
Alfred Workflowを作成
まずは空のWorkflowを作成します。
Bundle Idは設定しないとawgo
のプログラムを実行したときにエラーになってしまうので、設定します。他の項目もWorkflowを公開するのであれば適宜埋めた方がいいです。
プログラムを実行するScript Filterと通知をするPost Notificationを配置しておきます。
処理部分の実装
続いて、awgo
での実装です。
まずはプロジェクトを作成します。
1mkdir awgo-workflow
2cd awgo-workflow
Go Modulesの初期化とawgo
の追加をします。
1go mod init github.com/monda00/awgo-workflow
2go get github.com/deanishe/awgo
これで実装する準備は完了です。
今回実装するmain.go
は以下の通りです。
1package main
2
3import (
4 "os"
5
6 aw "github.com/deanishe/awgo"
7)
8
9// メインAPIとなるWorkflow
10var wf *aw.Workflow
11
12func init() {
13 // Workflowの初期化
14 wf = aw.New()
15}
16
17// Workflowの実行部分
18func run() {
19 // 表示させるアイテム一覧となる配列
20 items := [...]string{"C", "C++", "C#", "Python", "Ruby", "Go", "Javascript", "Typescript"}
21
22 for _, item := range items {
23 // 選択肢となるItemの生成
24 wf.NewItem(item).
25 Var("itemName", item). // 変数名itemNameでAlfredの変数を扱えるようにする
26 Valid(true) // Valid(true)にしないと選択肢に出てこない
27 }
28
29 // コマンドライン引数からあいまい検索
30 args := os.Args
31 if len(args) > 1 {
32 wf.Filter(args[1])
33 }
34 // 選択肢がなかった場合の警告メッセージ
35 wf.WarnEmpty("No programming language.", "Try different programming language.")
36
37 // 結果をAlfredに送信
38 wf.SendFeedback()
39}
40
41func main() {
42 wf.Run(run)
43}
処理の大まかな内容としては、選択肢となるItemを生成して、コマンドライン引数であいまい検索しているだけになります。
生成したItemには選ばれたときにAlfredで使える変数に値を残すようにしています。
Alfred Workflowから実行
main.go
単体で実行しても、エラーになりWorkflowの動きがわからないので、実際にWorkflowに組み込んで実行してみます。
まずはビルドします。
1go 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が簡単に開発できる
参考
- deanishe/awgo: Go library for Alfred 3 + 4 workflows
- aw · pkg.go.dev
- Using Variables in Workflows - Alfred Help and Support