📌

【バージョンアップ推進】Flutterバージョンアップルール

2023/09/11に公開

はじめに

この記事ではプロダクトの保守を目的としてFlutterとパッケージのバージョンアップについてまとめています。
(記事はFlutter3.0.3からFlutter3.7.12へバージョンアップを例としています)

【前提】

  • Flutterバージョン管理にはFVMを使用。
    (FVMを導入していない場合は以下の記事を参考に導入してください。)

https://fvm.app/
https://zenn.dev/altiveinc/articles/flutter-version-management

  • Flutterバージョンをstableとしない。
  • 導入中のライブラリも可能な限り最新バージョンにバージョンアップする。

【背景】
記事執筆時点でのFlutter最新バージョンは3.13.3。(2023年9月11日)
本来であれば最新バージョンを使用したいところではあるが、3.13系がリリースされたばかりで安定しているか不安であること(多分問題ないと思うが)、3.0系から大幅にバージョンを上げるリスクを考慮し、一先ずメジャーバージョンを一つ上げる対応としている。

指針

バージョンアップのタイミング

  • 基本的に、追加実装のタイミングや、SDK、OSのバージョンアップがあるタイミングで問題ない。

Flutterのバージョンアップ指針

  • 原則、最新バージョンとしたい。
  • 最新バージョンの安定性に欠ける、または破壊的変更があるバージョンを挟む、使用中のバージョンから最新バージョンの開きが大きいなどの理由で工数が膨らむリスクがある場合は、メジャーバージョンを1つずつ上げて対応する。

ライブラリのバージョンアップ指針

  • 非推奨のライブラリは代替する。
  • バージョンが上がっていた場合、
     - 仕様上、最新バージョンに問題がなさそうなら最新に上げる。
     - 最新バージョンで問題がありそうなら最新の1つ前のバージョンに上げる。(UIが変わるなど)
     - 他のライブラリとの依存関係にある場合、互換性のあるバージョンの範囲で最新に上げる。
  • 破壊的な変更がある場合、
     - 現状のバージョンで仕様に耐えられるなら現状維持とする。(保守範囲はPM/PLに相談、機を見て別チケットで個別に対応などを検討)
     - 急ぎの対応が必要な場合はバージョンを最新に上げる。

手順

①Flutterバージョンアップ

※ 3.7系で最新のバージョン

fvm use 3.7.12 
fvm_config.json
{
  "flutterSdkVersion": "3.7.12", 
  "flavors": {}
}

②エラーを解消(SDKと各ライブラリのバージョンの互換性ないよとエラーが出るはず、なければ問題ない)

例)

※intlの補足(⭐️詰まった箇所)
  • intlパッケージは他のパッケージと依存関係にありやすいため、最後に上げると良い。

https://pub.dev/packages/intl

  • SDK(flutter_app_test)とintlのバージョンに互換性がない場合、yamlに以下を追記して強制的にintlのバージョンを上げることは一応できる。
    Flutter3.7.12にdependenciesにintl: ^0.18.1 を指定した時のエラー↓
Because every version of flutter_localizations from sdk depends on intl 0.17.0 and flutter_app_test depends on intl ^0.18.1, flutter_localizations from sdk is forbidden.
So, because flutter_app_test depends on flutter_localizations from sdk, version solving failed.

overrride文追記↓

pubspec.yaml
{
  dependency_overrides:
    intl: ^0.18.1
}

pub get後↓

③アプリの挙動チェック(終わり)

Discussion