iTunes Storeの連続試聴を自動化して楽しみながらAutomatorの理解を深める
3つの手順
GUIの基本は、何かを選択して、それに対してメニューやボタン等で指示して、結果を目に見える形で返してもらうことだと思っている。
Automator(オートメーター)もそれは同じで、ワークフローとして指示する時には、アクションの並びを以下の3つに分類して考えるとで、簡潔な手順として指示することができる。
- 入力(処理の対象を選択する)
- 処理(必要な処理を実行して結果を返す)
- 出力(結果を目に見える形でフィードバックする)
- 上記はあくまでも基本の手順なので、一つのアクションで処理と出力を兼ねていたり、処理のアクションが複数必要だったり、目に見える出力は不要な場合もあるかもしれない。
- 例えワークフローとしてアクションが一つしかない場合であっても、処理の対象は何か、どのような結果が返されているか、を常に意識しておく必要がある。
- アクション下部の結果をクリックすることで、実行時にどのような結果が取得できたか確認できる。
入力アクション
出力アクション
- 処理には必ず何らかの結果が伴う。その結果を目に見える形でユーザーにフィードバックする役割のアクション。
- 大抵の場合、アクション名が表示・開く・再生・新規を含んでいる。
- 目に見える形のフィードバックが不要なら省略できる。
処理アクション
- 上記の入力・出力以外のアクション。
- 対象に何らかの処理をして、必ず結果を返す。
オプション
- アクションの中にはオプションを指定できるものがある。
-
- ワークフローの実行時にこのアクションを表示
- 実行時にダイアログを表示して、処理設定の入力を求める。
- ワークフローの実行時にこのアクションを表示
-
- 選択された項目のみを表示
- 選択したGUI項目のみダイアログに表示して、処理設定の入力を求める。
- 選択された項目のみを表示
利用例:画像サイズとフォーマットを変更するワークフロー
- オプションの ワークフローの実行時にこのアクションを表示 にチェックを入れることで、様々なサイズ・フォーマットに対応できる。
- Finderのプラグインとして保存して、画像ファイルを右クリックして実行するようにした。
ループ
- ループ直前までの処理を最初の手順から繰り返す。
- 繰り返し条件や結果の利用方法などを指定できる。
- ワークフロー全体を事前に何回、あるいは何分繰り返すか決めておく必要がある。
- または、繰り返すかどうか毎回ユーザーに確認する方法もある。
- 複数の処理対象の個数をループカウンタに設定して、一つずつ処理を繰り返す目的では使えないが、
- そもそも画像のリサイズなど、処理対象が複数あっても、ループするまでもなくすべての対象に処理が及ぶ。
利用例:Safariのスクロールを1分間自動で行う
あまり実用的でないけど、実験目的としてやってみた。
- 記録ボタンを押して、Safariで↓キーを押して記録完了。
- これをループで繰り返す。
- でも再生してみると、あれれ、繰り返してくれない...。
- ところが、記録した操作をコピーして並べてみたら、正常に動き出した!(何故だろう?)
- 途中で中止したい時は、command-tabでAutomatorに切り替えてcommand-.
理解したこと
- ループがうまく動かない時は、同じ手順をコピーして並べてみる。
- キー操作の記録は、処理対象のアプリケーションがアクティブでなくても、ちゃんと再生される。
利用例:iTunes Storeの連続試聴を自動化する
今度はもう少し実用的に使えるものを作ってみた。
- iTunesの再生を開始
- 30秒間一時停止(試聴時間が30秒のため)
- 次の曲への移動はcommand-→
- 手順としてはオレンジ枠の部分のみなのだが、Safariのスクロールの時と同様、同じ手順を並べておかないと正常にループしてくれないのでコピーして並べた。(何故だろう?)
- 試してみた。iTunes Storeでまず1曲を選択してから実行してみると、束の間、サビのメドレーを聴きまくって楽しむことが出来た!
- ループ回数を10回に設定して、同じ手順が並んでいるため、20曲・10分間のコンサートを楽しむことができた計算だ。(ループ回数はお好みでどうぞ)
ループが正常に動作する条件
何故か同じ手順を並べておかないと正常に動作しないことがあるので、動作条件を調べてみた。
- 操作を記録したアクションが含まれ、ループして自動的に停止する条件の場合...
- 繰り返す手順を2回分並べておけば、正常に動作する。(A-B-C-A-B-C-ループ なら正常動作)
- 繰り返す手順にループだけではループ2回目で止まる。(A-B-C-ループ では2回目のループで止まってしまう)
- 操作を記録したアクションが含まれ、続行するかどうかを確認する条件の場合...
- 正常に動作する。(A-B-C-ループ で正常動作)
- 操作を記録したアクションがループ内に含まれなければ...
- 正常に動作する。(A-B-C-ループ で正常動作)
以上のことから、iTunes Storeの連続試聴を自動化するワークフローは、下記のように書き直すとよりシンプルになった。
- 操作を記録したアクションを、AppleScript変数で次の曲を選択するように変更した。
- 本来は、操作を記録したアクションが含まれる場合でも上記のようにシンプルに書いて正常に動作すべきだと思う。
変数
アクション右側の変数を選択すると、様々な値を取得して、Automatorの処理に利用できる。
歯車アイコンの変数は固定値で、変数というよりは定数といったところ
- システム環境やユーザー環境固有の値を取得することができる。
Vアイコンの変数はその時の状況によって変化する言葉通りの変数
- 変数名は自由に変更できる。
- 現在の日付・時刻は、書式を選択して取得できる。
- 新規ストレージは、初期値を持たない変数。
- 新規テキストは、初期値として文字列を設定できる。
- 新規パスは、初期値としてパスを設定できる。
- 新規AppleScript・シェルスクリプトは、設定したスクリプトを実行した結果を返してくれる。
- 変数というよりは、まるで関数のようだ。
- 既存のAutomatorにはない独自のアクションとして定義することが出来そう。
- 変数をダブルクリックしたり、ワークフローの中で利用すると、ウィンドウの下に利用した変数の一覧が表示される。
- この部分は変数の定義を行う操作エリアで、ここで変数をダブルクリックすると、書式や初期値などを設定することができる。
- アクションと同じように、ここからドラッグ&ドロップできる。
-
- 赤丸のボタンをクリックすると、このエリアの表示/非表示が切り替わる。
- ちなみに、その左側のボタンをクリックすると、ワークフローの処理の経過を確認することができる。
- 変数の値を取得アクションで、値を読み取る。
- 変数の値を設定アクションで、値を保存する。
利用例:画像サイズとフォーマットを変更するワークフロー(元画像をゴミ箱に移動するバージョン)
- 最初に作ったワークフローでは、同じフォルダの中に○○のコピー.pngという名前のファイルが生成されてリサイズされていた。
- 元画像もちゃんと残るのは安心だが、似たようなファイル名がいくつも出来てしまい煩わしい。
- かといって、元ファイルを上書きしてリサイズしてしまうのも心許ない...。
- ということで、元ファイルをゴミ箱に移動して、リサイズ後のファイルだけ残すことにしてみた。
- 選択したファイルを一旦、変数に保存しておく。
- その後複製して、○○のコピー.pngをゴミ箱に移動する。(これが元画像になる)
- 変数の内容を読み取って、最初に選択されたファイルを取得して、
- あとは同じように画像のリサイズ処理を行っている。
-
-
- 赤枠で囲んだ部分で、ゴミ箱に移動する処理と、リサイズする処理に分けて考えることができる。
-
利用例:クリップボードにタイムスタンプを設定する
- 現在の日付と時刻をクリップボードに保存するようにしてみた。(その後、command-Vで日付と時刻をペースとできるのだ)
- 途中で変数"日時"に値を設定するところがコツで、このおかげでリスト形式の値に変換されているようだ。
- 上記ワークフローの結果を見て行くと、その変化の流れが分かる。
- これがないと次のステップでエラーになってしまう...。
- AppleScriptは、途中で改行されて2行になってしまう書式を1行にする役割。
on run {input, parameters} (* Your script goes here *) set AppleScript's text item delimiters to " " set input to input as text set AppleScript's text item delimiters to "" return input end run
-
- これがないとペーストした時に以下のように2行で表示されてしまう...。
2009/01/30 11:01:34
-
- AppleScriptによって、1行の文字列にに変換している。
2009/01/30 11:02:34
ちょっと理解が進んで、Automatorが楽しくなってきた!便利なワークフローがたくさん作れそうな気がしてきた。