[副業] 林業従事者向けオフライン日報作成・管理サービス
【チーム構成】私のみ
【役割】立ち上げから全てを担当
【技術】Flutter, Dart, Riverpod, Flutter Hooks, Firebase, React, Vue3, TypeScript, Figma
【概要】
林業は山の中で仕事をするので、電波が入りづらい状況にあります。世の中の日報サービスは電波が存在する前提のものが多く、最適なものがありませんでした。そこで本サービスは「オフラインで日報を記録する」「林業に最適化された入力項目である」ことをメインに開発をスタートしました。日報を作成するためのスマホアプリ(Flutter)と、作成された日報を管理するための管理画面を開発しました。利用者の声を聞きながら機能を増やしており、現在は勤怠管理もできるシステムに進化しています。
【Pick Up】要件定義、デザイン、開発、リリースの全てを実施
発注者の方とコンタクトをとりながら要求を吸い上げつつ、ユーザーストーリーをベースに要件を洗い出し、機能設計を進めました。リモートでのやり取りだったので、実装する機能をある程度絞った段階で、早い段階からFigmaで作成した画面イメージを叩き台として、認識をすり合わせるように進めました。開発においても、発注者が関わってくるような意思決定はオープンに下すようにし、どのような意図を持ってその判断を下したいのかを伝えて、文章として残し、齟齬が生まれないように配慮しました。また、一度、管理画面の機能を充足させるためにリニューアルを行いました。この時は時間的な制約もあり、デザインを外部に発注しました。発注先を探すところから始め、面談を行いながら選定し、先方との要望すり合わせや進捗管理を自ら行いました。小さなサービスではありますが、それでも「何もない状態からサービスを作り出す」「自分のお金を使ってビジネスをする」という経験は、仕事に対する真摯さを私に与えてくれたように感じています。
【Pick Up】Flutterアプリの開発内容
画面構成としては、カレンダー表示、日報作成画面、問い合わせ用のWeb画面埋め込み、設定画面、といった画面があります。それぞれの画面はBottomNavigationBarで切り替える構成で、画面切り替え時に再読み込みされないように、IndexedStackなどを活用しています。状態管理は、標準のものから試してみましたが、今はRiverpod x Flutter Hooksに落ち着いています。画面テーマについて、ライトモード/ダークモードに対応しています。調整が難しいと感じたところは、フォントの大きさです。iOSの小さい端末とAndroidの大きめ端末の差分が大きく、それぞれで閲覧に問題が出ないように、標準のサイズとは異なる指定をする必要がありました。表示が見切れてしまうことは必ず避けるようにしたかったので、少し小さめのサイズに合わせた設定にしました。また、Flutterのテーマ実装方法はしばしば更新されるので、都度、アップデートに対応しながら調整を加えています。
【Pick Up】自動化の設定
検証アプリのFirebase App Distributionへの配信とAppStoreやPlayStoreへの配信は、fastlaneを利用して自動化しました。環境切り替えはmain.dartを用意して対応しました。iOSアプリのビルドもありましたので、基本的には手元PCからビルドを実施していますが、無料枠が余っている時はGitHubでもビルドできるようにGitHub Actionsも設定しました。初期から自動化の設定をしておいたおかげで、アプリから離れてWebフロントエンド側にしばらく注力する時期があっても、自動化しておくことでリリース作業を遅滞なくできるようになっています。