もやし日誌

日記のようなもの

pixivの夏インターンに参加してきた話

8月22日〜8月28日にピクシブ株式会社で行われたpixiv SUMMER BOOTCAMP 2018に参加してきました。

pixiv SUMMER BOOTCAMP 2018とは

recruit.pixiv.net

簡単に言うとpixivで夏に行われるインターンのことです。(ちなみに春インターンもあるそうですよ)

2018/10/5追記: ピクシブ公式ブログに今回の夏インターンの話が掲載されました

inside.pixiv.blog

選考とか参加する流れとか

(今回の)インターンの選考フローは

  • 書類選考 もしくは github選考
  • 面接 + コーディング面接

という感じになっていました。ちなみに自分はgithub選考を選んだので、自分のgithubアカウントの中身が書類選考の代わりになるという感じでした。

ちなみにコーディング面接の問題の内容ですが、あんまりよく覚えてませんが(すいません)Rubyで書いたのを覚えています。

ホワイトボードに書くタイプのテストは初めてだったのでめちゃくちゃ緊張しましたが、面接担当の方に「こんなAPIありましたっけ?」みたいな質問を投げても大丈夫なので安心して参加して大丈夫だと思います。

参加のきっかけですが、Twitterで仲良くさせて頂いてる方がpixivのインターンの経験者が多かったので自分も行ってみようかなあということで応募してみたという感じでした。(あとは毎日使わせてもらってるサービスというのが大きかったですね)

インターンでやったこと

ざっくりと説明するとpixivコミックのAndroidアプリの方を触らせてもらいました。

インターンの課題内容については配属先チームによって様々ですが、自分は 画面遷移アニメーションの改善と実装 でした。

Start an activity using an animation  |  Android Developers

Android Developersに分かりやすい解説が載っていますが、具体的に言うとこのようなアニメーションをpixivコミックのアプリ内に取り込もうといった感じです。

1日目(水曜日)

インターンの流れの説明を受けて、自己紹介して、社員の皆さんとお昼ご飯を食べて、支給されたiMac 4K(既にある程度セットアップ済みでしたが)に開発環境を作ったりして、残った時間で少しpixivコミックのアプリの方のコードを読ませてもらい、お試しの課題として細かいissueを直したfixを🎉初コミット🎉させてもらいました。

2日目(木曜日)

実装できそうなアニメーションを探して、試しに色んなActivityに組み込んでみたり.... と試行錯誤していたら一日が終わってました。

実はコードレビューを受けて指摘点を直してコミットしたり...というのは人生初の体験だったので新鮮でしたね!(綺麗なコードを書くことを心がけよう!)

3日目(金曜日)

順調に進むと思いきや、バグにぶち当たる

解決策はいくつか思いついたので、試してみましたがあまりうまく行かず... 困ったなあということで色んな人に相談してアドバイスをもらってりしてました。

ちなみにハマったバグですが、一部分が画面の外にあるなど見えてないアイテムを選択するとアニメーションさせるShared Elementに指定したビューがシステムのUIの上に描画されてしまう... というものでした。

f:id:kazuki09:20180908071208g:plain

↑こんな感じに(画像はGoogleが配ってるサンプルアプリをバグらせたものなので実物とは違います)

ちょっと分かりづらいですが、一瞬被って表示されるのが分かると思います。

stackoverflow.com

探してみると色々対処法はあるようですが、アニメーションが崩れたり、ナビゲーションバー、アクションバー等も一緒に強引にShared Elementに入れることでアニメーションさせるなどあまり根本的な解決になっていない(遷移先にも共有するビューがあることが大前提なので広告やボトムナビゲーションバーなどには使えない)ものが多かったので別の方法で対策しました。

簡単に言うと、ビューが完全に見えている(ビューの一部が他のビューの下に隠れていない)かどうか判定してから、Shared Elementに入れるか、またアニメーションさせるかの処理を入れて解決しました。

public boolean isViewFullyShown(View view){
    Rect rect = new Rect();
    view.getGlobalVisibleRect(rect);
    return view.getHeight() == rect.height() && view.getWidth() == rect.width();
}

こんな感じに...(KotlinならViewクラスに拡張メソッドを生やすといい感じになると思います)

4日目(月曜日)

バグを直してコミット!翌日は成果発表ということでいい感じのところまで実装を進めて一日が終わりました。

5日目(火曜日)

インターン生全員で期間中に出した成果を発表しました。

退勤後、社員さん達とインターン生の皆と打ち上げに行き、全日程終了!という感じです。

その他諸々、まとめとか

ちゃんと最新のAndroid開発のアレコレにキャッチアップしていた

出来たばかりのアプリじゃないのにちゃんと最新のアレコレが取り入れられてる!すごい!!とコードを読ませてもらった時に思いました。(小学生みたいな感想ですが、あまりレガシーを引きずってなくてすごいと思いました)

そこ感動するところ?と思われてしまうかもしれませんが、プルリクを送ると自動的にコミットしたコードに対してLintが走り、コーディングルールに反している部分に自動的に指摘をするコメントが入るようになっていて「これは早速家に帰ったら自分のレポジトリでもやらなきゃ」と思いました。

帰宅後、TravisCIで回しているスクリプトを少し弄って、自動でチェックを行うようにしました。また一つ勉強になりましたね.... 感謝感謝。

qiita.com

Kotlinはいいぞ

開発ではKotlinを使用しましたが、C#にもこの機能ほしいな...なんて思いながらコードを書いてました。良い言語です。(C#も良い言語ですよ)

普段はC#で開発しているので復習がてらインターン前に1週間程Kotlin漬けの日々を送ってみましたが、実際に稼働しているコードを見ると自分が知らない書き方があったりで勉強になりました。

ミリオンライブ!のPが多かった(?)、そして鑑賞会をした

(あまりインターンに関係ない話ですが) 今回のインターン、一緒に参加したインターン生に自分含めて3人ほどミリオンPが居て正直に言ってびっくりでした。(自己紹介用に作ったスライド見てたらおおお!!!ってなりました)

メンターさんもミリオンのPでした。なんとっ!!でしたね。お誘いがあったので金曜日は退勤後に社内でミリオン4thの円盤鑑賞会をしました。やっぱりいつ見てもミリオンの円盤は神なんやなあって....

打ち上げでは布教させて頂きました。

美味しいご飯を奢っていただきました

ごちそうさまでした。(写真撮り忘れました)

インターンの報酬により、pixivプレミアムが実質無料になった

インターンの報酬は5万円でしたが、pixivプレミアムの月額料金は(2018年9月現在)540円/月なので約92ヶ月分の会員費が無料になったということになります。(なりませんが今後もありがたく使わせてもらいます)

pixivのpは小文字のpということに気づいた

今までずっと大文字のPだと思ってました... すいません。

「ひとりで開発してるんじゃない」という事の大切さ

チームで複数人で開発していると、いろいろな知見が得られます.... これ、結構大きいです。

ひとりで開発していると、(余程人に見れ貰えるプロジェクトにならない限り)基本的には誰にも指摘されないのでなかなか辛いものがあります。自分で気づくまでおかしいコードはおかしいままですし、もっと良い実装方法があったとしてもなかなか気づけないです。

人にレビューしてもらうといろいろな があって勉強になりますし、一緒に開発することでモチベも上がりますね。(正直に言うとレビューは楽しいことばかりではありませんが、それでもやる価値はあると思います)

(コードを否定されてる気分になるので)レビューを食わず嫌いしてた人間ですが、受けてみて印象が変わったというのが大きかったです。

以上、お疲れ様でした!

f:id:kazuki09:20180828215401j:plain