こんにちは Nash です。この記事は「URL2MD という AlfredWorkflow を go で作って公開するまでの流れについての記事」になります。
では、見ていきます。
そもそも Alfred の Workflow として「Ruby 製の URL からマークダウンリンクへのコンバーター」というものを手元で使っていました。
入力と出力は下記みたいな感じですね。
# input
https://www.alfredapp.com/
# output
[Alfred - Productivity App for macOS](https://www.alfredapp.com/)
ただ、下記について色々思うところがあってので、自作しました。
という感じで、Go 製のクローンな Alfred workflow を作っていきます。
だいたい下記の流れで作ります。
Alfred Worlflow をなんとなく先に作ってから Go でスクリプトを作りましたが、わかりやすさ重視で go→Alfred で記事は書いていきます。
go をグローバルインストールしていくが、パッケージマネージャー経由で入れることにします。
installation の通り進めて、go の version は stable の 1.14 にしてインスコし、無事 hello world まで完了。そういえば go ってコンパイル言語だったな、とここで思い出す。
コンパイルすればgo のツールチェーンが入ってない環境でも実行可能みたいなのでローカルで環境を作らないでもよかったや。
基本的な構文を理解するために REPL を入れる。
パッケージをグローバルに入れる場合はプレフィックスでGO111MODULE=on
が必要な慣習をを知らないのでハマった。というか、なんだこれ。言語若いのに負債できるの早すぎでは?とか思いをはせている間に REPL の DL が完了した。
構文はなんとなくで OK だったので公式 Doc じゃなくて Qiita の記事を適当に斜め読みしながら REPL で手を動かして「完全に理解した」状態になる。
ようやく本題のスクリプトを作る。下記参照、というかほぼ回答なのでコピペエンジニアにならないようにコードの動きはきちんと理解しながらコピペしていく。
go を書くのが初めてなのもあり、コピペがメインのスクリプトでも地味にはまりながらもスクリプトが完成。これをビルドしておき後述の Alfred Workflow の途中で実行していく。
ここまでは Go についてで、ここからは Alfred について。
Alfred Worlflow について、なんとなく理解するためにまずは手元で適当にプロジェクトを作って動かしてみた。なんとなくで出来ることはわかったので、詳細は公式 Doc とわかりやすそうな記事があったのでここを読んで Workflow で出来ることは一通り「完全に理解した」状態になる。
思ったよりも GUI プログラミングで出来ることが多い。NoCode で Alfred のみで今度はなにか作ろうかな。
こんな感じで Workflow を作成する。
workflow 側でエラー時のハンドリングを行ってみた。本当は、panic 系のエラー発生時は Github に Issue まで投げさせたいなー。
とにかくこれで Alfred Workflow 自体は完了して無事にローカルでも実行できるようになった。
作った Workflow を公開していく。Alfred の Workflow の実態はただのxxx.plist
ファイルみたい。これと+ α のファイル群、例えば go のコンパイルファイルやロゴファイルの png などをまとめれば OK。
ただ、公開にあたって下記2つについて考える。
幸い、すでに先駆者もいて、この記事のやり方が良さそうなのでそのまんま踏襲した。
この方法では、下記の通りとなる。
というわけで無事に Alfred の Workflow 公開まで完了した。
本来なら Packal という AlfredWorkflow の Hub にも自作したものを登録していくんだろうけど、ただのクローン Workflow なのでそこまではやらないで良いかなー、という気持ち。
URL2MD という Alfred Workflow を go で作った話でした。
ひとまず Alfred Workflow の作り方は理解できたので、今後のエンジニアライフにおいて下記の選択肢を持てるようになったのはよかったです。
この記事がどなたかの助けになれば幸いです。