engineer is my vocation

22卒のAndroidエンジニア

ピクシブの春インターン「PIXIV SPRING BOOT CAMP2020」に参加しました!

f:id:keita_developer:20200301120159p:plain

こんにちは、 @keita_developer です。

 

2/26〜3/6までの平日8日間、ピクシブの春インターン「PIXIV SPRING BOOT CAMP2020」の「Sketch(Android)コース」に参加しました。

 

recruit.jobcan.jp

 

 

参加までの経緯

去年の春ごろ、一度この会社のインターンに参加したことがあり、その時の社内の雰囲気や担当してくれた社員さんの対応がとてもよく、ぜひ機会があれば再びこの会社のインターンに参加してみたいと思っていました。そんな中、今回のインターンの募集を見つけ、Androidエンジニア向けのコースが用意されていたことや、前回のハッカソン形式とは異なる実務形式のインターンだったことから、応募することを決めました。(前回のインターン参加に当たってpixivを利用し始め、そのままプレミアム登録するくらいプロダクトを気に入ったからという理由もあったりなかったり)

 

採用までの流れは「GithubリポジトリのURLを提出」→「面接」といった感じでした。Github選考を利用するのは初めてだったので、急いでリポジトリのREADMEの編集や、公開用リポジトリの作成を行いました。普段からやっとけ

 

ちなみに、面接官の方が去年インターンに参加していたことを覚えていてくれた(メンターの方だった)ため、面接があっという間に終わりました。

keita-developer.hatenablog.com

参加したコースについて

今回自分が携わることになったのは「pixiv Sketch」というアプリです。このアプリの機能について簡潔に説明すると、「アプリ内で描いた絵 or 手描きの絵をシェアできる」というものです。本家pixivとの大きな違いは、「描き途中の絵や落書きなども気軽に共有できる」という点にあります。

play.google.com

また、このアプリは2015年にリリースされてから既に約5年間運営されており、 溜まっていた不具合修正や機能追加のタスクを時間の許すかぎり消化していく、というのが今回のインターンでの作業となりました。

取り組んだこと

今回のインターンでは、主に以下のようなタスクに挑戦しました。

画像プレビュー機能の改善(リリース済み!)

既存の実装ではタイムライン上に流れている画像について、画像をタップされた時に表示される背景が黒色で固定されていたために、背景透過の画像が表示できない、という問題がありました。そこでAndroidPalette API という機能を活用し、画像に合わせて背景色を動的に変更する、という対策を取り、この問題を解決しました。

 

f:id:keita_developer:20200309225110p:plain

f:id:keita_developer:20200309225101p:plain

f:id:keita_developer:20200309225105p:plain

不要になったActivityの削除(リリース済み!)

元々、「カメラ画面を開きつつフィルターを適用する」という目的のために存在していたActivityがあったのですが、仕様変更に伴い撮影して得られた写真の画像に対してフィルタなどを掛けるようになったため、このActivityの役割が無くなっていました。(むしろ、余計なインスタンスを生成していたために動作が重たくなっていた)そこで今回、該当の部分の処理を外部インテント(端末のカメラアプリ)に委ねるようにし、このActivityを削除することにしました。途中onActivityResultの取り回し等でハマった部分もありましたが、無事にタスクを終わらせ、コードの量も削減できました。

ちなみに、せっかくなのでCameraXの採用も考えたのですが、まだアルファ版しかリリースされていませんでした。残念…

f:id:keita_developer:20200309225441p:plain

f:id:keita_developer:20200309225435p:plain



事務局からのお知らせ機能の実装(リリース済み!)

コンテストの受賞連絡や投稿内容についての警告を表示するための新規画面の作成に携わりました。これまではやろうと思えばpixiv本体のお知らせを使って連絡をとることはできてはいましたが、Sketch側でもきちんと実装しよう、ということでこのタスクに取り掛かりました。

UI, UXデザインについて、チームのデザイナーの方と相談しながらレイアウトを組み立てていきました。実際の実務に近い流れで作業させていただくことができ、これから開発する画面デザインにきちんと納得してから開発することができたので良かったです。

また、内部の実装については、ほぼ既存のコードの流用ですぐに実現することができたのですが、元のコードが書かれていたのが結構前だったこともあり、なかなか時代を感じさせられるコードとなっていました。(RxJava とか RxJava とか)そこで、 Android JetPackコンポーネント等(LiveData, Coroutine, Paging Library)を活用したモダンなコードへのリファクタリング作業も追加で行いました。

f:id:keita_developer:20200309225449p:plain

成果発表

最終日には各々の成果をまとめて発表する機会がありました。インターン生だけでなく、数多くの社員さんが発表を聞きに来ており、自分の発表が終わるまで常に緊張していた気がします。

自分の発表を無事に終わらせられて良かったのはもちろんのこと、他のインターン生の発表を聞くのも面白かったです。やはり同年代の強いエンジニアの存在は、自分にとってとても良い刺激になります。

f:id:keita_developer:20200309230652j:plain

 

待遇、職場環境など

  • 交通費、宿泊場所を会社から支給していただきました。地方学生はこれが無いとインターンへの応募が厳しくなってくるので、ひたすらに感謝しかない、といったところです。 
  • 就業時間は10:00〜19:00(休憩一時間)でした。とはいえ、ホテルにいても暇だったので、いつも早めに出社してた気がします。
  • 給料は1万円/日でした。これは余談なのですが、最近自分の中で「インターン = 出稼ぎ」という図式が出来つつあります。 
  • 作業用のiMacの支給(スペック十分)や、飲み物の無料提供など、福利厚生も充実していました。社員さん曰く「ストレスなく働けることが、プロダクトのクオリティを向上させる上で重要」とのことで、安心して働くことができました。

    f:id:keita_developer:20200309230648j:plain

  • 終業後のオフィス(特に週末)は社内のフリースペースで社員が各々好きなように時間を使っていて(ゲーム、麻雀、鍋を囲む、酒、etc...)、仕事が終わった後も楽しく過ごすことができました。(自分はスマブラポケカをしてました)

 

まとめ、感想

終わってみると、「本当に自分が働いていたのはたった8日間だけだったのか?もっと前からここで働いていたのではないか?」 と思うくらいこのインターンでの毎日が日常に溶け込んでいるようで、とても居心地がよかったです。これは、仕事の内容が普段の実務にとても近いものであったり、就業時間以外で社員さんと関わる機会が多かった(大体ゲームしてた)おかげだなと感じています。

何はともあれ、技術的な知見をたくさん得られるだけでなく、趣味を楽しむ時間もあったり、同年代のエンジニアからの刺激を受けることができたりと、最高の環境で8日間を過ごすことができました!お世話になった皆さん、本当にありがとうございました! 

 

来週からは別の会社での実務インターンが始まるので、引き続き頑張っていきたいところです。