画像処理技術エンジニアの緑川晃。ニックネームはmido。
イラスト一枚でグッズを作成することができるサービス「pixivFACTORY」の画像処理システムを開発している彼に、同技術を発展させることで今後何ができるのか、話を聞きました。
特化した技術は、世の中のプラットフォームへと変わる可能性を秘めている
── イラスト一枚でグッズを作れる「pixivFACTORY」は、画像処理技術を追求することが、サービスにとって重要な価値になっているんですけど。画像処理を扱っていく上で、今後どのような活動が求められているんでしょう。
うーん。その観点からいうと、ツールやライブラリは、これからもっと内製したらいいんじゃないかなって思っています。今よりもっと高い価値や機能を提供していくために。
たとえば、最近なんですけど、「pixiv FACTORY BOOKS」という同人誌を作れるサービスの改善をしていまして。JavaScriptを使ってPhotoshopのデータフォーマットであるpsdをパースして、条件を満たしていない場合は弾くような処理を作っています。
同人誌ぐらいの規模だと、何メガバイトとか何十メガバイトとか、そういう巨大なファイルを一気にアップロードしなくちゃいけないんですよ。通信状況がよくない環境だと、相当待たされますよね。
そんな環境で、ファイルをアップロードしてから「この原稿はダメです」みたいな警告をだされたら、ユーザーのモチベーションは一気に下がりますよね。面倒だから、もう他のところに頼もうかなって思ってしまいますよね。
── JavaScriptを使ったpsdのパースって、ヘッダーの部分を舐めるような簡単なものですよね?
うーん。ヘッダー以外にもパースしなきゃいけないところがあるんですよ。ファイル内のうち、上、真ん中、下と3つぐらいありまして。
→ 参考: File header, Image resources, Layer and mask information
── また嫌な場所をチェックさせますね。psdフォーマット怖いなぁ。
JavaScriptでpsdをパースできる有名なライブラリがあるんですけど、どれもサービスの要件に合わなかったんですよ。すべてのデータをメモリに乗せてからパースし始めるみたいな、そういう実装のライブラリなんです。
小さなファイルを触るぐらいだったら別にいいんですけど、pixivFACTORY BOOKSが扱うような、何十メガバイトもあるファイルを何十個もアップロードするような用途だと、メモリへのロードは遅いし、そもそもブラウザがそんなにメモリを食って大丈夫か?みたいな問題もありますし。
── 汎用的につくると、そういう実装になってしまうのは仕方無い気もしますけどね。OSSの画像処理ツールである「ImageMagick」もそうですし。
そうですね。画像データを全てメモリに展開するとフットプリントが大きくなり、問題が起こることがありますよね。ImageMagickにもそういった問題がありますし。そういう理由があって、pixivの画像変換システムでは使われませんでしたよね。
それをGoを使って内製で作ることで解決して、しかもそれがクラウドサービス「ImageFlux」として外向けに提供されて、他のサービスからも使っていただけたりして。特化したものを内製で作ったからこそ、そういうことができたと思うんです。
── 技術は特化を続けたら、結果として世の中のプラットフォームになると思いますよ。AWSも然り。ImageFluxも然り。
ええ、そういう意味でも、pixivFACTORYの開発チームは恵まれていると思ってます。サービスの特性に特化した実装を、求められているタイミングが頻繁にあるんです。画像ファイルにしてもそう。psdにしてもそう。あと、表にはでてないだけで、内部的にはPDFの解析処理がありまして、これもかなり独特で特化したものを作ることが求められています。
それで、世の中にあふれている既存のライブラリでも扱えない時は、諦めてしまうのではなく、その時その時で、最適なツールを作っていけるようなチームにしていくことが理想。
チームでそういうツールを作って、みんなで安定してメンテナンスしていけるようになると、それだけチームが持つ選択肢は広くなり、サービスが提供できる価値の可能性も広げていける。それって、プロダクトを良くしていくチームとしては、最強になれるんじゃないかって思うんです。
最終的には、そこで培われた技術をOSSとして公開したり、ImageFluxのようにクラウドサービスとして公開して、他のサービスでも使ってもらえたりできるようになれば、かっこいいですよね。
画像処理を扱うチーム作りは難しい?
── さきほどから「チーム」というキーワードがでてきましたけど。画像処理技術を扱うチーム作りって、どうやったらできるんでしょうね。
うーん。
── 画像処理然り、高度な知識が求められる集団作りって、なかなか難しいと思ってまして。私たちにはクリエーターに支持されるプロダクトを作るというミッションがあって、そのための事業に貢献しなくてはいけなくて。だから、特化というより、多様にエンジニアを集めていくことが求められているわけですよね。
どうなんでしょう。難しいんですかね。
例えば、さきほどのpsdファイル解析の話で言うと、ファイルフォーマットの仕様書を開く度胸があれば大丈夫じゃないですかね。サービスに必要な部分を解析するだけなら、そんなに難しくない!という気持ちがあればやれると思っているんですよ。
── 技術力よりもまずはマインドが重要ってことですか!
画像を解析するライブラリって、世の中にけっこう溢れてるじゃないですか。そのコードを追いかけてみるところから始めるのがいいと思います。
あと、慣れないうちは仕事で使うと緊張するので、上手く行ったらいいかな、ぐらいの感じでやるとハードルは下がると思います。
全然具体的な話じゃないんですけど。まず恐怖心をほぐすところからはじめていけばいいと思います。
── では最後に、pixivFACTORYで今後どんな技術的変化があると思いますか?
商品プレビューが動画になるとか。
── それ、本気で言ってるんですか?
そういうのが使えても、いいんじゃないですかね(笑)
── まだまだ技術的にやれることはたくさんありそうですね。では次回、midoが現場で育てた弟子の画像処理エンジニアに、実装に踏み込んだ話を語っていただきましょう。
→ 次の記事: ImageMagick・Blenderを使った画像合成技術
第1回. ググってもみつからないから発明が必要
第2回. 特化した技術がサービスの未来の可能性を育む
第3回. ImageMagick・Blenderを使った画像合成技術