GoでAlfred Workflow作成

スポンサーリンク

はじめに

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

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

Goでslackのチャネルを開くAlfred Workflow作ってみた
はじめにこちらの記事はZennで投稿した「Goでslackのチャネルを開くAlfred Workflow作ってみた」の再投稿になります。Goの勉強がしたいと思い、普段使用しているAlfredのWorkflowを作ってみました。今回...

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での実装です。

まずはプロジェクトを作成します。

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

参考

タイトルとURLをコピーしました