MacのAutomatorで自動化して遊んでみた話

今回のブログ担当は石川です。昨年の春にMacを使い始め、今ではUS配列のキーボードにも慣れてきました。

Macにはデフォルトでいろいろなソフトウェアが入っています。既にいろいろと記事になっていますが、Automatorは何かと便利です。 デフォルトで存在するのでMacユーザーの皆さんはご存知かと思うのですが、Mac初心者の私は初めて知ってテンションが上がったのでご紹介します。

Automator

Automator(オートメーター)とは、アップルが開発するワークフロー構築ソフトウェアである。 by Wikipedia

今回Wikipediaで調べるまでずっとオートマターと読んでいました。英語力の底が知れますね。おそらく頭の中でオートマタと混ざっていたんだと思います。

Automatorを起動させると、このように書類の種類を選択してくださいと表示されます。 私は主にアプリケーションとサービス、カレンダーアラームを中心に使用しています。

アプリケーション

アプリケーションを選択して動作を設定すると、生成されたアプリケーションを通常のアプリケーションと同じようにダブルクリックで実行することで動かすことができます。

私はこのアプリケーションを用いて、カメラのSDカードから取り込んだ写真を、取り込んだ日付別に自動で分類するように設定しています。

このアイコンがAutomatorで作ったアプリケーションです。アイコン画像は分かりやすいように変えています。 設定しておいたカメラのSDカードを差し込んだ状態でこのアイコンをダブルクリックで実行すると、

このように新しいフォルダが自動で作成され、中にはSDカードの中に入っていた画像が移動しています。 なおかつ、 念のためのバックアップとして別のフォルダにも画像がコピーされるようにも設定しています。

こういった処理は、すべてAutomatorのデフォルトのアクション(以下ブロック)で実装することができました。

写真の移動をさせる動きは、上記のようなブロックを幾つか組み合わせるだけで可能です。 ちなみに上記の写真では、

ブロック 処理内容
一つ目 今日の日付と現在の時刻というデフォルトの変数を使って名前をつけたフォルダを指定した場所に作る。
二つ目 作成したフォルダの位置をパスという名前の変数に設定する。
三つ目 SDカードを指定し、その中の画像を先ほど作った変数の中にある位置にダウンロードするように設定する。
四つ目 三つ目のブロックで得た結果(Finder項目)を取得する。
五つ目 指定した保存先に先ほど取得した結果(Finder項目)をコピーする。

というような処理をしています。 処理が終了した後に音を鳴らしたり、ファイルを開いたりということも可能です。 既定のアクションが割と多く、PDFの分割やアプリケーションの一括終了など便利なものがたくさんあるので、大体のやりたいことはブロックだけで叶えられるのではないでしょうか。

カレンダーアラーム

他にも、カレンダーアラームという機能を用いることで、 カレンダーに設定したタイミングで設定しておいた動きを自動実行することも可能です。 私はこの機能を用いてダウンロードフォルダの中身を週に一回指定した時間にダウンロード履歴というフォルダに移動するように設定をしています。 その動きも先ほど紹介した写真移動のように簡単に実装できます。私は先ほどのように日付ごとのファイルに移動をしていますが、ひとつのフォルダに今までのファイルを移動すると整理がしやすくて良いかもしれません。

例えば、私は毎週火曜日の午前10時に自動でダウンロードにあるファイルを引っ越すように設定をしています。 私のようにフォルダの整理が苦手でダウンロードやデスクトップに大量のファイルを置きっぱなしにしてしまう人でも、Automatorを使えば自動で管理することができます。

サービス

Automatorにはデフォルトでたくさんのアクションもありますが、 「違う、私はこういうことがやりたいんだ!」というときもあります。 そういう時のため、シェルスクリプトやAppleScriptを内部で設定できるようになっています。

普段Ruby on Railsを使ってシステム開発をしているのですが、英語が苦手な私はメソッド名が何を意味しているのかわからず、グーグル翻訳先生に頼ることが多々あります。

def self.preload_journals_details_custom_fields(journals)
...
end

Redmineのソースコードの中にあるこういったメソッド名。読めません。 preload_journals_details_custom_fieldsの部分をコピペしてグーグル翻訳先生に翻訳をお願いしても、アンダーバーが入っていることによりレスポンスは「preload_journals_details_custom_fields」となってしまっています。 今まではずっといちいちアンダーバーを消してから翻訳していたのですが、 Automatorを使うことでそれも解決しました。

先ほどまでと比べるととてもシンプルです。 シェルスクリプトを実行できるブロックと、それをクリップボードにコピーするブロックだけ、シェルスクリプト自体もsedコマンドを使ってアンダーバーをスペースに置換しているだけです。 クリップボードにコピーをするブロックも、シェルスクリプトでpbcopyコマンドとかを使えば不要になると思います。

これをサービスという機能を用いることで、

変換したい文字列を選択してアンダーバー置換をクリックすることで実行できるようになります。

クリップボードにコピーされた置換済みの文字列をグーグル翻訳先生に渡せば、「プリロードジャーナル詳細カスタムフィールド(ジャーナル)」という求めていたレスポンスが返ってきますね。(意味がわかるかはさておき)

システム環境設定>キーボード>ショートカットからアンダーバー置換にショートカットを割り振りすることもできるので、普段はコマンド+オプション+スペースで利用しています。 他にも、シェルスクリプトでiconvコマンドを用いて選択したファイルの文字コードを変換できるようにしたりということもできますし、 純粋にMacの右クリックメニューをカスタマイズする目的や、シェルスクリプトをターミナルを開かずに動かす目的で使うこともできます。

まとめ

Automatorはブロックを組み合わせて楽しく遊べて、なおかつ普段の業務も楽になるという素晴らしいツールです。 今回少しだけ自分が設定した中身をお見せしましたが、他にもたくさんの人親切な人がいろんな設定を公開しているのでそれを参考にすると皆さんも楽しく遊べると思います。

ファーエンドテクノロジーからのお知らせ(2017/08/30更新)
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け