がとーしょこらの技術録(旧)

記録や技術的な記事を書いていきます

ピクシブ技術職向け夏インターン2019に参加した話

f:id:gatosyocora:20191003131057j:plain

2019年9月4日(水)~13日(金)の8日間開催されたPIXIV SUMMER BOOTCAMP 2019に参加してきました

recruit.pixiv.net

こちらは技術職志望の学生向け夏インターンシップピクシブで展開されている様々なサービスに実務形式で関わることができるものです。

この中でも私はpixiv コミック(Android)コースで参加させていただきました。

 

 

 

なぜ参加したのか?

ピクシブが展開しているイラスト投稿サービスpixivを始め, BoothやVRoid関連など様々なサービスにお世話になっています。また,ピクシブが掲げる「創作活動がもっと楽しくなる場をつくる」という企業理念がいいなと感じたので, どんな環境でどんな人たちが働いているのかを知るために参加しました。

 

pixivコミックとは?

インターンでやったことを話す前にこれを軽く触れておく必要があると思います。

pixivコミックとは簡潔に説明すると電子書籍マンガが読めるサービスです。

プロの漫画家の人気作品だけでなく,pixivに投稿されたマンガも読むことができます。

Webブラウザからだけでなく, AndroidiOSのアプリからもサービスを利用できます。

comic.pixiv.net

 

やったこと

今回のインターンでは, pixivコミックのAndroidアプリのアカウント情報編集画面の新UIの作成をおこないました。

 

1日目

開発環境を準備したりしていました。

IDEを準備するときによくハマりがちなので今回も案の定Android Studioの設定でハマってしまいました。他にもチーム内で開発で使っているツールを準備しました。(slackとかgithubとか)

チームごとに使うツールが違うらしいです。(サービスの内容や対象プラットフォームが違うのでそれはそうだなーって感じですね)

 

2, 3日目

pixivコミックのAndroidアプリはkotlinで開発されています。以前JavaでのAndroidアプリはやったことあるのですが, kotlinは初めてだったので簡単なタスクをおこなって慣れていきました。実際に動いているサービスに自分がコミットすることは初めてて人生初のPull RequestをLGTMしてもらいました。

 

4~7日目

メインタスクをおこなっていきました。

アカウント情報管理画面はこんな感じの画面です。

f:id:gatosyocora:20190929154311p:plain

 アカウント情報がそれぞれ表示されています。

そして「>」がついている項目はタップすると下図のようにダイアログが表示されて変更できます。

 

f:id:gatosyocora:20190929154315p:plain

アカウント情報の変更には同じAPIを使っており, 複数の項目を変更しようとするとリクエストが項目ごとに飛んでよくないので一気に変更できるようにしたいということで新UIの実装をおこないました。

新UIは既にデザイナーさんが考えてくださっていました。
各項目はテキストを入力できるようになっていて, いずれかを入力すると更新ボタンが押せるようになって更新できるという感じです。

 

今回のインターンシップで実際にできた画面はこちらです。
パスワードを変更しようと入力しています。
(動いているところはリリースされてから実際に触って確認してみてください)

f:id:gatosyocora:20191003130550p:plain

 

この画面を作成するためにいろいろな課題がありました。

  • 新UIではUIを構成するViewがいろいろ変わっているため確かめながらやっていく必要がある
  • 最初期につくられた画面なので他の画面では採用されているMVVM的な設計がされていない

これらを主に解決できるように進めていきました。

 

1つ目はマテリアルデザインなViewを使う必要がありました。
マテリアルデザインとはGoogleが推奨するデザインです。

material.io


特徴としてはボタンからの影が落ちていて浮かんでいるように見せて、ひとつの分離したオブジェクトとして見せている感じです。
特に今回はテキストを入力するためにTextInputLayoutを使ったわけですが, 他の画面で使われていなかったので調べながら変更する必要がありました。
特にデザインを意識してそれぞれのプロパティを設定するのが大変でした。

 

2つ目はすべての処理を画面を構成するActivityに書いてあったので分ける必要がありました。
アプリ全体としてMVVMが採用されており, 役割ごとにコードを分離していきます。具体的には

  • Activity : 画面のViewを操作する
  • ViewModel : 画面に表示する情報を取得したり, 加工したりする
  • Repository : 情報をAPIやキャッシュから取得する

のような感じに分けました。
これは他の画面では実装されていたのでそれを参考にしながら変更しました。画面の設計にはRxBindingも使われていました。Rxは聞いたことはあるもののこれもメンターの方に教えてもらいながら実装していきました。

 

8日目(最終日)

最終日はやった内容を報告するプレゼンをおこないました。

プレゼンの準備は前日からおこなっていましたが, ぎりぎり準備がまとまった感じでした。プレゼンは自分が想定していた通りうまく行きましたが, 他のインターン参加者のプレゼンがエンジニアらしい技術的なプレゼンばかりでした。私のプレゼンは一般向けのような構成にしていたので技術的な部分はあまりなかったので対象を見定めてプレゼンをおこなう必要があると感じました。

 

会社の雰囲気

多くのチームで10時に今日やることを確認するミーティングをおこなって19時に業務を終わるという感じでした。

印象に残っているのが19時以降の時間の使い方です。社員同士で雑談をしたりゲームをしたりしていました。特にインターンシップに参加したときはポケモンカードが流行っていてバトルしている光景を見かけました。他にも麻雀やボードゲーム, ぷよぷよなどもやっていました。他にもイベント会場として貸していることも多く, 勉強会もおこなわれていました。

また, 毎週水曜日には全社会という社員全員が参加する集まりもありました。ピクシブは多くのサービスを取り扱っているので他のプロダクトの状況や方針などを共有できる場はすごく大切だと思いました。ここで社員全員に対して新しく入った社員が自己紹介をおこなったりもしていました。その日の昼には部署関係なく集まってランチをするランチ会というのもおこなわれて社員交流の場としてすごく良かったです。

ピクシブのサービス的にも社員さんの中に様々なジャンルや作品のコアなファンが多くてインターン初日にもデレマスのライブに参加するために休んでいる社員さんが何人かいました。趣味に寛容で全力な人も多いと感じました。

 

まとめ

インターンは参加してすごく良かったです。

今回の目的だった「どんな環境でどんな人たちが働いているのか」は個人的に十分に知れましたし, kotlinはいいぞってなったのでAndroid開発をするときには積極的に使っていきたいと思います。

普段はUnityとC#で開発をしていますが, C#は最近のバージョンではnull許容やreadonlyなどでどんどんkotlinに近づいてきているのでさらに使いやすくなっていきそうです。
また, 今回使ったMVVMやRxも普段の開発にどんどん取り入れていきたいと思います。

心残りとしては本当はVRoidがあればそちらで応募予定だったのですが, 今回はなかったのでまたあればそちらで参加もしてみたいですね。

ノベルティもいっぱいもらいました(嬉しい)

f:id:gatosyocora:20191003133521j:plain