Mac を使っているなら必ず使うべき2つの機能 "Automator" と "サービス"


Automator ってなんか超高機能なマクロみたいなイメージがありますが、とても便利なのでご紹介。

もともとは、会社の上司が Windows から Mac に移行したのだけれど、"秀丸みたいに選択範囲を ruby で evalできないの" とおっしゃっており、しかも Emacs は微妙とのことなので、Automator でどうにかしてみた。Service でできるんじゃないかねと教えてくれた同僚に感謝。

追記(2013/02/24)

デバッグ方法を別エントリに書きました

できること

文字列選択して Ctrl+= を押すと選択文字列が ruby で実行されます。編集可能なテキストエリアならだいたい何処でも。

作り方

  • アプリケーション ディレクトリにある Automator を起動します。
  • 新しくサービスを作ります

  • "ruby -Ku" と書く

  • ドロップダウンリストで選べるオプションは画像のとおりに。
  • 名前をつけて保存する。たとえば "doRuby"
  • ショートカットーキーを設定する
    • "システム環境設定" を開いて、"キーボード"項目の、キーボードショートカットタブをクリック
    • 左カラムのサービスを選ぶと、さっき保存した右カラムに doRuby があるので、すきなショートカットキーを設定


  • テキストエリアで、ruby のコードを選択する。さっき決めたショートカットキーを押す。コードが実行される。

  • Ctrl-z で動作を取り消して、もとのコードに戻せるのもポイント高いですね。

ポイント

  • シェルスクリプトの標準入力になんでも渡せる。ファイル名を渡したりも出来る。ほとんどなんでも出来るじゃん。
  • つくったサービスは、コンテキストメニュー出るようになる!
  • つくったサービスは、ショートカットキーがセットできる。
  • Ctrl-z でやりなおしできる。


ショートカットキーが設定できるのが、とても重要で、画面ロックのショートカットキーも簡単にできます。

画面ロックの作り方

  • 途中まではさっきの例と同じ

  • こんな感じで"スクリーンセーバーの開始" をするだけのサービスを作成
  • 名前つけて保存
  • 上の例と同様に、ショートカットキーを設定

とすれば、画面ロックのための service になります。

発展型

スクリーンショットを撮って、fotolife に upload する。という gyazo みたいなスクリプトが一時期はやりましたが、これもショートカットキーから呼べるとかなり便利です。

use strict;
use warnings;
use Config::Pit;
use WebService::Hatena::Fotolife;
use IPC::Run qw(run);

my $conf = Config::Pit::get("hatena.ne.jp");
my $file_name = $ARGV[0];
my $tmp_filename = '/tmp/screencapture.png';

if ($file_name || run(['screencapture', '-i', $tmp_filename])) {
    my $hatena = WebService::Hatena::Fotolife->new;
    $hatena->username($conf->{user});
    $hatena->password($conf->{pass});

    my ($date) = $hatena->createEntry(
        filename => $file_name || $tmp_filename,
        folder   => 'work',
    ) =~ /(\d{14})$/;
    my $url = sprintf "http://f.hatena.ne.jp/%s/%s", $conf->{user}, $date;

    run(['open', $url]);
}

こんなスクリプトを書いておいて、

こうやってサービスを作ると、ショートカットキー一発で、スクリーンショット取得と fotolife への upload まで完了できます。