当社 TORICO は、モバイルアプリの開発に Flutter を採用しています。
この記事では、2023年1月現在の、TORICO での Flutter 開発事例を紹介します。
TORICO が モバイルアプリ開発に Flutter を採用する理由
共通のコードで iOS と Android に両対応できる点と、Dart 言語での開発の体験が良いことが Flutter を採用している理由です。
私の主観が入りますが、Dart 言語については、概ね TypeScript での開発体験と似ていますが、TypeScript が引きずっている JavaScript が持つ特徴的な挙動(this の挙動、null, undefinedの扱い、Date オブジェクト等)が無く、書きやすい言語だと感じます。
Dart はライブラリの開発もしやすく、パッケージマネージャ(pub)も標準で搭載されていますので、有志の型が開発されているライブラリの導入も容易です。
加えて、Flutter は Windows や Mac 等のデスクトップアプリにも対応できます。
開発体験は Electron を使った場合と似ていますが、Electron に比べて生成プログラムのサイズを小さく保てますので、配布に適していると思います。
TORICO では、社内で使う小規模なツールの開発に Flutter を使う場合があります。
TORICO で Flutter を採用しているアプリ
スキマ
スキマは漫画を無料で読めるサービスです。
モバイルアプリ版は Flutter で開発しており、iOS Android 両プラットフォームで配信しています。
スキマのサービスは、2015年に開発を開始し、4月28日よりサービスを開始しました。
開発当初は、iOS は Objective-C、Android は Java で開発していましたが、2019年に Flutter に切り替えています。
当初の Flutter のバージョンは 1.3 ぐらいだったと思います。
当時は状態管理やルーティングの有用なライブラリは少なく、FutureBuilder などをそのまま使う場面が多くありました。
Flutter のバージョンアップには積極的に対応し、現在は Flutter 2の最新版で開発を行っています。
2023年1月現在の技術スタックは、 zenn の 0maru の記事を参考にしてください。
スキマや、後述の漫画全巻ドットコム等で使われている、 Flutter での Twitter のログインを提供するパッケージ twitter_login は、 0maru の開発によるものです。
スキマは 広告SDKを多く扱うため、Swift や Kotlin の開発分量も少なくありませんが、広告 SDK のコントロールは Flutter 上から行えるようになっており、Firebase と連携してリモートで調整することができます。
スキマのモバイルアプリをダウンロード: iOS | Android
漫画全巻ドットコム
漫画全巻ドットコムは、漫画の全巻販売に特化したECサイトです。
モバイルアプリも提供しており、 Flutter で開発し、iOS Android 両プラットフォームで配信しています。
アプリのリリースは 2021年7月27日より行っており、リリース初期から Flutter を使っています。
リリース時期の技術スタックは、 zenn の 0maru の記事に書かれていますのでご覧ください。
漫画全巻ドットコムのモバイルアプリをダウンロード: iOS | Android
漫画全巻ドットコム MZ Reader
漫画全巻ドットコムは、紙のコミックの全巻セット販売だけでなく、電子書籍も販売しています。
MZ Reader は、漫画全巻ドットコムで購入した電子書籍を読むためのアプリです。
電子書籍サービスは 2012年11月に開始しており、当時は iOS は Objective-C、Android は Java で開発を行っており、Windows 版も提供していました。
電子書籍ビューアは 2020年10月にリニューアルを行い、フレームワークに Flutter を採用しています。リニューアル時点ではアプリの評価が低かったのですが、体験の向上を目的としたブラッシュアップを行い、アプリの評価を大きく改善することができました。
新入社員が入社後数ヶ月でコミックリーダーアプリのレビュースコアを 1.4 → 4.7 に改善した話
電子書籍のダウンロードには、Dio と Flutter Downloader を場面により使い分けています。
2023年1月現在、Flutter2 でリリースをしています。
MZ Reader をダウンロード: iOS | Android
マンガ展
マンガ展 | まんが作品の原画展・イラスト展やサイン会などのイベント情報掲載
マンガ展は、マンガの作家さんとのイベントを提供するプロジェクトです。
現在、東京の池袋と渋谷(Magnet By Shibuya 109内)、大阪の谷町六丁目、名古屋の栄のオアシス21内、台湾の台北101の近くに店舗を運営しており、イベントを開催しています。
物品の購入や会場での来場スタンプが獲得できるモバイルアプリを公開しています。
マンガ展のアプリは 2019年1月からリリースしており、Flutter を採用したアプリの中では一番早い時期となります。
Flutter のバージョンは v0.10 あたりから使い始めたように思います。マンガ展アプリのリリース直前で、Flutter v1.0 が公開されたタイミングだったように記憶しています。
現在は Flutter2 対応で Null Safety になり、状態管理は RiverPod を使っています。
マンガ展のモバイルアプリをダウンロード: iOS | Android
Andorid レジ
Sunmi 社の T2s や T2 mini で動作するレジを Flutter で開発しています。
Sunmi 社のレシートプリンタのバインディングライブラリの sunmi_printer_plus 内の、T2 mini の LCD のバインディングを ytyng が開発しています。
T2s は、2つのディスプレイを持つ Android 端末です。presentation_displays パッケージを使うことで、サブディスプレイにも Flutter のウィジェットを表示することができます。
状態管理は Riverpod, hooks_riverpod を使っています。
デスクトップツール
Windows上で動作する、漫画全巻ドットコムの CMS 連携ツールを Flutter で開発しています。
漫画全巻ドットコムでは、一部のキャンペーンページのコンテンツデータをデータベースに保存しています。
コンテンツデータは非エンジニアの運用スタッフが作成するのですが、Web フォーム上での作成は体験が悪いので、Windows 上の VSCode と連携して作成できるツールを Flutter で作っています。
Flutter を採用している理由は、社内の開発者は全員 Mac を使っているため、Windows での使用を要件としたクロスプラットフォーム開発となると使える技術が絞られることと、その中で 実行バイナリのサイズが小さく、別途ランタイムライブラリも必要無く、動作が安定しているためです。
最後に
株式会社TORICO では、Flutter で自社サービスを開発する技術者を募集しています。
業務内容として Flutter 100% ではなく、AWS、MySQL、ElasticSearch(OpenSearch)、Python Django 等サーバサイド開発も扱っていただきます。応募フォームからの連絡をお待ちしています。