Alfred Workflowsの作り方 — Python Ver. —

この記事はCAMPHOR- Advent Calendar 2014の22日目の記事です.

こんにちは,yaitaimoです.

今回は,Macユーザな私の大好きなランチャーである,Alfredを更に便利にするためのAlfred Workflowsについてのお話です.

いざAlfred Workflowsを使ってみようと思って検索してみたときに,何が出来るのかがまとまっているページが無くて困ったので,
その開発のハードルが1mmでも下げられたらと思い,筆を取ることにしました.(元々高くはないんですが)
この記事では,Workflowsにどんな機能があるのか,それぞれ一筆書きで説明して行きます.

1. Alfredの紹介

Alfred
main-alfred
秀逸なランチャーアプリ,知らない人はとりあえず落として触ってみるとよい.
全てはここから始まるといっても過言ではない.

 

 

 

Powerpack
alfred-pp-icon
Alfredをよりよく使うための,機能拡張パック.これが実は有料.
今回のWorkflowsを作成や利用するためには必要なので,
記事を読んで良いと思ったらぜひお試し下さい.

 

 

Alfred Workflows
icon-alfred-workflow
これによって,便利な機能をAlfredに追加することができる.
自分で開発したり,公開されているものを利用したりする.

 

 

2. 便利なWorkflowsの紹介

まずはWorkflowsすごい!となるために,
実際に自分が利用しているものを3つ紹介します!

Chrome Bookmarks
Google ChromeのbookmarkをAlfredから検索して開くことが出来ます.
普段,bookmarkは,取り敢えず入れといて,見たいときには検索して一発で開く!

IP Address
ipと打ち込むと,local,publicのipアドレスが分かります.パッとわかると嬉しいやつですね.

GitHub commands
Githubのページを検索して開くことが出来ます.実際に開けるページとしては,
・followしている友達のページ
・自分にタグ付けられているissue一覧
・指定repositoryのpull request一覧
とかとか.
「Githubのあのページ,クリックして進んでいくのがいちいち大変だなぁ」
というあなたに!
ダイレクトに望みのページが開けるので時短,ストレスフリーです.おすすめ.

3. Workflowsで使える機能の紹介

次に,メインコンテンツとなる,Workflowsで利用できる機能の説明をします.
実際のWorkflowsはこんなかんじになります.

Chrome Bookmarks
Screen Shot 2014-12-21 at 11.29.38 PM

IP Address
Screen Shot 2014-12-21 at 11.29.54 PM

GitHub commands
Screen Shot 2014-12-21 at 11.30.05 PM

どのような入力にして,その出力をどれで受け取って…とパズルのような感覚ですね.
プログラマだけではなく,デザイナーや一般ユーザも,自分で便利ツールを作れる感じが良い.

部品は大きく分けて4つあり,
入力を受け取るTriggerやInputと,それを受けて実行するActionやOutputがあります.
これらを組み合わせることで,Workflowが完成します!

ここでは,Alfredを起動した時に出てくる、入力を受けるものをウインドウと呼ぶことにします(下の画像).
またウインドウに入力するときの,どのWorkflowかを指定する部分をキー,そのWorkflowに渡す部分を引数と呼ぶことにします.
Screen Shot 2014-12-21 at 11.41.05 PM
例えば,上の画像では,キーが「chrome」,引数が「ないんたん」となります.

では見て行きましょう.

