2020/03/202020/03/20

URLからMarkdownへ変換するAlfredWorkflowをGoで作って公開した

こんにちは Nash です。この記事は「URL2MD という AlfredWorkflow を go で作って公開するまでの流れについての記事」になります。

では、見ていきます。

なんで作った?

そもそも Alfred の Workflow として「Ruby 製の URL からマークダウンリンクへのコンバーター」というものを手元で使っていました。

入力と出力は下記みたいな感じですね。

# input
https://www.alfredapp.com/

# output
[Alfred - Productivity App for macOS](https://www.alfredapp.com/)

ただ、下記について色々思うところがあってので、自作しました。

  • ruby 製の markdown を使ってたけどたまにバグる
  • Alfred で Workflow をきちんと作ってみたかった
  • Go でなんか作ってみたい(その場の思いつき)

という感じで、Go 製のクローンな Alfred workflow を作っていきます。

AlfredWorkflow を Go で作る

だいたい下記の流れで作ります。

  • Go でスクリプトを書く
  • Go のスクリプトを使いながら、Alfred の Worlflow を作る

Alfred Worlflow をなんとなく先に作ってから Go でスクリプトを作りましたが、わかりやすさ重視で go→Alfred で記事は書いていきます。

Go:環境構築〜HelloWorld

go をグローバルインストールしていくが、パッケージマネージャー経由で入れることにします。

installation の通り進めて、go の version は stable の 1.14 にしてインスコし、無事 hello world まで完了。そういえば go ってコンパイル言語だったな、とここで思い出す。

コンパイルすればgo のツールチェーンが入ってない環境でも実行可能みたいなのでローカルで環境を作らないでもよかったや。

GO:基本構文の理解

基本的な構文を理解するために REPL を入れる。

パッケージをグローバルに入れる場合はプレフィックスでGO111MODULE=onが必要な慣習をを知らないのでハマった。というか、なんだこれ。言語若いのに負債できるの早すぎでは?とか思いをはせている間に REPL の DL が完了した。

構文はなんとなくで OK だったので公式 Doc じゃなくて Qiita の記事を適当に斜め読みしながら REPL で手を動かして「完全に理解した」状態になる。

GO:スクリプトを作る

ようやく本題のスクリプトを作る。下記参照、というかほぼ回答なのでコピペエンジニアにならないようにコードの動きはきちんと理解しながらコピペしていく。

go を書くのが初めてなのもあり、コピペがメインのスクリプトでも地味にはまりながらもスクリプトが完成。これをビルドしておき後述の Alfred Workflow の途中で実行していく。

ここまでは Go についてで、ここからは Alfred について。

Alfred:基礎知識

Alfred Worlflow について、なんとなく理解するためにまずは手元で適当にプロジェクトを作って動かしてみた。なんとなくで出来ることはわかったので、詳細は公式 Doc とわかりやすそうな記事があったのでここを読んで Workflow で出来ることは一通り「完全に理解した」状態になる。

思ったよりも GUI プログラミングで出来ることが多い。NoCode で Alfred のみで今度はなにか作ろうかな。

Alfred:Workflow を作成

こんな感じで Workflow を作成する。

alfred-workflow

workflow 側でエラー時のハンドリングを行ってみた。本当は、panic 系のエラー発生時は Github に Issue まで投げさせたいなー。

とにかくこれで Alfred Workflow 自体は完了して無事にローカルでも実行できるようになった。

Alfred:Workflow を公開

作った Workflow を公開していく。Alfred の Workflow の実態はただのxxx.plistファイルみたい。これと+ α のファイル群、例えば go のコンパイルファイルやロゴファイルの png などをまとめれば OK。

ただ、公開にあたって下記2つについて考える。

  • コード管理
  • AlfredWorkflow の DL 置き場

幸い、すでに先駆者もいて、この記事のやり方が良さそうなのでそのまんま踏襲した。

この方法では、下記の通りとなる。

  • コード管理= Github
  • DL 置き場= Github の Release 機能

Alfred:完了

というわけで無事に Alfred の Workflow 公開まで完了した。

本来なら Packal という AlfredWorkflow の Hub にも自作したものを登録していくんだろうけど、ただのクローン Workflow なのでそこまではやらないで良いかなー、という気持ち。

まとめ

URL2MD という Alfred Workflow を go で作った話でした。

ひとまず Alfred Workflow の作り方は理解できたので、今後のエンジニアライフにおいて下記の選択肢を持てるようになったのはよかったです。

  • 複雑な AlfredWorkflow でも簡単に作れそう
  • そもそも NoCode な Workflow でもかなり色々できそう

この記事がどなたかの助けになれば幸いです。

Nash
Nash
プログラミングが好きな人。SE→ITベンチャー→フリーランス。日本を出て、海外で働いて、最終ゴールは月で生活すること。