search
LoginSignup
8
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

もっと便利にWorkflow公開とダウンロード

これは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で簡単にアップデートできるという利点もあります。わりといいことづくめじゃないでしょうか。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8
Help us understand the problem. What are the problem?