GoでAlfred Workflow作成

2021.07.04
2024.03.24
Alfred
AlfredWorkflowGo

はじめに

GoでAlfred Workflowを作成できるawgoについて、簡単な使い方を紹介したいと思います。

実際にawgoを使って、Slackのチャネルを開くWorkflowを作成してみているので、そちらもご覧ください。

Goでslackのチャネルを開くAlfred 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

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は以下の通りです。

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が簡単に開発できる

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee