pub: 主要概念、Dartパッケージマネージャーとpubspec.yaml

著者: IT Sectr 公開日: 2026-02-13 読了時間: 14 分

pub — Dart言語およびFlutter SDKの公式パッケージマネージャーです。サードパーティライブラリのダウンロード、インストール、更新、削除、依存関係のバージョン管理、および独自パッケージの公開を自動化します。中央リポジトリはpub.devで、50,000以上のパッケージがホストされています。プロジェクト設定はpubspec.yamlファイルに記述されます。

重要ポイント

  • pub — Dart/Flutterに組み込まれたパッケージマネージャー、JavaScriptのnpmやPythonのpipに類似
  • pubspec.yaml — メタデータ、依存関係、SDK制約を含む唯一の設定ファイル
  • pub.dev — オープンパッケージ、人気分析、互換性スコアを備えた公式レジストリ
  • Semantic Versioning — pubはキャレットとチルダ範囲を使用した厳格なバージョン管理を使用
  • ロックファイルpubspec.lockが再現可能なビルドのために正確なバージョンを固定

pubとは?

pub (Package Universal Browser) — Dart SDKに付属する組み込みパッケージマネージャーです。外部ライブラリの管理、バージョン競合の解決、推移的依存関係のダウンロード、パッケージのローカルキャッシュを行います。Flutterエコシステムでは、pubはナビゲーションプラグイン、HTTPクライアント、ステートマネージャー、その他のコンポーネントを接続するための主要ツールとして使用されます。

pubの主な機能は次のとおりです:pub.devレジストリからの依存関係のインストールローカルパス(パス依存関係)、gitリポジトリ;セマンティックバージョニングルールに従ったバージョン解決;システムディレクトリへのダウンロード済みパッケージのキャッシュ;公開レジストリへの独自パッケージの公開。これらすべての操作はCLIコマンドdart pubまたは同等のflutter pubを介して利用できます。

pubのアーキテクチャは閉じた依存関係グラフに基づいています:マネージャーは各パッケージが1回だけ表示されるツリーを構築します。2つのライブラリが同じパッケージの異なるバージョンを必要とする場合、pubは互換性のある範囲を見つけようとするか、競合エラーを報告します。これは、同じパッケージの複数のバージョンを異なるツリーノードで許可するnpmのアプローチとは異なります。

pubspec.yamlの構造

pubspec.yamlファイル — DartまたはFlutterプロジェクトの中心的な設定ファイルです。YAML形式で記述され、メタデータ、依存関係、ビルド設定、SDK制約が含まれます。以下はFlutterアプリケーションの典型的な例です:

yaml
name: my_app
description: Flutterアプリの例
version: 1.0.0+1
publish_to: none

environment:
  sdk: ">=3.0.0 <4.0.0"
  flutter: ">=3.10.0"

dependencies:
  flutter:
    sdk: flutter
  http: ^1.1.0
  provider: ^6.0.5
  shared_preferences: ^2.2.0
  path_provider: ^2.1.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^3.0.0
  mockito: ^5.4.3

flutter:
  uses-material-design: true
  assets:
    - assets/images/
    - assets/fonts/

pubspec.yamlの主要フィールド:name — 一意のパッケージ名(ラテン文字、アンダースコア、数字のみ);description — 簡単な説明(公開に必須);version — プラス記号の後にオプションのビルド番号が付くセマンティックバージョン;environment — 最小Dart SDKおよびFlutter SDKバージョン;dependencies — メインアプリケーションの依存関係;dev_dependencies — 開発とテストのみの依存関係;flutter — Flutter設定セクション(アセット、フォント、プラグイン)。

publish_toフィールドは公開の可否を制御します:値noneは公開を禁止し(アプリケーションに典型的)、デフォルト値はhttps://pub.devです。dependency_overridesフィールドは競合状況でパッケージバージョンを強制的に上書きできます — 注意して使用し、一時的な解決策としてのみ使用してください。

依存関係とその種類

pubは4種類の依存関係をサポートしており、それぞれpubspec.yaml内で独自の構文で指定します:

ホステッド(hosted)

標準タイプ — パッケージはpub.devレジストリまたは他の互換性のあるレジストリからダウンロードされます。パッケージ名とバージョンを指定します。例:http: ^1.1.0はキャレットバージョニングルールに従って範囲>=1.1.0および<2.0.0から最新の互換バージョンをダウンロードします。

SDK依存関係

Flutter SDKまたはDart SDKを含めるために使用されます。構文:flutter: sdk: flutter。パッケージはレジストリではなくローカルのFlutter SDKインストールから取得されます。SDK依存関係はバージョン管理されません — そのバージョンは現在インストールされているFlutterのバージョンによって決まります。

パス(path)

パッケージを含むローカルディレクトリを指定します。公開せずにライブラリを開発およびテストする際に便利です。構文:

yaml
dependencies:
  my_local_lib:
    path: ../my_local_lib

パス依存関係はpubspec.lockに固定されません — 更新のたびに指定されたパスから再解決されます。

Git

パッケージをgitリポジトリから直接含めることができます。ブランチ、タグ、コミットがサポートされています:

yaml
dependencies:
  my_git_lib:
    git:
      url: https://github.com/user/my_git_lib.git
      ref: main

Git依存関係はフォーク、未公開の修正、Pull Requestでの作業に便利です。ビルド中に予期しない変更を避けるために、ブランチの代わりに特定のタグまたはコミットを指定することをお勧めします。

バージョン管理と範囲

pubはSemantic Versioning 2.0に厳密に従います:形式MAJOR.MINOR.PATCH(MAJOR — 互換性のない変更、MINOR — 後方互換性のある追加、PATCH — 後方互換性のある修正)。このスキームに基づいて、pubはパッケージの互換性を判断し、競合を解決します。

pubspec.yamlでバージョンを指定するには、3つの主要な演算子が使用されます:

  • キャレット(^)^1.2.3は>=1.2.3かつ<2.0.0に相当します。最も一般的な演算子で、メジャーバージョン内での互換性を意味します。メジャーバージョンが0(ゼロ)のパッケージの場合 — ^0.1.2は>=0.1.2かつ<0.2.0を意味し、不安定なバージョンのSemVerルールに従います。
  • チルダ(~)~1.2.3は>=1.2.3かつ<1.3.0に相当します。マイナーバージョンを固定し、パッチ更新のみを許可します。あまり使用されず、主にマイナーバージョンレベルで非互換性がわかっている場合に使用されます。
  • 正確な範囲>=1.2.0 <2.0.0 — 完全な制御を提供する明示的な表記法です。複雑な制約(たとえば推移的依存関係の複数バージョンを使用する場合など)に便利です。

dart pub getを実行すると、pubは解決されたすべてのパッケージ(直接および推移的)の正確なバージョンを固定するpubspec.lockファイルを生成します。このファイルは、すべてのマシンで再現可能なビルドを保証するためにバージョン管理に含める必要があります。dart pub upgradeを実行すると、ロックファイルは指定された制約内で最新の互換バージョンに更新されます。

依存関係競合エラーは、2つのパッケージが同じ依存関係の重複しない範囲を必要とする場合に発生します。pubはどのパッケージが競合しているかとその理由を報告します。解決策:競合しているパッケージの1つを互換性のあるバージョンに更新する、dependency_overrides(一時的な措置)を使用する、または代替パッケージに切り替えます。

pubの主要コマンド

すべてのpub操作は統一されたCLIインターフェースを介して実行されます。Dart SDKはdart pubコマンドを使用し、Flutter SDKは同等のflutter pubを使用します(さらにFlutter SDKの依存関係とプラグインを考慮します)。主要なコマンドは以下のとおりです:

  • dart pub getpubspec.yamlで指定されたすべての依存関係をダウンロードし、バージョンを解決してpubspec.lockを作成/更新します。プロジェクトの初回クローン時または依存関係変更後に実行します。
  • dart pub upgradepubspec.yamlの制約内ですべての依存関係を最新バージョンに更新し、pubspec.lockを上書きします。個別のパッケージを更新できます:dart pub upgrade http
  • dart pub add <package>pubspec.yamlに新しい依存関係を追加し、すぐにpub getを実行します。例:dart pub add diodioパッケージの最新バージョンを追加します。
  • dart pub remove <package>pubspec.yamlから依存関係を削除し、グラフ解決を再実行します。
  • dart pub cache repair — キャッシュされたすべてのパッケージを再読み込みします。ローカルキャッシュの破損やチェックサムエラーの場合に役立ちます。
  • dart pub deps — 依存関係ツリーを便利なテキスト形式で表示します。推移的依存関係の分析や重複の検出に便利です。
  • dart pub publish — 現在のパッケージをpub.devに公開します。公開前にpubspec.yaml、ライセンス、説明を検証します。
  • dart pub outdated — 現在のバージョン、希望するバージョン、利用可能な最新バージョンを示す古い依存関係のリストを表示します。npm outdatedに類似しています。

すべてのコマンドは短縮形dart pub getとしてdart pub gでも利用できます(すべての短縮形があるわけではありません)。Flutterプロジェクトでは、コマンドの前にflutterが付加されます:flutter pub getflutter pub addなど。Flutterバージョンはターゲットプラットフォームとのプラグイン互換性も追加でチェックします。

pub.devへの公開

pub.dev — DartおよびFlutterエコシステムの中央パッケージレジストリです。2025年1月時点で、50,000以上のパッケージが公開されており、総ダウンロード数は100億を超えています。各パッケージには、説明、ドキュメント、人気スコア、Pub Points評価、バージョンを含むページがあります。

Pub Points — 0から130ポイントまでの自動化されたパッケージ品質評価システムです。ライセンスの有無、説明、例、最新の安定版Dartとの互換性、脆弱性の有無、テストカバレッジ、フォーマットの正確性を考慮します。高いスコアは検索でのパッケージの可視性とユーザーの信頼を高めます。

公開プロセスにはいくつかのステップが含まれます:

  1. pubspec.yamlを確認:name、description、version、licenseが存在することを確認します(SPDX識別子を推奨、例:MIT)。
  2. dart pub publish --dry-runを実行 — サーバーに送信せずに公開をシミュレーションし、パッケージに含まれるすべてのファイルと可能性のあるエラーを表示します。
  3. 初回公開時にGoogleアカウントで認証:dart pub publishはOAuth認証のためにブラウザを開きます。
  4. ターミナルで公開を確認します。アップロードが成功すると、パッケージは数分以内にpub.devに表示されます。

重要なルール:一意の名前を持つパッケージのみ公開できます;一度公開されたバージョンは削除できません(7日以内であればdart pub unpublishで非表示にすることは可能);大規模な更新の場合はSemantic Versioningのルールに従い、メジャーバージョンを変更せずに公開APIを壊さないでください。

よくある質問

dart pub getdart pub upgradeの違いは何ですか?

pub getは既存のpubspec.lockからバージョンをロードし、変更しません(ロックファイルがない場合は作成します)。pub upgradeはロックファイルを無視し、すべての依存関係を最新の互換範囲に再解決してからロックファイルを上書きします。

pubspec.yamlでローカル依存関係を指定するには?

パス依存関係を使用します:dependencies: my_package: path: ../my_package。パスはプロジェクトルートからの相対パスです。このような依存関係はpubspec.lockに固定されず、ビルドのたびにpubはディレクトリの現在の内容を取得します。

依存関係競合エラーが発生した場合の対処法は?

競合しているパッケージを重複する範囲のバージョンに更新します。不可能な場合は、pubspec.yamldependency_overridesを一時的に使用するか、一方のパッケージを代替品に置き換えます。dart pub depsを実行すると依存関係ツリーを視覚化できます。

リポジトリにpubspec.lockが必要な理由は?

pubspec.lockはすべての依存関係(直接および推移的)の正確なバージョンを固定し、すべての開発マシンとCI/CDで再現可能なビルドを保証します。これがないと、新しいパッチリリースによってpub getを実行するたびに異なるバージョンが選択される可能性があります。

pub.devにパッケージを公開するには?

事前確認のためにdart pub publish --dry-runを実行し、次にdart pub publishを実行します。初回公開時にはGoogle認証が必要です。パッケージには一意の名前、説明、ライセンス、正しいバージョンが必要です。

Pub Pointsとは何ですか?どうすれば改善できますか?

Pub Points — 0から130までの品質評価システムです。ライセンス(MIT、Apache-2.0)、詳細な説明、使用例、テストの追加、最新のDartバージョンとの互換性の維持、アナライザーの構文警告の修正によってスコアを改善できます。

まとめ

  • pub — ライブラリのインストール、更新、公開のための組み込みDart/Flutterパッケージマネージャー
  • pubspec.yaml — 依存関係、メタデータ、SDK制約を含む中心的な設定ファイル
  • pub.dev — 50,000以上のパッケージ、Pub Pointsシステム、人気分析を備えた公式レジストリ
  • 4種類の依存関係 — hosted、SDK、path、gitがすべての統合シナリオをカバー
  • SemVerとロックファイル — 厳格なセマンティックバージョニング+pubspec.lockが再現可能なビルドを保証
  • 8つの主要コマンドpub getからpub publishまで、パッケージ管理の全ライフサイクルをカバー
  • dependency_overrides — 注意深い使用が必要な強制的な競合解決メカニズム

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください