Flutterエンジニアのフリーランス案件で求められるスキルと経験
公開 2026-10-29 監修:株式会社エージェントベスト
Flutterのフリーランス案件では、Dartの非同期処理とnull安全を正しく扱えること、画面とデータの層を分ける設計、パッケージを選んで更新し続ける力、そしてiOSとAndroidの両方の要件変更に追従できることが中心に見られます。Flutterは少人数で両方のOSを担う現場が多いため、画面を作れることに加えて、アプリ全体を一人でも見渡せるかが評価を分けます。
この記事では、Flutterの案件で求められるスキルを分野ごとに整理し、スキルシートや面談での示し方を解説します。ストアへの公開経験やネイティブ連携の準備、独立の手続きはFlutterエンジニアがフリーランスになるにはにまとめています。
Flutterの案件で見られるスキルの全体像
| 分野 | 案件側が確かめたいこと | 示し方の例 |
|---|---|---|
| Dart | 非同期処理、null安全、型を正しく使えるか | FutureとStreamの使い分け、例外の扱い |
| 設計 | 画面・状態・データの役割を分けられるか | 層の分け方、状態管理の選び方 |
| パッケージ | 選定と更新を判断できるか | 更新で壊れたときの対応、置き換えの判断 |
| 両OSの要件 | iOSとAndroidのビルド・ストアの要件に追従できるか | Xcodeの版上げ、Androidの要件対応 |
| 画面と性能 | 重い画面を調べて直せるか、画面サイズに対応できるか | 再ビルドの抑制、DevToolsでの調査 |
| テストと配布 | ウィジェットのテスト、両OS向けの配布の自動化 | CIでのビルドと配布 |
Dartの言語を正しく扱う力
null安全への理解
Dartの公式ドキュメントでは、2023年5月にリリースされたDart 3から、健全なnull安全(sound null safety)が必須になったとされています。今のFlutterのコードは、値がnullになりうるかを型で区別する前提で書かれています。
案件で見られるのは、!(nullでないと断定する記号)に頼りすぎず、nullになりうる値をどこで確かめ、どう扱うかを設計できるかです。APIの応答で項目が欠けている場合や、画面の初期状態でデータがまだない場合の扱いを、型で表して説明できると評価されます。
非同期処理
Flutterのアプリは、通信、保存、端末の機能の呼び出しなど、多くの処理が非同期で動きます。
- FutureとStreamを使い分け、継続的に変わるデータはStreamで流した
- 画面を閉じた後に非同期処理が終わり、破棄された画面を更新しようとする不具合を防いだ
- 重い計算を別のIsolateで実行し、画面の動きが止まらないようにした
- 例外を握りつぶさず、利用者に見せるエラー表示まで設計した
こうした経験を具体的な場面で話せると、Dartを理解して書いている人として見てもらえます。
公式ガイドに沿った層の分け方
Flutterの公式ドキュメントのアプリ アーキテクチャ ガイドでは、関心の分離がもっとも大切な原則だとし、アプリをUI層とデータ層に分ける構成を推奨しています。MVVMを土台にした考え方で、主な役割は次のとおりです(ガイドは決まりではなく指針で、要件に合わせて調整するよう書かれています)。
| 役割 | ガイドでの説明の要点 |
|---|---|
| View(UI層) | ウィジェットで画面を描く。業務のロジックは持たない |
| ViewModel(UI層) | アプリのデータを画面の状態に変換し、画面からの操作を受け取る。ロジックの多くはここに置く |
| Repository(データ層) | データの信頼できる情報源。サービスからデータを取り、キャッシュや再試行、エラーの扱いを受け持つ |
| Service(データ層) | APIや端末の機能、ファイルなど一つのデータの出どころを包む。状態は持たない |
| ユースケース(任意) | 複数のリポジトリのデータを組み合わせるなど、複雑なロジックを置く。必要になったときだけ加える |
状態管理のパッケージ(RiverpodやBlocなど)は、この構成を実現する手段の一つです。案件では、パッケージの名前より、ウィジェットに処理が集まったコードを、ViewModelとRepositoryに分けていった経験のほうが評価につながります。
パッケージの選定と更新
Flutterのアプリは、多くの機能をpub.devのパッケージに頼ります。便利な反面、パッケージの更新が止まる、Flutterの版を上げたら動かなくなる、といった問題も起きます。案件で頼りにされるのは、次のような判断ができる人です。
- パッケージを入れる前に、保守の状況や対応しているプラットフォームを確かめた
- Flutterの版上げに合わせて依存関係を整理し、競合を解消した
- 更新が止まったパッケージを、別のパッケージや自前の実装に置き換えた
- 外部のパッケージをRepositoryやServiceの内側に閉じ込め、置き換えの影響を小さくした
最後の点は、前の章の層の分け方とつながります。パッケージを直接画面から呼ばない設計は、置き換えのときに効いてきます。
iOSとAndroidの両方の要件に追従する力
Flutterのアプリも、それぞれのストアの要件からは逃れられません。2026年10月時点の公式の案内では、たとえば次のような要件があります。
- iOS:2026年4月28日から、App Store Connectへのアップロードは、Xcode 26以降とiOS 26などのSDKでビルドする必要がある(Appleの案内)
- Android:Android 15(APIレベル35)以上を対象とするアプリは、64ビットの端末で16KBのメモリページサイズに対応する必要があり、2027年2月1日以降は未対応の更新をリリースできない(Android Developersの案内)
Flutterのアプリも、エンジンやプラグインの中にネイティブのコードを含みます。そのため、Flutter本体や使っているプラグインがこうした要件に対応しているかを確かめ、版を上げる作業が発生します。Xcodeの版上げで出たビルドエラーや、Gradleの設定の変更に自分で対応した経験は、少人数のチームで特に頼りにされます。ネイティブ側のスキルはiOSの案件で求められるスキルとAndroidの案件で求められるスキルも参考になります。
画面の性能とテスト
- 性能:不要な再ビルドの抑制、長い一覧の描画、画像の扱い。DevToolsで重い箇所を調べた経験
- 画面サイズ:タブレットや横向きなど、画面サイズの違いに合わせた配置
- テスト:ViewModelやRepositoryのユニットテスト、ウィジェットのテスト、結合テスト
- 配布:両OS向けのビルドと配布をCIで自動化し、手作業のリリースをなくした
スキルシートと面談での示し方
Flutterのスキルシートでは、アプリごとに次の点を書くと、経験の中身が伝わります。
- アプリの種類、規模、対応したOS
- Flutterの版、状態管理の方法、層の分け方
- 使った主なパッケージと、選定や置き換えに関わったか
- ネイティブ側で自分が対応した範囲(ビルド設定、権限、プラットフォームとの連携)
- 両ストアの要件への対応や、品質・配布の改善
面談では、設計の判断を一つと、ネイティブ側で詰まった問題を一つ準備しておくと、経験の幅が伝わります。書き方の詳細はFlutterのスキルシートの書き方、面談の準備は面談でよく聞かれる質問をご覧ください。
よくある質問
状態管理は何を使えばよいですか?
案件によって使われているパッケージは違い、決まった正解はありません。参画する案件の構成に合わせて書けることと、なぜその方法を選ぶのかを説明できることが大切です。公式ガイドの層の分け方を理解しておくと、どのパッケージの現場に入っても考え方を合わせやすくなります。
null安全の前のコードを扱う案件はありますか?
Dart 3からnull安全が必須になったため、古いコードのままでは最新の環境でビルドできません。長く更新されていなかったアプリを引き継ぎ、null安全に対応させてから機能を追加する、といった作業が案件になることもあります。古いFlutterの書き方を読める経験は、こうした案件で生かせます。
Webやデスクトップ向けのFlutterの経験は評価されますか?
業務委託の案件はモバイルアプリが中心ですが、社内向けのツールなどでWebやデスクトップ向けにFlutterを使う現場もあります。モバイルの経験を軸にしたうえで、関連する経験として書き添えると、案件の幅を広げる材料になります。
参考にした公的情報・資料
- Sound null safety(Dart)
- Guide to app architecture(Flutter)
- Upcoming Requirements(Apple Developer)
- Support 16 KB page sizes(Android Developers)
記事の内容は公開日時点の情報にもとづきます。制度や税率は変わることがあるため、手続きの前に必ず各機関の最新情報をご確認ください。