Log.d("yt8492", blog)

Kotlinってかわいいよね…

pixivのサマーインターンに参加しました

こんにちは、マヤミトです。今夏のインターン参加ブログ3本目です。

pixivのサマーインターンに参加させていただきました。

www.pixiv.co.jp

インターンの概要

www.pixiv.co.jp

この夏実施するインターンシップは、大きく分けて3つのコース(全17コース)を用意し、本番環境のAPIを叩き、レビューをうけながら、実際に普段から社員が行っている業務にチャレンジすることができます。 技術の習得やチーム開発を通じて「圧倒的猛者になる」ことはもちろん、ピクシブの開発環境や社風を体験することが出来るインターンシップとなっています。

ということで、自分はpixiv Sketch(Android)でお世話になりました。インターンのタイミングもこちらに合わせていただけるということで、9/23 ~ 10/2に参加してきました。

やったこと

画像フィルターの追加

pixiv Sketchでは投稿する画像にフィルターをかけることができます。

f:id:yt8492:20201027195824p:plain:w300

フィルターの実装にはandroid-gpuimageというライブラリが使われており、今回のインターンではGPUを使った処理をしてみたいという話をメンターの方にしていたということもあり、いくつかフィルターを追加で実装することになりました。

さて、android-gpuimageにはいくつかフィルターが予め用意されていますが、もちろん欲しいフィルターがあるとは限りません。今回も、実装した3つのフィルターのうち、2つはライブラリ側で用意されていなかったのでフィルターを自作する必要があったのですが、その場合シェーダー(GLSL)を書く必要があります。自分はシェーダーを書くこと自体が初めてだったのですが、ライブラリ内部のソースコードなどを参考にしつつ実装しました。三角関数や物理などの学校の授業で習うような知識が実際に活きたコードを書けたので難しかったですが楽しかったです。機能がリリースされるのを楽しみにしています。

リファクタリング

複雑な状態を持つ画面のViewModelをリファクタリングしました。もともとは1つのdata classに全てのパラメータをnullableかデフォルトでゼロ値をもつpropertyに持たせる実装になっていたのですが、どのような操作のときにどのpropertyにどのような値が入るのかわかりにくい、毎回nullチェックをするのが面倒など、今後この画面をいじる時に負債となって辛そうということで、リファクタリングさせてもらえることになりました。

まずは既存の実装の状態のフローを洗い出し、Kotlinのsealed classを用いて状態ごとに型を分けました。複数の状態で共通するパラメータもあれば、特定の状態でしか扱わないパラメータもあります。状態ごとに型を分けることにより、型チェックとスマートキャストを用いて簡単に扱えるようにしました。

今回注意した点として、ViewModelの外に公開するメソッドとパラメータ、状態のフロー自体にはなるべく手を加えなかったことがあります。既存の状態のフローには無駄な部分などがあったかもしれませんが、そこまで変えてしまうと予期せぬバグが紛れ込む可能性があり、インターンの日数も残り少なかったこともありそこはあえてほぼそのままにしました。リファクタリングをしていると理想の設計を追い求めたくなる気持ちが出てきたりもしますが、現実はそう簡単に行くわけではありません。今回は現実的な落とし所を意識しました。

インターンを振り返って

「圧倒的猛者になる」 という文字列がインターンの募集のページなどにありましたが、今回自分がやったことを振り返ると

と、8日間にしてはなかなか頑張ったほうなのではないでしょうか。これは猛者といっても過言ではない(ほんまか???)。

軽い冗談はさておき、実際インターンの8日間は大変充実していましたし、こちらのやってみたいことや興味のあることは言えば柔軟に対応してくれたので、このインターンを通じて圧倒的成長できるのは間違いないと思います。もしこれを読んでいる人で興味を持った人は(もし来年もあれば)ぜひ応募してみてください。

pixivで働いてみた感想ですが、オタクがエンジニア以外にも多く、自分もオタクなのでオンラインながらに大変居心地が良かったです。特にSketchはチームの雰囲気がよく、Slackのチャンネルが活発で雑談も多く(もちろん皆さんちゃんと仕事してます!)、インターン生の自分でも発言する心理的な敷居が低くてチームの皆さんとのコミュニケーションが積極的にできました。業務に関わることも関わらないことも気楽に話すことができたので、8日間だけのインターンながらにチームの一員のような気持ちで楽しく働くことができました。

8日間があっという間に過ぎ去る濃密で楽しいインターンでした。ありがとうございました!