engineer is my vocation

22卒のAndroidエンジニア

pixiv梅雨インターンに参加しました!

f:id:keita_developer:20190527042111p:plain

 

5/25~5/26の2日間、pixiv梅雨インターンAndroidエンジニアとして参加しました。
recruit.pixiv.net

目次

応募のきっかけ

twitter上の某スプレッドシートでこのインターンの存在を知り、「アプリコース」としての募集があったことや、学年不問で応募が可能であるということが決め手となり、応募を決めました。

採用まで

今回のインターンでは書類選考とGitHub選考の二種類の方法のうちから一つを選んでエントリーできる(双方とも面接あり)とのことだったので、個人開発のアプリについてのエピソードなどをしっかりと伝えることが出来る書類選考を選びました。中のコードはお見せ出来るような状態ではなかった。そして後日、オンラインでの面接が行われ、アプリをリリースして長期間運営していく中で得た経験(レビュー対応、ローカライズ、競合アプリとの差別化等)や、これまでに参加したインターンで学んだ技術的知識についての話をし、無事に選考を突破することができました。インターン中に社員さんに聞いた話では「作ったものをきちんと世に出して、ユーザーの意見を取り入れながら機能改善に取り組んだという話が印象に残った」とのことで、アウトプットすることの重要性を再認識しました。

制作物を考える

今回のお題は

あなたの考える最高のpixivを開発する

というもので、比較的広めなテーマでのハッカソンでした。また、二日間という限られた開発期間だったので、始まってから制作物を考えていたら間に合わない可能性が高いと考え、採用が決まってすぐにpixivのアカウントを作り、アプリを使い始めました。そして、アプリを一週間ほど使っていく中で、以下のような感想を持ちました。
 
良かった点
  • とにかく作品が豊富(サービスが活発に動いている)
  • レコメンド機能が充実している(おすすめユーザー、関連作品)
  • イラストがかわいい
 気になった点
  • フォローしているユーザーの絵を追いかける時に画面遷移を何度も行う必要があった。
  • 上記のレコメンドなどで通信量が増えるので、外出先で気軽に開けない時がある
 これらの点から「スキマ時間に見たいものだけを可能な限り素早く確認するアプリ」に需要があるのではないかと考え、今回制作するアプリのコンセプトにしました。

当日

インターン当日はメンターであるkobaken(@koba_dog_さんとともにペアプログラミングで開発を進めていきました。ペアプログラミングにも色々な方式があるようで、開発を始める前にkobakenさんと相談した結果、基本的に自分で開発を進め、要所要所でアドバイスをいただきながらソースコードを改善していくという形で開発を進めていくことにしました。以下に、開発中に頂いたアドバイスによって得られた知識の一部を箇条書きで紹介します。
  • Koin を用いた依存性注入の手法
  • flatMap を用いた複雑なリストの平坦化
  • Repository層やDataSource層の扱い(MVVMアーキテクチャ
  • Android Studio の便利機能についての知見(レイアウトファイルの Data Binding 化等)

f:id:keita_developer:20190528214322j:plain

作業中の様子

f:id:keita_developer:20190528215831j:plain

差し入れ


完成品

f:id:keita_developer:20190528223003g:plain

著作権の関係で画像は差し替えています
 今回のアプリを開発するにあたって意識したことは「UIデザインを洗練させ、一人のユーザーに長期間愛用されるアプリを目指す」、「ユーザーのニーズが多様であることを理解し、カスタマイズ性を持たせる」の二つです。この部分にこだわった理由としては、自分が普段アプリを運営していく中で最も意識している部分であり、自分らしさが最大限発揮できるのではないか、と考えたからです。以下に工夫した部分を箇条書きで紹介していきます。
  • シングルカラムデザインを採用し、画面遷移をせずともフルサイズでイラストを閲覧できるようにした。
  • 複数枚の画像が存在する作品も、あらかじめ展開しておいて一覧画面で閲覧できるようにした。
  • シングルカラムの場合の欠点であるスクロール操作の面倒さを軽減するために、ファストスクロール機能(つまんでスクロールする部品)を実装した。
  • ユーザーでのフィルター、一度に読み込む件数、イラストの画質、そしてイラストの付加情報の表示をカスタマイズできるようにした。
  • 設定画面を開いたときに現在の設定情報を保持しておき、設定画面を閉じた時に差分を確認することで、余計な再読み込みが行われないようにした。
  • ボタンの連打時にアニメーションが連続で再生されてしまうのを防ぐために、アニメーションの再生が終わるまで、ボタンを一時的に無効化する処理を実装した。
  • ユーザーフィルターの有効無効を切り替えるアニメーションを工夫した(コイントスをイメージ)

発表

インターンの最後にはそれぞれの作った作品のプレゼンを行いました。一人につき10分もの持ち時間が与えられるということで、なぜこのアプリを作ろうと思ったのかについてや、上述している多数の工夫した点をキャプチャ動画を交えて、余すことなく発表することが出来ました。 
 

f:id:keita_developer:20190529130326j:plain

f:id:keita_developer:20190528224630j:plain

発表の様子

結果,反省

見出しに「反省」と書いてる時点で察しはつきますが、残念ながら優勝することはできませんでした。以下に、他の人の発表を聞く中で感じたアプリの問題点について、自分なりに分析していきます。
まず一つ目としては、「拡散性」です。他の参加者の発表の中には、SNSとの連携などを活用していかにユーザーを増やしていくかについてが事細かに語られるものもあり「サービス」としての完成度の高さを思い知ると同時に、自分の作ったものは「ツール」として完結してしまっているので、どれだけその中身をこだわったとしてもそもそもユーザーを呼び込めなければ意味が無い、ということを痛感しました。
もう一つの問題点としては、投稿者に向けたアプローチが出来ていなかったということです。今回のアプリでは、閲覧者のみにスポットを当てていたために、pixivの大事な要素の一つである投稿者と閲覧者との交流を促進できるような機能を搭載することが出来ませんでした。これらの問題点を総括して言えることは「アイデアを考える時点で視野をもっと広く持つべきだった」ということです。今回は「閲覧者としての自分」だけを見て開発をしたために、「イラストの投稿」「感想をSNSで発信」といった自分とは違う目線でpixivを利用するユーザーの事を考えられていませんでした。

懇親会

発表が終わった後は参加者全員での懇親会が開かれ、社員の人達が普段どんな雰囲気で仕事をしているのか、他の参加者の人達がどんな活動をしているのか等、ここでもたくさんの情報を得られる事が出来ました。料理を食べた後は社員さんも交えて一緒にゲーム(スマブラ)で遊んだりもしました。(金曜日の仕事の後などはこんな雰囲気で社員各々がオフィスで自由に過ごしているらしいです。楽しそう。)
 

f:id:keita_developer:20190528225018j:plain

懇親会

最後に

2日間という短い時間でしたが、得られることも多く、技術的にはもちろんのこと、それをどう活かすか(アイデア)、それをどう伝えるか(表現力)など、サービスを開発していくために必要なこと全てを満遍なく学ぶことができました。
そして、発表内容や懇親会で話を聞くなかで、自分以外のインターン生のレベルがとても高いことが分かり、これからエンジニアとして活動するためのモチベーションがさらに高まりました。(負けてられない)
担当してくださった社員の皆さん、一緒に参加したインターン生の皆さん、2日間本当にありがとうございました!