読者です 読者をやめる 読者になる 読者になる

Open In...

Actions Actions-Documents

f:id:four_or_three:20170224222433p:plain:w250

Inputしたファイルを他のアプリへOpen In(コピーを引き渡す)します。
Open URLs等と同様、他のアプリへ遷移しますので、戻ってきてフローの続きをしたい場合は後段にWait to Returnを入れておく必要があります。

  • Show Open In Menu
    • ON : メニューを呼び出してアプリを選択
    • OFF : Open Inするアプリをあらかじめ設定しておく
      • Workflowがサポートしているアプリのみ
      • サポートしていないアプリは、検索結果から簡単にリクエストできる

[Input](単体)
ファイル

[Result]
Inputをそのまま出力

Mac +「Run Script Over SSH」 超簡単 openコマンドの使い方

その他 その他-Tips

リモートコンピュータに接続し、スクリプトを実行する「Run Script Over SSH」アクションは大変便利ですが、使いこなすにはシェルスクリプトやその他のプログラミング言語の知識が必要なため、なかなかハードルが高いアクションです。

今回は、特別な知識が不要でそこそこ使いでのある、Macのopenコマンドの使い方を紹介します。

WorkflowからMacSSH接続するための設定は、Run Script Over SSHを参照下さい。

openコマンドでできること
  • ファイルを開く
  • フォルダを開く
  • URLを開く
  • アプリを起動する
  • アプリにファイルやフォルダ(の中のファイル全部)やURLを渡す

基本

open "開きたいもの"

openスペースに続いて、開きたいものをダブルクォーテーションで囲って記述します。
開きたいものの部分には、ファイルのフルパス、フォルダのフルパス、URLを記述します。

jpegファイルをデフォルトアプリケーションで開く

open "/Users/ユーザ名/Downloads/abcde.jpg"

DropboxフォルダをFinderで開く

open "/Users/ユーザ名/Dropbox"

あるいは

open "$HOME/Dropbox"

Googleをデフォルトブラウザで開く

open "https://www.google.co.jp"

アプリを起動する

open -a "英語のアプリ名"

英語のアプリ名は、"◯◯.app"の◯◯の部分です。 スペースや、大文字小文字も正確に。

アプリ名がFinder上で日本語表記になっているものは、「情報を見る」を開き、中ほどにある「名前と拡張子」の項目で英語名が確認できます。

Chromeを起動する

open -a "Google Chrome"

アプリにファイルやURLを渡す

open -a  "英語のアプリ名" "渡すもの"

渡すものの部分には、ファイルのフルパス、フォルダのフルパス、URLを記述します。

GoogleFirefoxで開く

open -a "Firefox" "https://www.google.co.jp"

jpegファイルをSkitchで開く

open -a "Skitch" "/Users/ユーザ名/Downloads/abcde.jpg"

複数開く

open "開きたいもの1"
open "開きたいもの2"
...

▼複数のjpegファイルをデフォルトアプリケーションで開く

open "/Users/ユーザ名/Downloads/abc.jpg"
open "/Users/ユーザ名/Downloads/def.jpg"

GoogleYahoo!Chromeで開く

open -a "Google Chrome" "https://www.google.co.jp"
open -a "Google Chrome" "http://www.yahoo.co.jp"

アプリのURLも開ける

Evernoteのノートリンクを開く

open evernote:///view/◯◯◯

▼OmniFocusのタスクのリンクを開く

open omnifocus:///task/◯◯◯

もっと色々やりたい時の参考

コマンド/open - MacWiki

Correct Spelling

Actions Actions-Text

f:id:four_or_three:20170222222805p:plain:w250

Inputしたテキストのスペル(英語)を修正します。


[Input](単体、複数)
テキスト

[Result]
テキスト

デスクトップからたすくまへ最速でタスクを登録するAutomatorアプリとシェルスクリプト

その他 その他-Mac

プッシュ通知サービスのPushoverを使って、たすくまのタスク登録用URLスキームをMacからiPhoneへサクッと送信するAutomatorアプリを作りました。 

中身はただのシェルスクリプトなので、Bash on Windowsで動作させるのも可能なのではないかと思います。多分。
Windows用に多少手直ししたコードをこの記事の最後に載せておきます。

最近Pushoverのライセンスを購入しましたので、サービスが長く続いてくれるよう応援の意味も込めたエントリーです。


▼母艦のキーボードでタスクをタイプしてOKすると
f:id:four_or_three:20170218110307j:plain
▼5秒くらいで登録用URLがiPhoneに届きます
f:id:four_or_three:20170218105850p:plain:w250

青い文字にリンクが貼られています。

