これはAlfred Advent Calendar 201424日目の記事です。
上記記事の補足みたいなものです。こんな感じの記事を書こうとしていて先を越されたともいう。
Githubで簡単にリリースするツール
というのがあります。使ったことはありませんが。
なお、改善版のghrというのもあります。
これは、後述のワークフローの公開で初めて使ってみました。すごい楽ちんでした。
なお、alfredworkflowファイルは、後述するWorkflowディレクトリをZip圧縮して拡張子を変えたものなので、エクスポートからリリースまで全部スクリプト化することも可能です。
(2015-01-02追記)
bashのシェル関数にしてみました。
alwrelease () {
if pwd | grep -q 'Alfred.alfredpreferences/workflows/';then
if [ -d .git ]; then
echo Input name of workflow
read Name
echo Input Tag
read Tag
if [ ! -n "$Name" -a -n "$Tag" ];then
zip -r "$Name.alfredworkflow" "$(git ls-files)"
ghr "$Tag" "$Name".alfredworkflow
else echo "No Workflow Name or Git Tag"
fi
else echo "Not a Git repository"
fi
else echo "Not a Alfred Workflow directory"
fi
}
リリース機能を利用するのではなく、Dropboxなど他のファイル共有系サービスを利用するのも悪くないでしょう。
Workflowのインポートはalfredworkflowファイルからしかできないのか?
そもそも、Workflowの実体とは、指定ディレクトリ以下に配置されたplistファイル(とアイコンや添付されたスクリプト)に過ぎません。
任意のWorkflowを右クリックして「Show in Finder」してみれば分かりますが、Workflowは以下のディレクトリに、個別のディレクトリとして配置されています。
~/Library/Application Support/Alfred 2/Alfred.alfredpreferences/workflows
なお、Alfred2 Powerpackを導入すると、Alfred.alfredpreferencesの配置は(Dropboxなどに)変更可能です。
ということは、このディレクトリにそのまんまcloneしたら動くのではないか? と思ってやってみると、普通に動きます。
作成/インポートしたWorkflowには自動生成されたディレクトリ名が与えられますが、別にディレクトリ名は勝手に決めても問題ないようです。
つまり、catfist/Alfred-MyHexoの場合であれば、以下のようにすれば導入できるわけです。
$ git clone git@github.com:catfist/Alfred-MyHexo.git ~/Library/Application\ Support/Alfred\ 2/Alfred.alfredpreferences/workflows/MyHexo
上記をWorkflow化してみる
コマンドラインでできることならWorkflow化してみたくなります。
簡単ですが、やってみました。
ghqcloneの方はとりあえずおいておいて。でも、ghqもとても便利ですよ。
alwcloneの方のスクリプトは以下のようになっています。
wfdir=~/Library/Application\ Support/Alfred\ 2/Alfred.alfredpreferences/workflows # Workflowディレクトリを指定
theUrl="$(osascript -e 'tell application "Safari" to get URL of document 1')" # Safariで開いているページからURLを取得
if [ $(echo "$theUrl" | grep 'github.com') ];then # URLがGithubだったら
repo=$(echo "$theUrl" | sed 's%^https://github.com/\([^/]*/[^/]*\)/*.*$%\1%') # ユーザ名とプロジェクト名を取得
name=$(echo "$theUrl" | sed # プロジェクト名のみを取得 's%^https://github.com/[^/]*/\([^/]*\)/*.*$%\1%')
git clone git@github.com:$repo.git "$wfdir/$name" && echo "cloned $repo" # cloneしてユーザ名とプロジェクト名をエコー
else # URLがGithubじゃない場合
echo "Not Github repository" # エラーメッセージをエコー
fi
Powerpack導入済みでAlfred.alfredpreferencesを移動している場合、wfdirを変更してください。
Githubのリリース機能を利用する理由
Workflowの中にはエクスポートされたalfredworkflowファイルを直接Git管理&公開しているものもあります。作成したWorkflowが多すぎていちいち独立したリポジトリを立ち上げてらんない場合は仕方ないと思いますが、基本的にはリリース機能を利用すべきです。
それは、ソースの差分管理をしたり、ユーザがソースを確認できるようにする意味もありますが、Workflowディレクトリに直接cloneできるようにという意味合いも持たせられるわけです。
さらに、git fetchで簡単にアップデートできるという利点もあります。わりといいことづくめじゃないでしょうか。