こんにちは。今回はSpinpassというSpinnakerのAndroid・iOSモバイルアプリを開発・リリースした話をします。アプリは以下のリンクからダウンロードをすることができます。
HackWeekという社内ハッカソンみたいなイベントで開発をはじめたのがきっかけですが、正式なリリースまで持っていけました。イベントの詳細は第3回 #MercariHackWeek 終了、Award受賞したチームを発表します!#メルカリな日々をご覧ください。
技術スタック
以下のような技術スタックになっています。
- Flutter
- モバイルアプリの開発
- Fastlane
- モバイルアプリのApp Store Connect、およびGoogle Play Consoleへのリリース
- Bitrise
- CI/CD
- Kleat・kustomize-base・Kustomize
- 開発検証・モバイルアプリ審査用のSpinnakerのプロビジョニング
少しFlutterに対する所感などを今回紹介したいと思います。
Flutterで開発してみて
Chompyのシステム構成をまとめてみる, yagitatsuの記事でChompyがモバイルアプリ、およびアプリケーション・サーバーもDartで開発されていることが紹介されていて、Flutterが徐々に広く使われているサービスにも導入されはじめているのではないかと感じていました。 そのため、エンジニアとして技術的なキャッチアップが必要だと思い、今回のHackWeekが良い機会だなと感じていました。自分はSpinnakerに詳しい(方だと思う)ので、今回はそのモバイルアプリを開発するに至りました。学生時代にiOSエンジニアとして1年間インターンをしていたので、その知識も同時にアップデートしたいと思っていました。
React Nativeにも似ていますが、いまはFlutterのほうが勢いがありそうだったのでReact Nativeは選択しませんでした。

Flutterで開発をしてみると、よく聞くような「さまざまな理想」とは大きく実態は違いました。
Android・iOSの知識なくてアプリを作れる?
実際に開発してみて、Flutterで開発することはAndroid・iOSの知識なくしてできないなと思いました。例えば、Flutterでアプリを開発するためには(ほんの一例ですが)AndroidのリソースIDなどのデバッキング、Xcode上での設定などが必要です。 VSCodeで開発していたのですが、Android StudioおよびXcodeを開く機会が多くありました。これらの使い方を知らなければアプリ開発を完結することはできないでしょう。
リリース準備のフェーズでも、Google Play ConsoleやApp Store Connectなど仕様などを把握する必要があります。当然ですが、iOSやAndroidアプリ開発の経験があれば有利でしょう。
「ちょっとXXXを作ってみた」という記事やFlutterの入門書がありふれているので、AndroidやiOSの環境ごとに必要な違いが取り上げられることは少なく、読者が盲点になっているところかなと感じました。実際にはAndroidやiOSアプリ開発の知識が求められることになることに注意が必要です。
コミュニティの未熟さ
monoさんを代表するように、日本でもFlutterに知見を持っている方はいらっしゃいますが、決して多くはありません。 また、iOSと同様、市販されている書籍はどれも入門書であり、実際にリリースすることが主題になっている本はありません。
FlutterコミュニティのSlackワークスペース、またはGitHub上で問題の解決を目指していくことになるのですが、その情報量の少なさから欲しい情報が見つかる確率は少ないと言えます。
開発しやすい
Hot Reloadがありますし、いろんな便利な開発ツールがFlutterにあります。パフォーマンス・プロファイリングをはじめ、Widgetの描画のデバッキングツール、ネットワークに関するツールなどどれも便利です。 Flutterは包括的な開発環境を用意しています。
VSCodeで非常に良い開発環境を構築することができますので、商用のIDEなどを用意しなくてもいい点もメリットです。
まとめ
Android開発とかやっていきたいなと感じてきました。SwiftUIで最初はトライしてたのですがFlutterにシフトチェンジしたおかげでAndroidアプリもリリースすることができました。
つい昨日、Flutterを1.20
から1.22
にアップグレード対応をしたのですが、今後もFlutterの動向に注目していきたいと思います。