金曜日に FFLT で、入力した CIDR のネットワークアドレスを表示する謎ワークフローを作った話をしました。 のでスライド内で話していないことの補足を書きます。
FFLT については以下 😃
以下補足!
Alfred とは 🎩
いわゆるランチャーアプリ的なやつです。ショートカットキーで起動したウインドウからファイルの検索やアプリの起動、Web ブラウザでの検索など様々な操作を行うことができます。
OS X のみ対応。
Alfred ワークフローとは 💼
Alfred はデフォルトで提供されている機能以外にも色々と機能を拡張していくことが出来ます。その機能のうちの一つがワークフローです。
ユーザーが入力した内容をもとに、様々な機能を連結させて出力(クリップボードへのコピーやブラウザの起動等)することができます。
例えば GitHub のリポジトリをインクリメンタルに検索してそのリンクをブラウザで開く、等が出来ます。
※ ワークフローの利用には Powerpack (有料)を購入する必要があります。
Alfred ワークフローの作り方 🍴
Alfred の管理画面から作成できます。空のワークフローやテンプレート等が用意されています。
ワークフローの Finder を開いて実行ファイル(スクリプトやバイナリ)の追加をします(作成済みのワークフローの中を見ているので既に幾つかファイルがある状態となっています)。
右クリックで各アクションを追加できます。
Script Filter の中はこんな感じです。引数を必須にするかの選択や、エスケープする文字の選択、アイコンの追加等ができます。
Copy to Clipboard の中はこんな感じです。特に何もする必要はないです。
何か文字列を入れることも出来ます。{date}
等 Alfred で用意された変数も使うことが出来ます。
最後にアクション同士をつなげてあげれば完成。
Export することでワークフローを保存できるので、 GitHub 等に公開することが出来ます。
一連の流れは以下のチュートリアルが丁寧で参考になりました。
Go で IP アドレスを扱う方法 🌐
net パッケージを使っています。 ParseCIDR 関数を使うことで、渡した CIDR の IP アドレスとネットワークアドレスを得ることが出来ます。今回はネットワークアドレスだけあればよかったので IP アドレスは無視しています。
Go で JSON を返す方法 🌳
Alfred にデータを渡すためには特定の形式の JSON を渡さなければいけません。そこで、 json パッケージの Marshal 関数を利用します。
欲しい JSON の構造に合わせた構造体を定義し、 Marshal 関数で JSON へ変換します。
欲しい JSON 形式と構造体の比較してみるとこんな感じ。
{"items": [ { "title": "192.0.2.0/24", "arg": "192.0.2.0/24" } ]}
type Items struct { Items []Item `json:"items"` } type Item struct { Title string `json:"title"` Arg string `json:"arg"` }
まとめ 🐜
LT 楽しかった!内容も多岐にわたっていて飽きなかった。
Go をちまちまやっているがそろそろ書籍などで体系的に学びたい。とりあえず以下の本を買ってみたので読むぞ!( Go そのものの本じゃないけど)