天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

freee Tech Night「シン・モバイルアプリの技術解剖」に参加してきた

freee-tech-night.connpass.com

こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。

会の概要

以下、イベントページから引用です。

freee株式会社のエンジニアによる、エンジニアのためのイベントです!

freeeで利用している技術、組織、エンジニアの生態の紹介を皆様に知っていただけるような内容を定期的に配信します。

freeeでの自由度と裁量権の高い独自の開発文化を支えるエンジニア達がどういう想いや熱意でfreeeを開発しているのかに興味を持っていただければ幸いです。

ちょっと短めの時間で、参加しやすい・聞きやすい内容を目指します。 普段はなかなか参加できない…という方も、ラジオを聴く感覚で、ぜひご参加ください!

freeeはクラウド会計・人事労務ソフトを5年以上開発を続けており、技術的な成果や経験を広く公開させていただきます。会計や人事労務などのセキュアなドメインならではの技術的工夫や苦労を、世の中にシェアし役に立てたいという想いから定期的にイベントを開催しています。 多くの方にご参加頂き、経験やノウハウの共有や交換のネットワークを広げるきっかけになれれば幸いです。

会の様子

freeeのモバイルアプリ作成時の工夫ポイント

OpenAPIのスキーマ定義がすでにされていたことを活用し、OpenAPIによる自動生成を行った点は工夫したポイントだということでした。
Web側でAPIが定義されていたおかげで、Nullableの考慮などがスムーズにできたそうです。

また、モバイブスというデザインシステムを活用したことで、オブジェクトのサイズやフォントを共通で使えるようにした点も工夫したポイントだということです。

freeeのモバイルアプリ作成時につまったポイント

Webだと一定曖昧な定義でも作ることができる点(long/intの差をWeb側ではそこまで意識しないがモバイルアプリではオーバーフローやクラッシュが起こり得る)は苦労したということでした。

freeeのモバイルアプリのアーキテクチャ選定

iOSに関しては最終的にはMVVM/PCAの両者で悩んだそうですが、開発スピードを重視したいという点から、良くも悪くも自由度が高いMVVMを避け、ライブラリとして提供されており規約が厳し目でテストを書きやすいPCAを選定したということでした。
ただし、PCAだと破壊的変更が起こるリスクも存在するため、その点に関しては動向を頻繁にチェックする必要性があるというお話でした。

一方でAndroidでは、公式でAndroid Architecture Componentsとして紹介されている理由からMVVMを採用したそうです。(公式ドキュメントをもとに共通認識が揃いやすい)

freeeのモバイルアプリのUIフレームワーク

iOSは、新しいバージョンのアプリを作れるということで、SwiftUIをフルで使用しているそうです。

AndroidではJetpack Composeを採用しているそうで、宣言的UIを活用しながら高い開発速度を出せたということでした。

freeeのモバイルアプリのアクセシビリティ

今回のアプリでもfreeeではアクセシビリティ対応*1したという話がありました。

実装するにあたっては、明細書の削除や並び替えをアクセシビリティアクションで切り抜ける際に苦労したということで、ドラッグ周りの実装はなかなか大変だったということです。

また、アクセシビリティを常に意識できるようにPRに含めるなどといった工夫をしたことも効いたそうでうす。

今後の展望

今後は、モバイブスやデザインシステムなど、iOS/Android共通で使えるような部分を充実させていきたいという話とマルチプラットフォーム対応をしていきたいという話がありました。

また、テスタビリティを上げるとともにテストを充実させていくようにしたいということです。

会全体を通した感想

SwiftUIをはじめ、最新フレームワークを積極的に取り込んでいくスタイルはさすがだなあと思いながら話を聴いていきました。

テキストフィールド周りやドラッグ周りの苦労に関しては共感がめちゃくちゃありました。

*1:ダイナミックタイプ+ボイスオーバー