今回のエントリーでは、基本となるキーボードでテキストを入力するアプリと、テキスト選択の右クリックから実行するAutomatorサービスを紹介します。
エクセルのセルコピーから一括送信とか、WorkFlowyの選択コピーから一括送信できるバージョンなどは、需要がありましたら。

ダウンロード

https://www.dropbox.com/sh/1mo74u8wkpn3ml7/AADNrXlEYmlQ4jdGcl3WNrGVa?dl=0

◯◯.appがアプリ、◯◯.workflowがサービスです。
サービスはダブルクリックでインポートされます。


↓このエントリーとは直接関係はありませんが、Pushoverを補助するツール2つ作ったやつ

使用開始までの手続き

  1. iPhoneにPushoverをインストール後、Pushoverのアカウントを作る

    Pushover Notifications

    Pushover Notifications

    • Superblock
    • ユーティリティ
    • 無料
    有料アプリですが、7日間はフル機能がお試しできます。
    過去にお試ししたことがある場合でも、再試用は可能だと思います。

  2. PushoverのSettingsでUser Keyとデバイス名を確認する

  3. https://pushover.net/apps/buildで新規アプリを登録し、APIトークンを発行
    Type:Script、Description:適当、URL:空欄、Icon:なしでOK
  4. アプリ、サービスをAutomatorで開き、シェルスクリプトの1〜3行目に2.3.を記入して上書き保存
    サービスは/Users/ユーザ名/Library/Servicesにあります。

以上で完了です。

アプリ版は、初回起動だけ 右クリックメニュー → 開く、として下さい。

サービス版の「変数の値を設定」、「テキストの入力を求める」の2つのアクションは、右クリックで取り込んだテキストに見積もり時間やプロジェクトを追記するためのものですので、必要ない場合はこの2つのアクションを削除してください。

入力するテキストの書き方

基本
タスク1<tab>20<tab>プロジェクト1
タスク2<tab>30<tab>プロジェクト2


このように、タスク名と見積もり時間とプロジェクト名をタブ文字で区切って記述します。
これを基本として、だいたいどのような書き方でも読み込めるようになっています。

タスク名だけ

以下5例はどれもOKな書き方です。
タスク1
タスク1<tab>
タスク1<tab><tab>
タスク1<tab>0
タスク1<tab>0<tab>

タスク名と見積もり時間

以下2例はどれもOKな書き方です。
タスク1<tab>20
タスク1<tab>20<tab>

タスク名とプロジェクト名

以下3例はどれもOKな書き方です。
タスク1<tab>プロジェクト1
タスク1<tab><tab>プロジェクト1
タスク1<tab>0<tab>プロジェクト1

その他

見積もり時間は全角数字でもOK
タスク1<tab>20<tab>プロジェクト1

空行OK

タスク1<tab>15<tab>プロジェクト1
タスク2<tab>20<tab>プロジェクト2

タスク3<tab>10<tab>プロジェクト3

コード

標準入力を読み取って、たすくまの登録URLを生成し、Pushoverにポストするシェルスクリプトです。
Windowsで動く(かもしれない)ように若干手直ししています(動くかもしれない)。

Macでは動きませんのでご注意。

▼使い方

$ bash this_script.sh < task_list.txt


文字コードShift-JIS、改行コードCRLFのテキストを標準入力に読み込ませてください。
テキストの書き方は、上記の「テキストの書き方」を参照下さい。

実際に使用する際には、まず上記の起動コマンドをシェルスクリプトとして保存(launch.sh)して、chmodコマンドで実行権限を与えておき、

をバッチファイルか何かで自動化できれば、MacAutomatorを使う場合と比べてそう遜色のない使い勝手になるのではないでしょうか。

#!/bin/bash

readonly APP_TOKEN="your app token"
readonly DEVICE="your device"
readonly KEY="user key/group key"
readonly TITLE="🐻たすくまに登録"
readonly SOUND="pushover"
readonly FONT_SIZE="3"

function curl_pushover() {
    curl -f \
        --form-string "token=$APP_TOKEN" \
        --form-string "user=$KEY" \
        --form-string "device=$DEVICE" \
        --form-string "title=$TITLE" \
        --form-string "sound=$SOUND" \
        --form-string "html=$1" \
        --form-string "message=$2" \
        --form-string "url=$3" \
        https://api.pushover.net/1/messages.json
}

