読者です 読者をやめる 読者になる 読者になる

#11 AlfredのWorkflowをgoで書くと捗る話

AdventCalendar2014 仕事効率化 golang

tech.kayac.com Advent Calendar 2014 11日目です。

今年の夏にカヤックはGo言語を積極的に推進していきます 宣言が出た影響で今年のAdvent Calenderはgoの話題多めとなっております。

去年辺りから周囲がにわかにgoづいてきた時に「仕事で使うようになったら勉強する(キリッ」 って言ってたらほんとに仕事で使うようになって現在勉強中の @handlenameがお送りします。

多分にもれずgo関連のはなしです。

Alfred便利

AlfredというMac用のアプリケーションがあります。 検索して候補を絞り込んで対応するアクションを実行する、というのが主な機能で、 Webで検索したり他のアプリを起動したりが素早く行えます。

基本的な機能は無料で使えるのですが、 有料のPowerpackを購入すると Workflowという拡張機能が追加ができるようになります。 Workflowはだれでも作ることができて、たいていものは無料で公開されているので、 誰かが作った便利なWorkflowを使って日々の業務が効率化できるというわけです。

今回はこのWorkflowをgoで書くと捗る!というはなしです。 Workflow自体の作り方はググれば解説してくださっている記事が見つかりますので、 これについては割愛します。

なんでgo?

配布先環境用にビルドしたら実行ファイルを置くだけでいいというメリットは、 サーバーサイドのみならずエンドユーザー(特に非エンジニア)にローカルで使ってもらう アプリケーションにも生きてきます。

AlfredのWorkflowはエンドユーザーがダウンロードして配置するので、 スクリプト言語で実装すると環境の違いによって上手く動かないことも考えられます。 なかにはダウンロード後に「sudo cpan Hoge::Moduleしてperlのモジュールをインストールしてね!」 というWorkflowもありますが、めんどくさいですし「sudo???」というユーザーもいます。 インストールスクリプトを用意するという手もありますが、 用意する側も使う側もめんどくさいのであまりやりたくありません。

※スクリプト言語でもスクリプト一枚にまとめて 実行系さえあれば動くような仕組みが用意されている場合があります。 たとえばPerlならApp::Fatpackerで fatpackすればスクリプトひとつにまとめることができます。 もちろん万能というわけではなくて、たとえばXSを使うモジュールは この方法ではまとめることはできません。

その点、goで書かれた実行ファイルは配置するだけでよく、 なおかつコンパイルの手間も少ないので書く方も使う方もお手軽です。

とにかくめんどくさいことはやりたく無い精神が大事です。

つくってみた

という話だけしてものがなにもないというのもあれなのでひとつ作ってみました。

alfred-metacpan-workflow

入力されたキーワードをmeta::cpanで検索します。

alfred-metacpan-workflow2.png

内部でgo-metacpanという metacpanのAPIを扱うパッケージを使っていますが、 alfred-metacpan-workflowを書くために必要なAPIだけを実装したものなので 今のところ再利用はむずかしいです。もちろんプルリクはウェルカムです!

ほんとは探しても見つからなかった俺得Workflowをつくってここで公開しようと思っていたのですが、 うっかり間に合わなかったので簡単に作れる習作になってしまいました:p APIリクエストして結果をブラウザで開くだけなのであまりgoで書くメリットが生かせてませんが、 「これは標準モジュールだったっけ・・・?」といちいち気にしなくても 書けるという点はありがたいですね。

おわり

現在自分が所属しているLobiチームでも、 プロダクション環境でgoを使う計画が着々と進行しています。 goに限らず、新しい言語を勉強することはいろいろ刺激になりますね。

カヤックではそんな新しいもの好きなエンジニアや、 楽をするために苦労するのが好きなエンジニアを 募集しています!

明日はクライアントワークの星・@hilotterが 日々の知見を紹介してくれそうな予感がしています。