Trigger
Hotkey:コマンド入力で実行される
External:外部のAppleScriptから呼び出せる
File Action:Alfredでのファイル操作一覧から実行
Contact Action:Alfredでの連絡先操作一覧から実行
Fallback Search:候補がなかった場合の一覧から実行(例:Search Google for 'hoge'

Input
Keyword:キーと引数を受け取る,引数は必須,可,なしの3つから選択
File Filter:キーと引数を受け取り,引数でファイルを検索する.このとき,jpg,png等,欲しい拡張子を設定しておくこと,フィルタを掛けられる
Script Filter:スクリプトの実行結果をリストに表示する事ができる(これがおすすめなので,後で使い方について説明します)

Action
Open File:指定したファイルを開く
– Reveal File in Finder:指定したファイルのディレクトリをファインダーで開く
Browse in Alfred:AlfredのFile Navigaton Systemで指定したファイルを開く
Launch Apps/Files:指定しておいたアプリやファイルを開く.利用には,TriggerのHotkeyやInputのKeywordからつなぐのが一般的
Default Web Search:デフォルトのブラウザでそのクエリを検索する
Open URL:指定しておいたアドレスを開く,カスタムURL(queryを後からはめ込む)も使える,単体だとWeb Searchで追加するものと同じ機能
System Command:スクリーンセーバ,シャットダウン,強制終了などが利用可能
iTunes Command:ランダム,次の曲,停止など,iTunesの操作が可能
– Run Script:bash, zsh, php, ruby, python, perl, osascriptが利用可能.ただし,ここでスクリプトを入力しておくと,alfredで自動生成されるInfo.plist(テキストファイル)の中で管理されるため,gitなどで管理する場合は,Run Script内では,python hoge.py "{query}"のように,外部スクリプトを実行する形にして切り分けたほうが良い.
– Run NSAppleScript:AlfredのメインスレッドでAppleScriptを実行する.バックグラウンドで実行するときは上のRunScriptを利用する
Terminal Command:入力しておいたスクリプトがターミナル上で実行される,ただし,この出力は次の工程では利用できない

Output
Post Notification:Notification CenterとGrowlが利用可能
Large Type:画面中央部に大きなポップアップで前工程の出力が表示される,
Copy to Clipboard:前工程の出力をクリップボードに収納する.事前に入力しておいた文面に埋め込んで,それを収納することも出来る.この時はスニペットを使うが,前工程の出力であるqueryだけでなく,date, time, clipboardも利用できる.また,クリップボードへのコピー時に,最前面のアプリケーションにペーストするオプションもある.
– Run Script:Actionのものと同等

4. 作ったもの紹介(その構成)

ではこの部品たちを組み合わせて私が作ったアプリを紹介します.

Stickies Search
st hogeと打つと,hogeを含むStickieの候補をリストで表示します.
これを選択した状態でEnterを押すと,該当Stickieが最前面に表示されます.
こんな感じ
Stickies Search

構成は,上の部品で言うと,Script FilterとRun Scriptを利用しました.
流れとしては以下の3ステップ.
1. Script Filter:Stickiesのデータベースを解析して,引数に該当するStickieがあるかを検索.表示.
2. ユーザがリストの項目を選択
3. Run Script:ユーザの選んだものを,Stickiesのwindowリストから選んで,最前面に表示

Stickiesのコアユーザであれば,大量のStickiesがデスクトップにあふれているはず!
その中で欲しい物が一発で見つかる,まさに神ツール

ここから少しだけ,利用した技術について説明します.

Script Filterでは,引数をスクリプトに渡して実行して,その結果をリストに表示します.
この部品はほかのものと違い,ユーザの入力に対応した,動的な処理での表示になります.
そのためAlfred Workflowでも,特に大事な部品としていろいろなWorkflowで用いられています.

Script Filterでは,スクリプトの出力として,xmlの形式でデータをAlfredに渡す必要があります.
これを自分で書くのは少し面倒ですが,データ整形の処理をパックするクラスなどを提供しているモジュールがあります.

私はpythonを使ったので,Helper library for writing Alfred 2 workflows in Pythonを利用しました.(他の言語についてもプロジェクトがあると思うので,検索してみてください.)
具体的な使い方については,DocsのTutorialが良かったなと思います.

スクリプトからWorkflowにデータを渡す部分は以下のようになります.

まとめると以下の3ステップ
1. Workflowのインスタンスを作成
2. そのクラスの関数runにメイン関数を渡して実行
3. メイン関数内では,インスタンスにリストに表示したい項目を追加していき,send_feedbackでAlfredにデータを返す

こんなに簡単!ということは伝わったでしょうか.

また,私の作ったWorkflowのソースはここで公開しています.
実際にどう利用しているかなどは,ソースを読んでいただいたら一発かなと思います(stickies_search.py).

触りながら試してみたい方は,Stickies SearchをWorkflowsに追加して頂いて,左側のWorkflowのリストでStickies Searchを右クリック,ファインダーで開くを選んでいただくと,動かしているWorkflowのプロジェクトのファイルがあるので,そこを触ってみると幸せになれるかも.

問題などあればissueでもコメントでもいただけたらと思います.

5. まとめ

いかがでしたか.
Alfred Workflowsでは短時間で面白い(便利な)物が作れるのでよいですね,
ここまで読んでくださった皆さんの頭のなかには,きっと新しいWorkflowの案が!

普段ルーチンになっているようなことは,結構Workflowで実現出来ると思うので,ぜひ試してみてください.
良い物ができたら教えて下さいね.

明日はryota-kaの記事です,お楽しみに.


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です