function post_message_pushover() {
    local count_total=0
    local num_message=0
    local str_joined=()
    for line in "$@"
    do
        count_total=$(($count_total + ${#line} + 2))
        if [ $count_total -gt 990 ]; then
            ((num_message++))
            count_total=$((${#line} + 2))
        fi
        str_joined[$num_message]+="\n$line\n"
    done
    local url=""

    i=1
    for var in "${str_joined[@]}"
    do
        local message=$(echo -e "$var")
        if [ ${#str_joined[@]} -gt 1 ]; then
            message="(${i}/${#str_joined[@]})$message"
        fi
        message="<font size=\"${FONT_SIZE}\">${message}</font>"
        curl_pushover "1" "$message" "$url"
        if [ $? != 0 ]; then
            return 1
        fi
        ((i++))
    done
}

function url_encode() {
    echo "$1" | perl -MURI::Escape -lne 'print uri_escape($_)'
}

function change_to_halfnum() {
    echo "$1" | sed 'y/1234567890/1234567890/'
}

function is_numeric() {
    expr "$1" + 1 >/dev/null 2>&1
    if [ $? -lt 2 ]; then
        echo 0
    else
        echo 1
    fi
}

IFS_original=$IFS
IFS=$'\t'

text_input=$(iconv -f SHIFT-JIS -t UTF-8 | tr -d '\r' | grep -v ^\s*$)

if [ -z "$text_input" ]; then
    exit 1
fi

i=1
while read line
do
    set -- $line
    task="$1"
    task_encoded=$(url_encode "$1")
    if [ -z "$2" ]; then
        est_time=0
        project=""
        project_encoded=""
    else
        est_time=$(change_to_halfnum "$2")
        if [ $(is_numeric "$est_time") = 0 ];then
            project="$3"
            project_encoded=$(url_encode "$3")
        else
            est_time=0
            project="$2"
            project_encoded=$(url_encode "$2")
        fi
    fi
    description="$task | ${est_time}分 | $project"
    url_scheme="taskuma://add?taskname=${task_encoded}&estimated=${est_time}&project=${project_encoded}"
    message_arr=("${message_arr[@]}" "${i}. <a href=\"${url_scheme}\">${description}</a>")
    ((i++))
done << EOS
$text_input
EOS

IFS=$IFS_original

if [ ${#message_arr[@]} = 1 ]; then
    message="<font size=\"${FONT_SIZE}\"><a href=\"${url_scheme}\">${description}</a></font>"
    curl_pushover "1" "$message" "$url_scheme"
else
    post_message_pushover "${message_arr[@]}"
fi

新機能 Magic Variables

その他 その他-Tips

2017年2月14日に、記事を一部修正しました。

「Get Details of ◯◯」 の機能と、別のTypeに変換する機能が、Set Variableで設定した変数でも使用可能だったという内容ですが、それ以上の加筆はありませんので、すでに記事を読まれた方は読み返さなくても大丈夫です。


Version 1.7で追加されたMagic Valiables(以下マジック変数と呼びます)について書きました。

文章としてちゃんとした形にまとめることができませんでしたので、箇条書きのような何かです。
読みづらいですがご容赦下さい。

熱い語りはMacStoriesの編集長 Federico Viticciの記事をどうぞ!
Workflow 1.7 Introduces Magic Variables for Easier, More Powerful Visual Automation – MacStories

機能

マジック変数には、大雑把に言うと以下の3つの機能が内蔵されています。

  • 自動的にSet Variableされる機能
  • Get Details of ◯◯ の機能
  • 変数内のアイテムを別のTypeに変換する機能

一つずつ見ていきます。

Set Variableしなくても自動的にSet Variableされる機能

通常の変数の場合、上流で再利用したい値(アイテム)をSet Variableで変数に格納しておき、下流でその変数を取得して使う、という処理の流れになります。
▼Set Variable → Get Variable
f:id:four_or_three:20170213204704p:plain:w250

マジック変数を使うと、上流でSet Variableをしていなくても下流で値(アイテム)の取得が可能です。
▼マジック変数によるアイテムの取得
f:id:four_or_three:20170213204716p:plain:w250

下流でマジック変数を使用することにより、上流で自動的にSet Variableが実行される機能と言っていいでしょう。

上流の全てのアクションの出力を、マジック変数として取得することができます。

Get Details of ◯◯ の機能

従来の通常の変数(Set Variableで設定した変数)からは、当然ですが、変数に入っているアイテムそのものしか取得できませんでした。
マジック変数では、変数に入っているアイテムの中から自分が必要とする要素を抽出して使用することができます。

(2017年2月14日追記)
この機能は、Set Variableで設定した変数でも使用可能です。

▼マジック変数を設置した後、マジック変数をタップすると、抽出できる要素がリストアップされる
f:id:four_or_three:20170213205249p:plain:w250

▼ファイルサイズを指定して実行してみた
f:id:four_or_three:20170213205306p:plain:w250

これは、「Get Details of ◯◯」アクションの機能を変数内に取り入れたと言えます。

この機能は、テキストボックスが備わっているアクションでのみ利用できます。
テキストボックスというのはこれです。
f:id:four_or_three:20170213205933p:plain:w250

フォーカスするとキーボードが出てくるのがテキストボックスです。

Get Variableのような、選択肢がリストアップされるアクションでは、この抽出機能は利用できません。

変数内のアイテムを別のTypeに変換する機能

この機能は通常、2つ目の「Get Details of ◯◯」の機能とセットで使用します。

(2017年2月14日追記)
この機能は、Set Variableで設定した変数でも使用可能です。

先ほどと同じこのワークフローで説明します。
f:id:four_or_three:20170213224123p:plain:w250

マジック変数の「Text」をタップすると、上のほうに「as Text」という表示があります。
f:id:four_or_three:20170213211533p:plain:w250

TextをTextとして取り扱う、つまりTypeの変換をせずにそのまま使用するという意味です。

「as Text」の部分をタップするとTypeの一覧が出ます。
f:id:four_or_three:20170213211550p:plain:w250

ここで変換したいTypeを選択することで、変数内のアイテムのType変換を行うことができます。
▼「as Dictionary」を選択し、さらに「Key"xyz"のValueを取得」を指定した
f:id:four_or_three:20170213211601p:plain:w250

▼実行すると、テキストをDictionaryとして解釈し、さらにそこからValueを取り出すことができた
f:id:four_or_three:20170213211613p:plain:w250


(別の例)
App Store短縮URLが含まれたテキストをApp Store appとして解釈し、さらに説明文(Description)の取得を指定
f:id:four_or_three:20170213212038p:plain:w250

▼実行
f:id:four_or_three:20170213212048p:plain:w250

「Get ◯◯ from Input」アクションの機能を変数内に取り入れたと言ってもいいでしょう。

このType変換の機能も、テキストボックスが備わっているアクションでのみ利用できます。

補助的な機能

大変便利なマジック変数ですが、適当に使うとこうなります。
f:id:four_or_three:20170213212657p:plain:w250

取得したものが何なのかわからないという問題です。

マジック変数には、これを解決するための補助的な機能が備わっています。

マジック変数に固有の名前を与える機能

▼マジック変数をタップし、最上段の「Rename」をタップするとマジック変数をリネームできる
f:id:four_or_three:20170213212801p:plain:w250

▼何なのか見ただけでわかるようになりました
f:id:four_or_three:20170214132600p:plain:w250

この作業は重要です。

私の場合、後で再利用したいアクションの出力には、その場でマジック変数のRenameを行っておきます。
Set Variableをするのと手間が変わらなくなってしまうので馬鹿馬鹿しいと感じるかもしれませんが、従来のSet Variableが与えてくれていた"固有の変数名"の視覚情報が完全になくなってしまうとフローをあとで読み取るのにどうしても余計な時間がかかってしまいますし、バグ(取得する変数の取り違え)の元にもなります。

記憶の新しいうちに固有の変数名を与えておくことで、これらを回避できます。

▼下流にCommentを置いておいて、いつでもRenameできるようにしておくといいかも
f:id:four_or_three:20170213214550p:plain:w250

マジック変数の出どころを明らかにする機能

▼マジック変数をタップし、最上段の「Reveal Action」をタップすると
f:id:four_or_three:20170213215006p:plain:w250

▼そのマジック変数の出どころ(アクション)にジャンプします。
f:id:four_or_three:20170213215015p:plain:w250

ちょっと分かりにくいですが、当該アクションがハイライトされています。
「Go Back」をタップすると元いたところに戻ります。

現在のバージョンではこの機能は不安定で、すぐ消えてしまったりします。

特殊変数に関する変更点

特殊変数というのは、Input、Clipboardなど、Set Variableで生成する変数以外のことです。

Input変数の廃止
  • かわりに、直上のマジック変数を使用
Workflow Input変数の追加
  • ワークフローのInputが格納された変数
  • Action Extensionで引き渡されたアイテムが入っている
  • URLスキーム (input=string) で渡された値も入っている
  • マジック変数の機能が使用可能
  • Action Extension有効時のみ、設置が可能
  • 設置した後にAction Extensionを無効にするのはOK
Current Date変数の追加
  • 現在日時が格納された変数
  • 別のTypeとして読み込む機能はなく、Format Dateの機能のみが内蔵されている
Clipboard, Repeat Index, Repeat Item
  • マジック変数の機能が使用可能

感想

  • マジック変数のRenameは重要
  • Reveal Action(出どころを明らかにする機能)の不完全さが、マジック変数の使い勝手を著しく制限している
    → 今後のアップデートで化けると予想される
  • マジック変数の活用によってアクションの数を大幅に減らすことができるが、それによって処理が高速化されるわけではないと思われる
  • マジック変数によって何かが新たにできるようになったわけではないので、どうしても馴染めなければSet Variableしよう