マッチングエージェントさん(サイバーエージェントさん)でインターンしてきました!
こんばんは.
ふなちです(((o(*゚▽゚*)o)))
8/13~9/7までマッチングエージェントさんでAndroidエンジニアとしてインターンしてきました!
マッチングエージェントさんはサイバーエージェントさんの子会社で,「タップル誕生」というアプリを作っている会社です.
Agenda
- お仕事の内容
- プログラムを書く中で学んだ事
- プログラミング以外で学んだ事
- お仕事以外での活動
- 大変だった事
- 自分の中での課題点
- 最後に....
※文字サイズが小さくなっている部分は読んでもらおうと思って書いてる訳ではないので読み飛ばしてください!参加したイベントに関するブログはまた別で書きたいと思います!
お仕事の内容
KotlinでAndroid アプリのコードを書かせて頂きました.
主に,
- 既存の負債コードの修正.主にflux化とListAdapter化.
- テストを書いた.(自分の書いたコードのみ)
- 施策の実装.
- その他小さなissue潰し.
等をしました.
プログラムを書く中で学んだ事
- flux.
- コードレビューの仕方.
- テストの書き方.
- Android Studioの便利なショートカットキーや機能.
- ペアプロの楽しさ.
flux.
そもそも私は,インターンに参加するまでfluxとは何か?というのはAndroid設計パターン入門の本を読んでほわほわと知っているけれど,fluxの設計思想で書かれたコードに実際に触れたり,書いたりしたことがありませんでした.
\今までMVVMばっかり触ってました/
最初のflux化は,MVVMの設計思想に基づいて書かれている画面をflux化する事でした.
MVVMには慣れ親しんでいたのでどこに何が書いてあるのかすぐに分かったのと,9割型同じ機能をもつ画面が既にflux化されていたのでそのコードを参考にしする事ができました.そのお陰もあり,fluxとはどういうものか何となく学べつつ1~2日でflux化することができました.
その後も3箇所くらいflux化しました.その中でfluxの書き方と良さみを知る事ができました.
私が学ばせて頂いたflux化については,メンターさんだったへいへいさんの
Flux for Android - Speaker Deck
のスライドを見ればわかるのでここでの発言はちょっと省略します!
スライドとはちょっと違うところは,LiveDataとListAdapterを使って書いてたくらいだと思います.
Adapterに関してはListAdapterじゃないとモヤモヤする病(楽をしたい病)にかかってるので勝手に無心でRecyclerView.Adapterから書き直しました!!
ちなみにLiveDataの問題点である垂れ流し問題(あの画面回転したらもう一回イベントが飛んでくる的な問題)はSingleLiveEventで解消していたので問題なしです!
ただ,LiveDataを使ってもprivateのMutableLiveDataとpublicのLiveDataで二つプロパティ用意しないといけないのが悲しいお気持ちになるので,いい感じのものが出て欲しいです!(公式に対してissueとしては話が出てるみたいなので楽しみ!)
その他Tips
- SharedPreferences関連はStoreにかく.
- ActionCreatorを叩くのは,Viewで!ActionCreatorのAとBがあった場合,AのActionCreatorを叩いた事により得られる値を使って,BのActionCreatorを叩きたいってなった場合も,(複数のActionCreatorを叩きたいってなった時も,)ごちゃごちゃなるのを伏せぐためです.
- (これは好き好きかもですが,)Viewだけで完結するものは,Viewで完結させる.当たり前だけど,脳死で書いていると,全て回そうとしかねないのでちゃんと考える.
fluxの私流の書き方(自分用のメモ)
- Viewで必要な情報を洗い出す.
- Storeに必要な情報を垂れ流してくれるLiveDataを作る.
- Action Creatorに通信処理周りを書いていく.
- ActionにAction Creatorを書いていく中で必要になったActionを書いていく.
- StoreにActionの受け取る部分を書く.LiveDataの値を更新するのもここ.
- StoreのLiveData群のうち,どれかのLiveDataに依存するものの値をTransfomationとかMediatorLiveDataを使って更新させる処理をかく.
- Viewでちゃんと値を受け取る体制ができているかの確認と,まだ回せるものがないか探す.
- 最初に戻るか,終わり.
私の感じたfluxの良さみ.
- ActionCreatorに非同期処理周りを書く!Storeにロジックを書く!って決められているのでコードが描きやすい!MVVMだとVMが肥大化した末迷いが生まれたりした経験があったのでそういった事がなくて良い!
- Actionをリスト画面と詳細画面のStoreで受け取るようにする事で情報共有が簡単に出来る!onActivityResultとサヨナラ出来る!(ただし,LiveDataから情報が渡ってくるタイミングはちゃんと知っておかないと挙動に驚く羽目になるので注意です?)
- コードレビューがしやすい.(ここ大事!!)
fluxへのモヤモヤ
- Storeの肥大化.この話はsato△さんにお話を聞いたのですがReduxまでは行かなくともStoreのコードを分散させれるReduceみたいなものを作った方がいいのでは?というお話でした.
コードレビューの仕方.
4週間もお世話になったのもあり,コードレビューしていただく機会もする機会も沢山あったからこそどうやってすべきなのか学べました.
前のインターンは2週間だったのもあり,自分の仕事に手一杯でなかなかコードレビューをする事ができませんでした.自分のせいなのもあり後悔してました.
ですが,今回はかなり人のコードを読む事ができ,勉強する事ができました!まだまだ修行が足りませんが....
私のコードレビューの仕方は,Github上でdiffを眺めて(。 ・ω・))フムフムとしていました.
- どういうところに気合いを入れて読むかなんとなく考えて読むとより良いコードレビューができる.
- なんの処理をしているのかわからない部分は遠慮なく質問する事が大切,
という事を学びました.
ちなみにfluxで書かれているコードほど読みやすく,StoreとActionCreatorを読めばだいたいわかる.みたいな感じで良かったです.設計って大事やな!
また.コードレビューをしていただいて色々知る事ができて良かったです.ありがとうございます.
テストの書き方.
今までテストをちゃんと書いた事がなかったのでいい経験になりました.
- flux化した部分のテストを書かきました.
- Storeのテストを書くのが難しかったです.Mock地獄になってしまいました.自爆なのですが特にLiveDataが連鎖的に変更する場合のテストが...Testableなコードを書くよう心がけていきたいです.
テストを書く事で,何箇所かバグを見つける事ができました.その度,このためにテストはあるんやな.と感じる事ができました.
テスト,大変だけど書いて損はないのです!!
Android Studioの便利なショートカットキーや機能.
- Show memory indicator
その他色々....!全部書くのは大変なので....👀
ペアプロ楽しさ.
ペアプロとは,ドライバーとナビゲーター?に分かれてドライバーがコードを書いてそれを見ながら質問や指摘やをナビゲーターがする.という形でしました.
ペアプロをする事でコミュニケーションができ,実は理解していなかった!という部分が知れたり,悩んでいた部分の解決を早くする事ができたり,Android Studioの自分の知らない使い方を学べたり等する事ができました.
一度だけナビゲーターをさせて頂いたのですが素早くコーディングするコツを学べて良かったです.プロのコーディング力は全然違うなって思いました.
素早いコーディングのコツ:似た感じのclassを丸っとコピぺして再利用するの大事!
へいへいさんと何回もペアプロをさせていただいてました.他の方とも一緒にペアプロさせていただけて楽しかったです感謝です.
プログラミング以外で学んだ事
- 工数は正しく見積もる!
- KPTを書き出して話し合うの大切.
工数は正しく見積もる!
インターンにきたばかりの時,最初のメンターさんだったnamikiさんに
「今のお仕事何日くらいかかりそう?」
と聞かれ,その時は特に困った事がなかったので私は,
「あと2日で終わります!」
と答えました.ですがテスト書いたりしていたのもあり2日で到底終わりませんでした😭
もしこれがプランナーさんに聞かれていたりとかしてたら詰んでいたと思うとヒヤヒヤしました.
工数を見極めるのも経験と知識が必要なのですが,それ以前にnamikiさんにアドバイスをもらった通り,自分にあまりにも不利すぎる工数は言わないようにしようと決意しました.
KPTを書き出して話し合うの大切.
チーム(施策)メンバーと月一,Androidチームメンバーとは週一でKPTを行ってました.
KPTの良さみ
- 実は気になっている事や困っている事を伝えるいい機会になる.
- 認識の差を払拭できる.
- 褒め合う文化もあったのでモチベを高められる.
- 考えや気持ちを共有する事でチームの仲が良くなる.
- 週一開催なので負担にならない.
私は今までKPTを洗い出しみんなで話し合うという事をした事がありませんでした.
でも今回経験させて頂いてとても大切な事なんだなと知る事ができました.私自身良く認識の差が発表会直前に見つかりデスマする羽目になったりなど経験してきたので,今まで取り入れて来なかったことに後悔です...
お仕事以外での活動
- 尊敬する方々とランチ🍔
- 部活動🏓
- 打ち上げ🍹
- お仕事全く関係ないのもあるけど記憶に残ったディナー
- 一人暮らし
尊敬する方々とランチ🍔
主にへいへいさんがいろんな方とランチを設定してくだ去ったおかげでいつもqiitaやブログ等でお世話になっている方々に会えました.
ogaclejapanさん,takahiromさん,前川さん,sato△さん...等々沢山の方とランチさせて頂きました!
またAndroidersランチ🍚も開催されており,美味しいお弁当を食べながら勉強になる話が聞けて楽しかったです.
Home · airbnb/MvRx Wiki · GitHubが気になる👀といった話や,jetpackの導入状況の話などをしていました.
みなさんとても優しい方で色々なお話を聞かせてくださり,有意義な時間を過ごす事が出来とても嬉しかったです.もっと精進してもっと沢山お話したいなとも思いました!
他にも,シャッフルランチといって会社の中でエンジニアだけでなく全員でランダムにチーム分けをしてランチに行くというイベントが毎週開催されていたのですが,そのイベントでも普段お話しないような方とお話する事ができたりして楽しかったです.
施策?チームでランチした時に食べた鰻も美味しかったです.
ほとんどなかったのですが,一人の日は会社で安く買うことのできるチキンや野菜を食べながらネットサーフィンをしていましたϵ( 'Θ' )϶チキンが美味しかったです.
🍚に関していうと,楽屋の唐揚げが美味しかったです!でも一個が大きすぎて3個/5個しか食べられませんでした.鍛えてリベンジを謀りたいです!
部活動🏓
一回しか参加していないのですが,へいへいさんに卓球部の活動に連れていって頂いたのがとても楽しかったです.
沢山汗かいて,沢山笑えて最高でした!!
大人になったらまた参加して,🏓のあと呑みに行きたいです🍻
打ち上げ🍹
月の最後に打ち上げがありました!
美味しいドイツ料理とビール(私は飲んでないです)に囲まれて\わいわい/しました.
お酒入ってないのに超やばいことを話した気がするのですが,忘れてください!(きっとお酒入ってましたし忘れてくださってるはず...)
みなさん楽しそうで,それを見てられるだけで私は楽しかったです.
お仕事全く関係ないのもあるけど記憶に残ったディナー
にしこりさんと
小さい企業で働いている方のお話を聞くこともそんなにないので,いい経験になりました.あと,ご飯が美味しかったです!
釘宮さんとよこちさんと
このブログを眺めた方は多少わかると思うのですが,本やブログですごくお世話になっていたので,一緒にご飯にいけてお話できて嬉しかったです!
地元が近かったのでその話をしたり,他のAndroidエンジニアの方についてのお話や,少しですが設計のお話を聞かせていただけました!コミュ力と知識量を鍛えてリベンジしたいです!
お豆腐をお客さんの机の上で作ってくれる美味しかったです□
インターン最終日の🍚
namikiさんとへいへいさんと🍚に行きました.へいへいさんは次の日始発?の飛行機で大変だというのに連れていって下さってほんとに嬉しかったです.
この時初めてお二人ともアニメに詳しい事がわかって驚きました!!(今更です.)
パンケーキも美味しかったですし,一番お世話になったお二人と悔いの残らないくらい色々沢山お話出来たので良かったです.
こうやってお話できるのもこれが最後かって思うとちょっと寂しかったです😭
一人暮らし
一人暮らし最高!自炊出来たので生活費も抑えられました.
しかも会社から徒歩5分弱のマンション?を借りて頂いていたのでゆっくり睡眠を取ることが出来て最高でした.(普通だと女の子は遠くめのホテルに止まる羽目になるので..)
大変だった事
特にはないです!
あえて言うなら,もともと人の名前を覚えるのが不得意なので沢山の方とお会いしすぎて名前を覚える事ができず大変でした.
自分の中での課題
とりあえず何にせよ遅刻をなくしたいです.
また,コードを書いていて力不足だなと感じる事も沢山あったので,これからも頑張って行きたいです!
最後に....
インターンに来る前はそもそも行けることすら信じられず,実力が足りずに悲しいことになるんじゃないか?と不安で仕方がなかったのですが,インターンを終えて,
インターンシップに来てよかった!!超楽しかった!!役に立てて嬉しかった!!
就職するってなった時にチャレンジするだけの力があったら....入社チャレンジしたいです!!(小声)
と本気で思いました.
真面目に会社の方々全員良い人だし明るいし強いし私がこんな所にいても,こんなに楽しんでも,良いのだろうか?今が私の人生の中で一番Happyな時期時期かもしれないと思う程でした.
また,テストを書く練習や簡単なCustomViewを作らせてもらえたりなど,やりたい事をさせてもらい色々経験を積む事ができました.お陰様で最後のpushがCIを通らなかった事以外,悔いは残ってないです!
最後の最後に...
私に優しく接して下さったり体調を崩した際にも助けて下さった会社のみなさん,分からない時色々助けて下さったり色々お話して下さった施策?チームの皆さん,私に色々教えてくださったりコードレビューをして下さったAndroiderのみなさん(あつもさん,充さん,むっきーさん),コミュ障の私にも沢山声をかけて明るく話しかけて下さったプランナーのアニーさん,私に最初に声をかけてくださってインターンに参加させていただくきっかけを作って下さったnamikiさん,メンターさんとしてして私に色々なことを教えてくださったへいへいさん本当にありがとうございました.
色紙と花束嬉しかったです.
PS.
午前中に用事が入るかもしれない関係で27日のお昼,ぼっちする予定なので一緒にお話🍚してくださる方募集してます...!