🐥

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 にリリースする場合は、この行を削除します。

https://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. メジャーバージョン(1):互換性を破壊する変更を導入したときに増やします
  2. マイナーバージョン(0):後方互換性のある機能追加時に増やします
  3. パッチバージョン(0):後方互換性のあるバグ修正時に増やします
  4. ビルド番号(+1):内部的な識別のために使われる番号です

このあたりは個人開発で曖昧にバージョン管理していたので、ユーザーとの共通認識のために正しい値を設定することは重要だと感じました。

センマティックバージョニングとは?

ソフトウェアのバージョンを表現する際によく用いられるバージョニングルールです。
ソフトウェアによってバージョンの表記方法や、バージョンの大・小の比較方法が異なっていると混乱するため、これを統一したいという目的で作成されました。

https://www.tohoho-web.com/ex/semver.html

プラットフォーム別の扱い

  • 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 のベストプラクティス

  1. 定期的な更新確認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. バージョン指定の方法
  • ^1.0.0 (キャレット記法):同じメジャーバージョン内のアップデートを許可(1.0.0 以上 2.0.0 未満)
  • >=1.0.0 <2.0.0:バージョン範囲を明示的に指定
  • 1.0.0:完全に固定されたバージョン(非推奨)
  • any:任意のバージョン(非推奨)
  1. メジャーバージョンアップグレード

flutter pub upgrade --major-versionsは、メジャーバージョンも含めて全てのパッケージを最新にします。ただし、メジャーバージョンアップは破壊的変更を含む可能性があるため、注意が必要です。

Cupertino Icons の説明

# 以下は、CupertinoIconsフォントをアプリケーションに追加します。
# iOSスタイルのアイコンをCupertinoIconsクラスで使用する場合に使います。
cupertino_icons: ^1.0.8

CupertinoIcons は、iOS 風のデザインを Flutter で実現するためのアイコンパッケージです。Material Design と Cupertino の両方のスタイルを混在させる場合や、iOS に近い UI を実現したい場合に便利です。

https://api.flutter.dev/flutter/cupertino/CupertinoIcons-class.html

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 固有のの設定セクションを持っています。

https://dart.dev/tools/pub/pubspec

Material Icons の設定

# 以下の行は、Material Iconsフォントがアプリケーションに含まれることを保証します。
# これにより、material Iconsクラスのアイコンを使用できます。
uses-material-design: true

この設定は Material Design のアイコンフォントをアプリケーションに含めるために必要です。これをtrueに設定することで、Iconsクラスから様々なアイコンを使用できるようになります。

// Material Iconsの使用例
Icon(Icons.favorite) // お気に入りアイコン
Icon(Icons.home) // ホームアイコン

以下、リンクでアイコンの確認できます。

https://fonts.google.com/icons

アセットの追加方法

# アプリケーションにアセットを追加するには、以下のような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/resolution-aware-images

パッケージからのアセット使用

# パッケージ依存関係からのアセット追加の詳細については、
# https://flutter.dev/to/asset-from-package を参照してください

外部パッケージに含まれるアセットも使用できます。その方法は以下の通りです:

// 外部パッケージのアセットを使用する例
Image.asset('icons/heart.png', package: 'my_icons')

このコードは、my_iconsパッケージ内のicons/heart.pngを参照します。パッケージ側では、通常の方法でアセットを宣言する必要があります。

詳細情報はドキュメントをご覧ください。

https://docs.flutter.dev/ui/assets/assets-and-images#from-packages

カスタムフォントの追加

# アプリケーションにカスタムフォントを追加するには、この「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',  // パッケージ名を指定
  ),
)

詳細情報はドキュメントをご覧ください。

https://docs.flutter.dev/cookbook/design/package-fonts#1-add-a-font-to-a-package

まとめ

個人的に知らないコマンドや設定があり、調べながら勉強になりました。pubspec.yaml を適切に設定し管理することで、アプリケーションの開発と保守がやりやすくなるのではないでしょうか。

Discussion