パッケージのバージョン管理に使用されている、pubspec.yamlについて、
その役割や使い方を、詳しくご紹介します。
yamlとは?
YAMLは”YAML Ain’t Markup Language”の略で、
データを簡潔に表現するためのデータシリアライズ言語です。
Configファイルのような設定ファイルやJsonのようなデータファイルに利用されます。
特徴として、YAMLはPythonのようにインデントを使い階層的なデータを表現しています。
flutterのpubspec.yamlとは?
“pubspec.yaml”はFlutterプロジェクトの設定ファイルであり、
アプリケーションの名前、説明、バージョン情報や、プロジェクトが依存するパッケージ情報、
そのパッケージのバージョン等々を管理しています。
pubspec.yamlの構造
“pubspec.yaml”の基本的な構造は以下の通りです:
- “name”:
アプリケーションの名前。 - “description”:
アプリケーションの簡単な説明。 - “version”:
アプリケーションのバージョン。 - “environment”:
このプロジェクトが依存するFlutter SDKのバージョンを指定。 - “dependencies”:
このプロジェクトが依存する外部パッケージを指定。 - “dev_dependencies”:
開発中のみ使用されるパッケージ(テストフレームワークなど)を指定。
buildrunnerやriverpod_generatorなどの開発時に動くパッケージはこちらに定義します。
実際は以下の様に記述になります。
name: check
description: A new Flutter project.
version: 1.0.0+1
environment:
sdk: ">=2.17.6 <3.18.2"
dependencies:
cupertino_icons: 1.0.2
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
flutter_riverpod:
dev_dependencies:
build_runner: ^2.4.0
dart_code_metrics: ^5.7.0
flutter_test:
sdk: flutter
pubspec.yamlのバージョンの意味
パッケージのバージョン番号は”メジャー.マイナー.パッチ”の形式で表されます。
各数字の意味は以下の通りです。
- “メジャー”:互換性のない大きな変更を加えた場合に増加します。
- “マイナー”:既存の機能に影響を与えずに機能を追加した場合に増加します。
- “パッチ”:バグ修正や小さな変更の場合に増加します。
例えば、[パッケージ名: 3.12.4]と指定した場合、メジャーが3、マイナーが12、パッチが4です。
pubspec.yamlのバージョンの指定
pubspec.yamlのバージョンの指定は以下のように書くことができます。
パッケージ名:[空白]
バージョンを指定しない場合です。最新バージョンが自動的に選択されます。
稀に破壊的な変更(既存のコードでは起動しない等)があるため、
特に重要なパッケージには具体的なバージョンを指定することが推奨されます。
パッケージ名: 1.0.0
バージョンを指定した場合です。記載されたバージョンが選択されます。
パッケージ名: “>=1.0.0 <2.0.0”
バージョンを範囲指定した場合です。指定した範囲でバージョンが選択されます。
パッケージ名: ^1.0.0
指定したバージョン以上、且つメジャーバージョンが同じバージョンの範囲で
自動的に選択されます。この場合、”>=1.0.0 <2.0.0″と同義です。
バージョンを指定しない場合、最新バージョンが自動的に選択されますが、
予期せぬ問題を避けるため、特に重要なパッケージには具体的なバージョンを
指定することが推奨されます。
pubspec.lockとは?
“pubspec.lock”ファイルは、使用されている各パッケージの具体的なバージョンを記録します。
パッケージのバージョンを範囲指定した場合、実際に選択されたバージョンがここで確認できます。
バージョンの更新コマンド
pubspec.yamlは記述しただけでは、バージョンアップは行われません。
以下を参考にコマンドを実施してください。
- インストール: “flutter pub get”
pubspec.yamlに記載されているパッケージをインストールします。
インストール済みの場合は、パッケージのバージョンを最新バージョンに更新します。
- アップグレード: “flutter pub upgrade”
パッケージのバージョンを最新バージョンに更新します。
範囲指定した場合は、その範囲内の最新バージョンに更新します。
- ダウングレード: “flutter pub downgrade”
パッケージのバージョンを最古バージョンに更新します。
範囲指定した場合は、その範囲内の最古バージョンに更新します。
- バージョン依存関係確認: “flutter pub deps”
パッケージ間のバージョン依存関係を確認できます。
プロジェクトの依存関係ツリーが表示され、パッケージ同士の依存関係が参照できます。
- バージョン依存関係確認: “flutter pub deps”
パッケージ間のバージョン依存関係を確認できます。
プロジェクトの依存関係ツリーが表示され、パッケージ同士の依存関係が参照できます。
- バージョン確認: “flutter pub outdated”
以下の項目にて、バージョン情報を確認できる。
Current:現在のバージョン
Upgradable:pubspec.yaml ファイルで許可されている最新バージョン
Resolvable:依存関係のある他パッケージが利用できるバージョン
Latest:利用可能なパッケージの最新バージョン
- メジャーバージョンのアップグレード: flutter pub upgrade –major-versions
pubspec.yamlファイルに列挙されているパッケージを
可能な限り最新のバージョンに更新します。
- 個別の更新: “flutter pub [コマンド] [パッケージ名]
上記のコマンドの後に、パッケージ名を指定するとそのパッケージのみ更新できます。
例)”freezed”のインストール:flutter pub get freezed
まとめ
“pubspec.yaml” はFlutterプロジェクトでは、主にパッケージ管理の役割がありますが、
その他にもプロジェクトのメタデータの定義、外部パッケージの依存関係管理、リソースの指定など、
も管理できるようです。
pubspec.yamlを使ったバージョン管理はFlutterでアプリの開発にとても重要で、
私はよくバージョン管理を失敗してビルドできなかったり、buildrunnerが実行できなかったりします。
この記事が同じようにpubspec.yamlの設計で困っている人の参考になれば幸いです。