t4traw.net👨‍💻RubyでActiveRecordを使ってSQLite3に画像を入れてRmagickとMiniMagickでbenchmarkを試してみた2014-04-15RubyでActiveRecordを使ってSQLite3に簡単に画像を入れようしたらダメでした。結論を言うとImageMagickでto_blobを使用しないとダメでした。勉強した事を書いておく。);最初は単純にFile.open("target.jpg","wb)とかでいけちゃう?と思ったけど、エラー。考えて「Ruby上にデータとして持たないとSQLite3に入れられないよね」と思い、それにはImageMagickを使わなきゃダメという結論だった。Magick::Image.read("target.jpg").firstで画像を開き、ActiveRecordでレコードに書き込む際にto_blobメソッドを使ってdbに格納可能なデータに変換。呼び出す時にはMagick::Image.from_blob(foo).firstしたら無事input.jpgが一旦sqlite3に格納された後、取り出してoutput.jpgに保存できた。この記事書いている最中に「あれ?これmini_magickでもいいんじゃね?」と思った。benchmark使ってみる。11.598356)MiniMagickはfrom_blobじゃなくてreadじゃないとダメだって一度怒られた。あと.gifアニメとかの連続データが確か扱えないのでfirstをつけんなとも怒られた。コード自体はMiniMagickの方が綺麗で好きだ。1つのファイルじゃ差が分からないと思ったので、100回ほどファイルを出し入れし、更に勉強も兼ねてリハーサルを入れたbmbmメソッドを使ってみた。見てみるとuserというスコアではminimagickが優っている物の、総合的なスコアはRMagickを使った方が早いというふうに見える。このuserとsystemとtotalは__user=計算時間、system=入出力時間、real=コマンド起動から終了までの経過時間__という事らしい。ガベージコレクション?によって結果が左右されるみたいなので、精密なスコアでは無いみたいだが、何度かやってもRMagickの方がrealスコアが良いので、この処理に関してはRMagickで良さそう。未熟者故にこのベンチマークの取り方自体が不毛だったり間違っていたりする可能性がある。後日Benchmarkについては調べてみたい。23,821Amazon.co.jpで詳細を見る。