pixiv の本選考インターンに参加してきました

はじめに

今年に入ってから1/22~1/26の5日間、pixiv のインターンに参加してきました。春でも夏でもなくなぜこの時期にインターンに行ったかというと、ここを見ていただければわかると思うんですが、pixiv は新卒採用本選考の三次選考がインターンとなっているからです。この記事はインターン終了翌日の三次選考結果待ち期間、飛行機に乗り遅れて次の飛行機を待っている間に書いたものになります。

インターン課題

今回のインターンでは、pixiv と さくらインターネット が共同運営・開発している画像変換クラウドサービス ImageFlux のチームにて作業を行いました。インターンで参加するサービスは二次選考通過と同時に自動的に決まったようでしたが、面接時にやってみたいサービスとして ImageFlux やそれを利用している pixiv Sketch Live [1] をプッシュしていたので、それを汲んだアサインだと思います。
※社名は敬称略

ImageFlux は画像の回転、拡大・縮小、合成、フォーマット変換などの画像変換(および変換された画像のキャッシング)を主とするサービスであり、画像を保管するストレージサーバは ImageFlux を利用する会社様自身が用意するという形式をとっています。ですので、今まで蓄積してきた画像データを変換して配信したいときに、ImageFlux を導入することで、画像変換システムを1から構築したり運用したりする手間を省き、すぐに変換画像の配信が可能となります。

ImageFlux による画像変換の流れを簡単に説明すると、以下のようになります。

  1. クライアントが ImageFlux に対しパラメータ付 URL を用いて画像を要求する。
  2. ImageFlux は渡されたパラメータを解析する。
  3. URL に対応する画像をストレージサーバに要求する。
  4. ストレージサーバから返された画像に対して、解析したパラメータ p_i に応じた画像変換 filter_i を行う。
  5. 変換された画像をクライアントに返す。
ImageFlux とその周辺

今回私は、ImageFlux の画像変換を行うフィルター機能の1つ、アンシャープマスクを用いた鮮鋭化フィルターの開発を行いました。ここで苦労したのは、ImageFlux の特殊な画素値の持ち方を理解して処理を行うところでした。

たいていソフトウェアで画像処理を行う場合は、画像ファイルから全画素値をメモリに読み込み、一気に処理すると思います。一方で ImageFlux では、画像変換におけるレイテンシや使用メモリを減らすために、画像の画素値を行または複数行ごとに画像変換パイプラインに流して処理を行います。

回転などの全ての画素値を必要とする画像変換の場合は、渡ってきた行単位の画素値をそのフィルターで一旦全て溜めておく必要があります。また、ネガポジ反転や簡易的なクロマキーなどは画素ごとに処理を行うので、画素値が来たタイミングで処理をすぐさま処理を行うことができます。

ですが、アンシャープマスクなどのカーネル幅が決まった畳み込み演算の場合は、次の処理に必要な行数の画素値、つまりカーネル幅+α程度の行数の画素値をメモリに確保しておけば良いので、画素値を全てメモリに溜めておく場合に比べ、使用メモリを大幅に削減することができます。

ここで、”次の処理に必要な画素値”を残すためにメモリを使いまわす部分で苦労しましたが、iPad Pro に図を書きなぐってなんとかインターン期間中に成果物として出せるものが完成しました。

鮮鋭化前画像
鮮鋭後画像

なお、今回のインターンは Go で開発しました。ImageFlux のコアは Go でできてるので。実は今まで参加したインターン、今回含め4回とも全てGoを使っている。Amazon Go でも Pokémon Go でもなく、あの今にも踊りだしそうな紛れもない Go。なんて偶然。

最終プレゼン

選考過程のインターンなので最初は人集まらないだろうなぁと思っていたんですが、slack の here で同じフロアにいたエンジニアさんたちが続々と集まってきました。あと福岡オフィスにも生中継されてた。

発表は良くも悪くもなにごともなく終わりました。ただ、発表直前までコードを書いていたため、資料作りにかけた時間は3時間しかなくプレゼンの工夫があまりできませんでした。もう少し余裕をもって事前準備をしておけば良かったなぁと反省しています。

発表中はカメラで録画されてたみたいだけど、あの映像は貰えるのかな?今度聞いてみよう。

余談

インターン初日に例の大雪に見舞われた様子。タクシーもなかなか捕まらずスーツケースを引きずってホテルまで帰りました。雪国に昔住んでた身としては何も変わらない日常風景だったわけですが。

2018–01–22 の東京某所

オフィス

の写真はあまりとってないけど、アイマスの伊織ちゃんのスタンディがあったり、チームラボの百年もの間徐々に海面が上がるといわれているアニメーションジオラマ・百年海図巻があったり、配置を入れ替えても絵として成立する顔ハメ看板があったりと、とにかく好奇心と創造心をかきたてるアイテムがたくさんありました。多分ぐぐれば社内の風景はいっぱい出てくる。

ば な な

滑らないバナナ

戌の絵馬。自分がいるあいだに生戌を見られて良かった。

pixiv エントランス 戌年の絵馬 taked by @kamiko_pixiv

フリードリンクもいっぱい飲んだ。味噌汁は飲んでないけど。

おわりに

ImageFluxのコア機能について説明してくださった @harukasan さん、ImageFluxにおける画素値の持ち方や度重なる質問攻めに嫌な顔せず丁寧に対応してくださった @saturday06 さん、Rubyコミッターの裏話を聞かせてくださった @unak さん、pixiv のこれからの展望や仮想通貨についてお話したり人事周りのお世話をしていただいた @kamiko_pixiv さん、その他関係者のみなさま、5日間本当にありがとうございました!無事三次選考を通過し、また会える日を楽しみにしています。

宣伝

pixiv は今春技術職向けとビジネス職向けの2つのインターンを開催するそうなので、興味がある人は参加してみては?交通費・宿泊費全額支給、日給1マンエンでサービス開発までできるとは、、、自分も行きたかった。


  1. 実は、ImageFluxはライブストリーミング機能も開発しています。https://speakerdeck.com/imageflux/imageflux-live ↩︎