サイバーエージェントで1ヶ月インターンをしました!

iOSを初めて、半年がたち自分の力を試してみたいと思い、インターンをしていたPopshootという会社からサイバーエージェントインターンをしました。

インターンでは、Carteというアプリの新機能の実装を行いました。 Carteは、順天堂大学の教授と開発を行なっている医療系のアプリです。脈拍を見て、自律神経が正常に働いているのかを計測することができます。 www.cyberagent.co.jp

開発

機能

計測後にユーザーが自分の体と心の体調を5つ星から選ぶという機能とタグを選択肢今どんな気持ちなのかをメモする機能を付け加えました。

取り組み方

はじめにデザイナーとPMの方からデザインと仕様を教えてもらい、メンターの方と工数について話しました。 それからは、毎日開発を行いました。わからないことは、メンターの方が丁寧に教えていただきスムーズな開発を行うことができました。 毎週金曜日には、進捗報告会が設けられその週に行なった進捗をデザイナーとPMの方にみていただく機会がありました。 それぞれのタスクが分散されおり、コードを書くことに集中できました。

取り組み

既にあるコードを読むことは自分自身慣れておらず、まずはそれを読むことからはじめました。 アプリをビルドし、端末で画面ごとにどんなロジックが走っているのかを探り探りではじめました。 特に、難しかったのはデータの保持の仕方をロジックから追うことです。 僕は普段RxSwiftを使っていたのですが、Carteでは他のライブラリが使われておりそれを理解しながら追うのが難しかったからです。

また、実装面では自分で設計やライブラリ選定をさせていただきました。 設計では、Firebaseを使いデータの送受信のタイミング、どんなデータを送るのかといった設計を行いました。 初めてFirebaseを触る機会でもあったので、何度もデータベースにデータの送受信を繰り返しバグがおこらないかを試しました。 また、どんなデータをどこに送るかは絵を書きながら頭にイメージができるようにしました。 絵を書くことでメンターの方にも伝わりやすかったので、絵でイメージすることは続けて行こうと思います。 ライブラリは、星を選択する画面で実装しました。 ライブラリを選定するときに、何度も更新されているのかとexampleを見て使いやすそうかというところを選定基準にしました。 使ったのは、Cosmosというライブラリです。 https://github.com/evgenyneu/Cosmos

実装で、とても手間がかかったのはタグを選択する画面です。タグ選択画面では、真ん中を軸にタグを並べるというUIでした。 このタグ選択の画面では、UICollectionViewを使ったのですがCollectionViewCellは左詰めで実装されるためこれを真ん中にするコードを実装する必要がありました。 まずはじめにUICollectionViewLayoutに準拠したクラスを作成し、CollectionViewのwidthとCellに入るデータを取得してきます。 それぞれのCellの横幅を足していきCollectionViewのwidthよりも長くなると次の列のCellになる。というのを繰り返していき、Cellの列の個数と各列のCellの個数を変数に格納します。 そして、それぞの列のCellの右端と左端になるCellのそれぞれに余白を作るという処理を書きました。

課題

今回のインターンで、メンターの方によく指摘されたのが命名規則でした。これまでのインターンではそれほど意識をして来なかったのですが、「動詞なのか名詞なのか」、「もっと具体的にしたい」こういったところは、よく注意されました。なので、もっと自分で開発する際でも気をつけて開発していきたいと思いました。 また、これまで自分はMVVMを使った開発が多かったです。しかし、今回の開発はMVCを使った開発で読みやすかったのですが、ロジック部分とUIの部分が混在しておりMVVMの良い面を改めてしる機会になりました。他のアーキテクチャを知ることでいろんな知識を得ることも知ったので、今後は複数のライブラリを使って見たいと思いました。 また、工数は結局予定よりも大きく伸ばしてしまいました。なので、何ができるのかどれくらいでできるのかという点に関しては、もっと意識していきたいと思いました。

その他の生活

piggの決起会で表参道のブラジル料理屋に連れて行ってもらったり、カルテの方達と築地に海鮮を食べに行ったり、人事の方に焼肉に連れって行っていただいたりと美味しいものを食べさせていただきました。 また、賞の名前は忘れたのですが、サイバー内の賞を取られたエンジニアの方と話す機会やAbemaTV、CatsのiOSエンジニアの方ともご飯をさせていただきとても学びの多い時間を過ごさせていただきました。

宿泊施設は、会社から歩いて10分ほどの場所にありとても近く渋谷とは思えないほど静かな場所にありました。 また、宿泊施設には他の技術を持ったエンジニアの方も宿泊されており、夜になると一緒に鍋をつつきながら技術について話をしました。

感想

メンター、PM、デザイナーの方が優しく毎日伸び伸び開発できたのがとても過ごしやすく楽しかったです。 集中した開発ができたので毎日成長する実感があり、本当に有意義な時間でした。 また、モチベーションがみなさん高く、仕事に対する取り組みに関して凄く尊敬しました。 いろんな人と話すことが好きなので、大勢の方が働いておられる会社はとても自分にあっているなとも思いました。 本当に多くの方にお世話になった1ヶ月でした。ありがとうございました。 力試しでのインターンでしたが、「もっともっと成長しないといけない」と改めて思うようになりました。

今後

今後は、再びPopshootでインターンをさせていただきます。Popshootには、優秀なエンジニアの方が多くおられるので今回つけた基礎力をもとに少しでも近づけるようにしていき、命名と開発スピードも意識して開発をしていきたいと思います。