RVM入れてからさっきまで気づかなかったんだけど。
AppleScriptからdo shell scriptでRubyをコールして呼び出されるのは/usr/bin/rubyだった。
お恥ずかしい。
ちゃんと検証しながらやらないとダメねぇ。
どこで問題になったかはあとで記載。
さて、本題に入ります。
先日pageという印刷業界の大きいベントがありました。
そのときに@seuzoさん(以下、せうぞーさん)にお会いして「RubyでIllustrator画像収集」へのアドバイスをいただきました。
1.生データを直接加工するなんてやっちゃダメだよ
2.Rubyをバンドルするのはスマートじゃないよ
うん、それについては私もよーく分かっていました。
とりあえず思いつきで進めちゃったので、すでに行き詰まっていました。
ユーザーさんから不具合報告を受けてもなかなか対応もできず。
自らテストと検証をお願いしておきながらこの体たらく。
だってrubyファイルとのバンドルが外れちゃったり、再保存しないとすべてのファイルをCS2として判別しちゃうなんてのは、対処しようがないっていうか。
まぁ書いた自分にスキルが不足してるんでしょうね。
だいぶ落ち込みました。
そんなところにせうぞーさんからのアドバイスです。
具体的な方策も授けていただきました。
まずXMPタグの抽出方法を根本的に書き直す必要があります。
というのは、Illustratorファイルの内部エンコードがさっぱりわからないからです。
UTFなのは間違いないと思うんですが、CS5のファイルを投げると文字化けしちゃうんですよね。
これはもしかしたらMacのOSも関係してくるのかもしれませんが。
そんなの、いちいち検証していられません。
ってことで、EXIFを抽出してくれるツール?のお力をお借りすることに。
その名も「ExifTool」。
こいつの導入にあたっては下記を参照しました。
[ruby][Exif][command][XMP]XMPやEXIFをrubyで読み書きする
まずはインストールから。
上記サイトから自分の環境にあったものをダウンロードします。
私の場合はMacです。
ダウンロードしたdmgをダブルクリックしてインストーラーをダブルクリック。
ガイドに従ってクリックしていけばインストールは完了。
簡単ですね。
インストールしたExifToolは下記のように使います。
適当なJPEG画像を指定してあげましょう。
$ exiftool IMG_0002.JPG
結果。
ExifTool Version Number : 8.77File Name : IMG_0002.JPG
Directory : /Users/hoge
File Size : 1036 kB
File Modification Date/Time : 2009:08:17 12:57:53+09:00
File Permissions : rw-r--r--
File Type : JPEG
MIME Type : image/jpeg
Exif Byte Order : Big-endian (Motorola, MM)
Make : Apple
Camera Model Name : iPhone
ずらずらとEXIF情報が吐き出されたと思います。
IDを日本語名で表示したいときはオプションを足してあげます。
$ exiftool -lang ja IMG_0002.JPG
結果。
ExifToolバージョン : 8.77ファイル名 : IMG_0002.JPG
ファイルの場所 : /Users/hoge
ファイルのサイズ : 1036 kB
更新日時 : 2009:08:17 12:57:53+09:00
File Permissions : rw-r--r--
ファイルタイプ : JPEG
MIMEタイプ : image/jpeg
Exif Byte Order : Big-endian (Motorola, MM)
メーカー : Apple
画像入力機器モデル : iPhone
そして実際にタグを元に情報を抽出してみるわけですが、タグとIDが一致していないので、素直にはいきません。
タグを調べたいときはオプションをつけてあげます。
$ exiftool -s IMG_0002.JPG
結果。
ExifToolVersion : 8.77FileName : IMG_0002.JPG
Directory : /Users/hoge
FileSize : 1036 kB
FileModifyDate : 2009:08:17 12:57:53+09:00
FilePermissions : rw-r--r--
FileType : JPEG
MIMEType : image/jpeg
ExifByteOrder : Big-endian (Motorola, MM)
Make : Apple
Model : iPhone
さっきと変わったのがお分かりですね。
ここでようやく抽出です。
$ exiftool -s-Make IMG_0002.JPG
結果。
Make : Apple
無事抽出できました。
値だけを抽出したいとき。
$ exiftool -s-s -s -Make IMG_0002.JPG
結果。
Apple
Appleだけ抽出できました。
うん、すごく便利。
大体使い方を理解したところで、こいつをRubyで使えるようにします。
$ sudo gem install mini_exiftool
これでインストールログが流れてインストールできたはず。
ちなみに私はRVM環境の1.8.7にインストールしました。
その際はsudoが必要ありません。
試しにサンプルを書いてみましょう。
#! ruby -Kurequire 'rubygems'
require 'mini_exiftool'
sample = MiniExiftool.new ARGV[0]
puts sample['Make']
$ ruby sample.rb IMG_0002.JPG$ apple
こんな感じで使います。
うーん、便利便利。
タグを無理矢理読み解いて正規表現でどうにかしてた自分が恥ずかしい。
まぁそういう泥臭いことやったからこそ、こういうツールのありがたみが分かるってもんよ。
…そういうことにしてください。
そして冒頭に書いた件。
私はRVM環境のruby 1.8.7のgemsにmini_exiftoolをインストールしたわけです。
で、意気揚々とAppleScriptからdo shell scriptで実行させたら、みたことないエラーが吐き出されて、びっくり。
読んでみたら「requireしたやつ、見つかんないよ?」といった内容でした。
で、ここに至って気づいたのです。
AppleScriptからdo shell scriptでRubyをコールして呼び出されるのは/usr/bin/rubyだった。
あっはっはっはー。
そりゃそうか。
というわけで、ちょっとだけ検証。
●RVM環境のrubyをAppleScriptから実行させるにはどうするか?
いろいろググってたらdo shell script "ruby ~"のときに、フルパスを与えてあげればいいみたい。
RVM環境のrubyのフルパスは
$ rvm info
で流れてくるログの「binaries」の「ruby: "/Users/hoge/.rvm/rubies/ruby-1.8.7-p352/bin/ruby"
E」に書いてある。
ちなみにここで取得できるものは「現在RVMで使用しているRuby」の情報です。
試しにAppleScriptから下記を実行してみる。
do shell script "/Users/hoge/.rvm/rubies/ruby-1.8.7-p352/bin/ruby --version"
するとRVMでいまuseしているrubyのバージョンが取得できるはず。
でもこれだとさっきインストールしたmini_exiftoolにrequireできないというエラーが出たまんま。
つまり最初と状況は変わっていない(^^;
そもそもAppleScriptからRVM環境にアクセスできればいいんだけどな。
デフォルトのパスを書き換えてる的なことなのかしら。
その辺り、ご存知の方がいたら教えてください。
疲れてきたので、/usr/bin/gemにexiftoolをインストールしちゃった(^^;
もうちょっと検証してからやれば良かったなーと今になって反省してる。
そんなこんなで「RubyでIllustrator画像収集」は根本的に書き直しになっています。
生データ読み込み方式はあと一回アップデートして更新終了予定。
以降はmini_exiftoolを使った新スクリプトをアップデートしていきます。
使用するには二手間かかってしまいますが、安定度は高くなるはずです。
ひとまず試作版はできているのですが、もう少し機能を足したいので、後日公開とします。
はー、ブログ書くのって時間かかりますね。
すでに三時間ぐらいかかっているという…。
途中レノくんの妨害でマウスが吹き飛ばされたり、キーボードの上に乗っかられたり、背後から気持ち良さそうな寝息が聞こえたりと、父ちゃんもなかなか大変なんだぜ。
これをアップしたらお風呂を沸かして、沸くまでの間にモンハンしつつ、レノくん撫で撫でするお!