pubspec.yamlのコメントアウトは何を書いてるの?
プロジェクト立ち上げ時の pubspec.yaml ってコメントアウトで何を書いてるのか?と疑問に思っていました。また、pubspec.yaml ってそもそも何を設定できるファイルなのか深く理解できていないので、コメントアウトを元にドキュメントを参照しつつ、記事にまとめて理解していきます。
パッケージの公開設定
# 以下の行は、`flutter pub publish`コマンドを使って誤ってパッケージをpub.devに公開することを防ぎます。
# これはプライベートパッケージに推奨される設定です。
publish_to: "none" # pub.devに公開したい場合はこの行を削除してください
publish_to: 'none'
を設定することで、誤ってflutter pub publish
コマンドを実行しても、 pub.dev(Dart と Flutter のパッケージ公開リポジトリ)に公開されることを防ぎます。
-
プライベートアプリケーション:ほとんどの Flutter アプリはエンドユーザー向けのもので、パッケージとして再利用されることを意図していません。このような場合は
'none'
のままにしておくべきです。 - 公開パッケージ:ライブラリやプラグインなどを以下の pub.dev にリリースする場合は、この行を削除します。
バージョン管理の詳細
# 以下はアプリケーションのバージョンとビルド番号を定義します。
# バージョン番号は、1.2.43のようにドットで区切られた3つの数字で、
# その後に+で区切られたオプションのビルド番号が続きます。
# バージョンとビルド番号は、flutter buildコマンドで--build-nameと--build-numberを
# 指定することでオーバーライドできます。
# Androidでは、build-nameはversionNameとして、build-numberはversionCodeとして使用されます。
# Androidのバージョニングについての詳細は https://developer.android.com/studio/publish/versioning を参照してください
# iOSでは、build-nameはCFBundleShortVersionStringとして、build-numberはCFBundleVersionとして使用されます。
# iOSのバージョニングについての詳細は
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html を参照してください
# Windowsでは、build-nameは製品およびファイルバージョンのメジャー、マイナー、パッチ部分として使用され、
# build-numberはビルドサフィックスとして使用されます。
version: 1.0.0+1
バージョン番号の構成要素
バージョン番号の「1.0.0+1」という形式は、セマンティックバージョニングの考え方に基づいています:
- メジャーバージョン(1):互換性を破壊する変更を導入したときに増やします
- マイナーバージョン(0):後方互換性のある機能追加時に増やします
- パッチバージョン(0):後方互換性のあるバグ修正時に増やします
- ビルド番号(+1):内部的な識別のために使われる番号です
このあたりは個人開発で曖昧にバージョン管理していたので、ユーザーとの共通認識のために正しい値を設定することは重要だと感じました。
センマティックバージョニングとは?
ソフトウェアのバージョンを表現する際によく用いられるバージョニングルールです。
ソフトウェアによってバージョンの表記方法や、バージョンの大・小の比較方法が異なっていると混乱するため、これを統一したいという目的で作成されました。
プラットフォーム別の扱い
-
Android:
-
versionName
(例 1.0.0):ユーザーに表示されるバージョン -
versionCode
(例 1): 内部的なビルド識別子で、常に増加する必要があります
-
-
iOS:
-
CFBundleShortVersionString
: App Store に表示されるバージョン -
CFBundleVersion
:内部トラッキング用のビルド番号
-
-
Windows:
- 製品とファイルバージョンのメジャー、マイナー、パッチ部分
- ビルドサフィックス
dependencies の管理
# 依存関係は、あなたのパッケージが動作するために必要な他のパッケージを指定します。
# パッケージ依存関係を最新バージョンに自動的にアップグレードするには、
# `flutter pub upgrade --major-versions`の実行を検討してください。あるいは、
# 以下のバージョン番号を、pub.devで利用可能な最新バージョンに手動で更新することもできます。
# どの依存関係に新しいバージョンが利用可能かを確認するには、`flutter pub outdated`を実行してください。
dependencies のベストプラクティス
-
定期的な更新確認:
flutter pub outdated
コマンドを使って、更新可能なパッケージを確認しましょう。
新規プロジェクト立ち上げ後にコマンドを叩いてみました。
$ flutter pub outdated
Showing outdated packages.
[*] indicates versions that are not the latest available.
Package Name Current Upgradable Resolvable Latest
direct dependencies: all up-to-date.
dev_dependencies: all up-to-date.
transitive dependencies:
characters *1.3.0 *1.3.0 *1.3.0 1.4.0
collection *1.19.0 *1.19.0 *1.19.0 1.19.1
略
vm_service *14.3.0 *14.3.0 *14.3.0 15.0.0
[*]
が記載されているのであれば、最新版でないことを示しています。
- バージョン指定の方法:
-
^1.0.0
(キャレット記法):同じメジャーバージョン内のアップデートを許可(1.0.0 以上 2.0.0 未満) -
>=1.0.0 <2.0.0
:バージョン範囲を明示的に指定 -
1.0.0
:完全に固定されたバージョン(非推奨) -
any
:任意のバージョン(非推奨)
- メジャーバージョンアップグレード:
flutter pub upgrade --major-versions
は、メジャーバージョンも含めて全てのパッケージを最新にします。ただし、メジャーバージョンアップは破壊的変更を含む可能性があるため、注意が必要です。
Cupertino Icons の説明
# 以下は、CupertinoIconsフォントをアプリケーションに追加します。
# iOSスタイルのアイコンをCupertinoIconsクラスで使用する場合に使います。
cupertino_icons: ^1.0.8
CupertinoIcons は、iOS 風のデザインを Flutter で実現するためのアイコンパッケージです。Material Design と Cupertino の両方のスタイルを混在させる場合や、iOS に近い UI を実現したい場合に便利です。
dev_dependencies について
# 以下の "flutter_lints" パッケージには、良いコーディング習慣を推奨するためのリントセットが含まれています。
# このパッケージによって提供されるリントセットは、パッケージのルートにある `analysis_options.yaml` ファイルで有効化されています。
# 特定のリントルールを無効化したり、追加のリントルールを有効化したりする方法についての情報は、そのファイルを参照してください。
flutter_lints: ^5.0.0
flutter の lint 設定について
flutter_lints
パッケージは、コードの品質を維持し、Flutter のベストプラクティスに従うためのルールセットを提供します。
- 役割:コードの一貫性を保ち、バグを早期に発見し、保守性を高めるためのツール
-
設定場所:
analysis_options.yaml
ファイルでルールのカスタマイズが可能
analysis_options.yaml
に関しては別記事で記載します。
Flutter 固有の設定セクション
# このファイルのDart一般的な部分に関する情報は、
# 以下のページを参照してください: https://dart.dev/tools/pub/pubspec
# 以下のセクションはFlutterパッケージに固有のものです。
Flutter 固有のの設定セクションを持っています。
Material Icons の設定
# 以下の行は、Material Iconsフォントがアプリケーションに含まれることを保証します。
# これにより、material Iconsクラスのアイコンを使用できます。
uses-material-design: true
この設定は Material Design のアイコンフォントをアプリケーションに含めるために必要です。これをtrue
に設定することで、Icons
クラスから様々なアイコンを使用できるようになります。
// Material Iconsの使用例
Icon(Icons.favorite) // お気に入りアイコン
Icon(Icons.home) // ホームアイコン
以下、リンクでアイコンの確認できます。
アセットの追加方法
# アプリケーションにアセットを追加するには、以下のようなassetsセクションを追加します:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
アセットは画像、フォント、音声ファイルなど、アプリケーションで使用するリソースです。ここでリソースを設定しなければ、参照できません。
アセットの様々な追加方法
assets:
# 個別にファイルを指定
- images/logo.png
- images/background.jpg
# ディレクトリ全体を指定(サブディレクトリは含まれません)
- images/
# JSONファイルなども追加可能
- assets/data/config.json
解像度別の画像バリアントの扱い
# 画像アセットは、1つ以上の解像度固有の「バリアント」を参照できます。
Flutter では、異なる解像度のデバイスに対応するために、同じ画像の複数の解像度を提供できます。
images/
├── logo.png # 1.0x(ベース解像度)
├── 2.0x/
│ └── logo.png # 2.0x用
└── 3.0x/
└── logo.png # 3.0x用
ベースとなる画像のみを指定すれば、Flutter が適切な解像度の画像を自動的に選択します:
assets:
- images/logo.png # 2.0x/や3.0x/フォルダ内の同名画像は自動的に関連付けられます
詳細情報はドキュメントをご覧ください。
パッケージからのアセット使用
# パッケージ依存関係からのアセット追加の詳細については、
# https://flutter.dev/to/asset-from-package を参照してください
外部パッケージに含まれるアセットも使用できます。その方法は以下の通りです:
// 外部パッケージのアセットを使用する例
Image.asset('icons/heart.png', package: 'my_icons')
このコードは、my_icons
パッケージ内のicons/heart.png
を参照します。パッケージ側では、通常の方法でアセットを宣言する必要があります。
詳細情報はドキュメントをご覧ください。
カスタムフォントの追加
# アプリケーションにカスタムフォントを追加するには、この「flutter」セクションに
# fontsセクションを追加します。このリストの各エントリには、
# フォントファミリー名の「family」キーと、フォントのアセットおよび
# その他の記述子のリストを持つ「fonts」キーが必要です。
実装例
fonts:
- family: Schyler
fonts:
- asset: fonts/Schyler-Regular.ttf
- asset: fonts/Schyler-Italic.ttf
style: italic
- family: Trajan Pro
fonts:
- asset: fonts/TrajanPro.ttf
- asset: fonts/TrajanPro_Bold.ttf
weight: 700
パッケージからのフォント使用
# パッケージ依存関係からのフォントに関する詳細は、
# https://flutter.dev/to/font-from-package を参照してください
外部パッケージのフォントを使用する場合は、以下のようにします:
// 外部パッケージのフォントを使用する例
Text(
'パッケージフォントの例',
style: TextStyle(
fontFamily: 'SomeFont',
package: 'font_package', // パッケージ名を指定
),
)
詳細情報はドキュメントをご覧ください。
まとめ
個人的に知らないコマンドや設定があり、調べながら勉強になりました。pubspec.yaml を適切に設定し管理することで、アプリケーションの開発と保守がやりやすくなるのではないでしょうか。
Discussion