Excite就業型インターンでFlutterアプリ開発!

こんにちは!こちらの記事ではエキサイト株式会社で開催された就業型インターンにおいて、Flutterアプリ開発を通して学んだこと、感じたことをご紹介したいと思います。

自己紹介

情報系大学院に在籍しています村井と申します。普段はKotlinを用いたAndroidアプリケーション開発を中心に行なっています。大学院の研究ではVue.jsを用いたWebアプリケーション開発を行なっています。

業務内容

今回のインターンではFlutterによるモバイルアプリ開発を中心に行いました。

ウォーミングアップ

私はFlutterによる開発経験が浅く、riverpodなどを用いてToDoアプリを作る程度でした。そこで実際の業務に入る前に最初の1・2日はウォーミングアップをさせて頂きました。内容としては既存のパブリックリポジトリのパッケージバージョンアップとAsyncNotifierに書き換えるということを行いました。ウォーミングアップを通じて実際の業務に入る前にFlutterやriverpodの基本的な書き方や思想を理解することができました。

ウーマンエキサイト

業務では始めにウーマンエキサイトのモバイルアプリ開発を中心にGithub Actionsを用いたCI / CDの実装も行いました。

モバイルアプリ開発

ウーマンエキサイトでは主にView層やViewModel層の開発を行いました。内容としては、以下の機能を実装しました。

  • デバッグスクリーンの作成
  • 画面を開いた際に特定のWidgetまで自動スクロールする機能の実装
  • UIの軽微な機能追加・修正

CI / CD

Github Actionsを用いてデフォルトブランチがmergeされた際に、リリースノートに最新のpull requestタイトルを記入する機能を追加しました。

E・レシピ

ウーマンエキサイトに続いて、E・レシピのモバイルアプリ開発にも参加させて頂きました。E・レシピではView層のみならずViewModel層やAPI呼び出しなど、ロジック部分の実装を中心に行いました。内容としては、以下の機能を実装しました。

  • レシピリスト画面の実装
  • UIの軽微な修正

インターンでの学び

ここからは今回のインターンで学んだことを振り返ります。

技術面

Flutter (Dart)

今回初めてFlutterを用いた大規模なアプリ開発を経験しました。私が今回のインターンで学び、理解が深まったものとしては以下のようなものがあります。

  • Dartの文法
  • Widget
    • PlatformScaffold・PlatformAppBar
    • GestureDetector
    • CustomScrollView
    • Sliver
    • WillPopScope
    • GlobalKey
  • cupertino
  • riverpod
  • freezed
  • go_router
  • firebase

Flutterでのモバイルアプリ開発はKotlinと比較して、Material Designに準拠したUIコンポーネントが豊富に用意されている点が長所であると感じました。 一方、Providerやriverpod、freezedといったパッケージを理解することが容易ではありませんでした。Flutterではサードパーティ製のパッケージを利用することが多く、モバイル系のフレームワークというよりWeb系のフレームワークであると感じました。
FlutterではAndroidのようにアプリアーキテクチャの指針が示されていないため、プロジェクトごとに独自のアーキテクチャを採用する必要があると感じました。今回実装させて頂いた2つのアプリは多少構成に違いはあれどMVVMを採用しており、社内で共通のアーキテクチャを採用することで円滑な思想の共有が行えると感じました。

CI / CD

これまで個人開発ではCI / CDといったものに触れてくることはありませんでしたが、今回インターンで実際に使用することで、作業の効率化や自動化がプロダクトや自分自身に良い影響を与えると実感できました。これを機に個人開発でも積極的に使用していきたいと感じました。

コードレビュー

私はこれまで個人開発が主だったため、自分の書いたコードをレビューしてもらう機会がほとんどありませんでした。今回のインターンでメンターさんや社員さんにレビューして頂き、レビュアーの皆さんが普段どのような点に気をつけているか知ることができました。これからも個人開発ではレビューしてもらう機会はありませんが、色々なコードを参考にしたりコーディング記法を学ぶことで、コードの完成度を高める習慣を身につけたいと思いました。

労働面

今回のインターンはリモートに加えて週2日、実際に出社するハイブリットな形で参加させて頂きました。出社日には昼食に連れて行ってくださったり、Beer Bashを開催して頂き、メンターさんや社員さんと交流する機会が沢山ありました。また定例ミーティングや会議にも参加させて頂き、実務レベルのプロダクト開発を肌で感じることができました。実際にオフィスでお仕事させていただく中で社内の雰囲気を感じることができ、とても貴重な経験になりました。

まとめ

今回の就業型インターンでは実際にオフィスに出社させて頂いたり、プロダクト開発に携わらせて頂くことで、実務レベルのプロダクト開発を肌で感じることができました。メンターさんや社員さんには質問に気さくにお答えいただき、緊張することなく業務に取り組むことができました。コーディングの知識や能力はもちろん、コミュニケーションや情報共有といったものまでエンジニアに必要な経験や能力を再確認できたと思います。

最後に

メンターさんや同じ事業部の社員さん、人事さんにサポートして頂きながら充実した1ヶ月を過ごすことができました。今回のインターンを紹介してくれた友人にも感謝しています。
1ヶ月間、本当にありがとうございました。