この記事はCAMPHOR- Advent Calendar 2014の22日目の記事です.
こんにちは,yaitaimoです.
今回は,Macユーザな私の大好きなランチャーである,Alfredを更に便利にするためのAlfred Workflowsについてのお話です.
いざAlfred Workflowsを使ってみようと思って検索してみたときに,何が出来るのかがまとまっているページが無くて困ったので,
その開発のハードルが1mmでも下げられたらと思い,筆を取ることにしました.(元々高くはないんですが)
この記事では,Workflowsにどんな機能があるのか,それぞれ一筆書きで説明して行きます.
1. Alfredの紹介
Alfred
秀逸なランチャーアプリ,知らない人はとりあえず落として触ってみるとよい.
全てはここから始まるといっても過言ではない.
Powerpack
Alfredをよりよく使うための,機能拡張パック.これが実は有料.
今回のWorkflowsを作成や利用するためには必要なので,
記事を読んで良いと思ったらぜひお試し下さい.
Alfred Workflows
これによって,便利な機能を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はこんなかんじになります.
どのような入力にして,その出力をどれで受け取って…とパズルのような感覚ですね.
プログラマだけではなく,デザイナーや一般ユーザも,自分で便利ツールを作れる感じが良い.
部品は大きく分けて4つあり,
入力を受け取るTriggerやInputと,それを受けて実行するActionやOutputがあります.
これらを組み合わせることで,Workflowが完成します!
ここでは,Alfredを起動した時に出てくる、入力を受けるものをウインドウと呼ぶことにします(下の画像).
またウインドウに入力するときの,どのWorkflowかを指定する部分をキー,そのWorkflowに渡す部分を引数と呼ぶことにします.
例えば,上の画像では,キーが「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が最前面に表示されます.
こんな感じ
構成は,上の部品で言うと,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にデータを渡す部分は以下のようになります.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/usr/bin/python # encoding: utf-8 import sys from workflow import Workflow def main(wf): # Add an item to Alfred feedback wf.add_item('Item title', 'Item subtitle') # Send output to Alfred wf.send_feedback() if __name__ == '__main__': wf = Workflow() sys.exit(wf.run(main)) |
まとめると以下の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の記事です,お楽しみに.