目次

パッケージ用語集

以下の用語は、パッケージ管理pubツールのドキュメントで使用されています。

アプリケーションパッケージ

#

プログラムまたはアプリを含むパッケージで、mainエントリポイントがあります。コマンドラインまたはブラウザで直接実行することを目的としています。

アプリケーションパッケージは、他のパッケージに依存関係を持つ場合がありますが、それ自体には依存されません。通常のパッケージとは異なり、共有することを目的としていません。

アプリケーションパッケージは、アプリケーションに取り組んでいる全員と、アプリケーションがデプロイされているすべての場所で一貫した依存関係セットを持つように、ロックファイルをソース管理にチェックインする必要があります。依存関係はロックファイルによって制約されているため、アプリケーションパッケージは通常、依存関係のバージョン制約に`any`を指定します。

コンテンツハッシュ

#

pub.devリポジトリは、ホストする各パッケージバージョンのsha256ハッシュを保持しています。Pubクライアントは、このハッシュを使用してダウンロードしたパッケージの整合性を検証し、リポジトリの変更から保護することができます。

dart pub getがパッケージをダウンロードすると、ダウンロードされたアーカイブのハッシュを計算します。各ホストされている依存関係のハッシュは、解決と共にロックファイルに保存されます。

Pubクライアントは、このコンテンツハッシュを使用して、同じロックファイルを使用して、別のコンピューターで実行される可能性のあるdart pub getを再度実行すると、まったく同じパッケージが使用されることを確認します。

ロックされたハッシュが現在のパブキャッシュにあるものと一致しない場合、パブはアーカイブを再ダウンロードします。それでも一致しない場合、ロックファイルが更新され、警告が表示されます。例:

$ dart pub get
Resolving dependencies...
Cached version of foo-1.0.0 has wrong hash - redownloading.
 ~ foo 1.0.0 (was 1.0.0)
The existing content-hash from pubspec.lock doesn't match contents for:
 * foo-1.0.0 from "pub.dev"
This indicates one of:
 * The content has changed on the server since you created the pubspec.lock.
 * The pubspec.lock has been corrupted.
 
The content-hashes in pubspec.lock has been updated.

For more information see:
https://dart.dokyumento.jp/go/content-hashes

Changed 1 dependency!

更新されたコンテンツハッシュはバージョン管理の差分に表示され、疑わしいと考えるべきです。

不一致を警告ではなくエラーにするには、dart pub get --enforce-lockfileを使用します。これにより、ロックファイルを更新せずに、同じハッシュを持つパッケージアーカイブが見つからない場合、解決が失敗します。

$ dart pub get --enforce-lockfile
Resolving dependencies...
Cached version of foo-1.0.0 has wrong hash - redownloading.
~ foo 1.0.0 (was 1.0.0)
The existing content-hash from pubspec.lock doesn't match contents for:
 * foo-1.0.0 from "pub.dev"

This indicates one of:
 * The content has changed on the server since you created the pubspec.lock.
 * The pubspec.lock has been corrupted.

For more information see:
https://dart.dokyumento.jp/go/content-hashes
Would change 1 dependency.
Unable to satisfy `pubspec.yaml` using `pubspec.lock`.

To update `pubspec.lock` run `dart pub get` without
`--enforce-lockfile`.

依存関係

#

パッケージが依存する別のパッケージ。パッケージが他のパッケージからコードをインポートする場合、そのパッケージは依存関係である必要があります。依存関係はパッケージのpubspecで指定され、パッケージの依存関係で説明されています。

パッケージで使用される依存関係を確認するには、pub depsを使用します。

エントリポイント

#

Dartの一般的なコンテキストでは、エントリポイントはDart実装によって直接呼び出されるDartライブラリです。<script>タグでDartライブラリを参照するか、スタンドアロンDart VMへのコマンドライン引数として渡すと、そのライブラリがエントリポイントになります。言い換えれば、通常はmain()を含む.dartファイルです。

pubのコンテキストでは、エントリポイントパッケージまたはルートパッケージは依存関係グラフのルートです。通常はアプリケーションになります。アプリを実行すると、それがエントリポイントパッケージになります。依存する他のすべてのパッケージはそのコンテキストではエントリポイントになりません。

パッケージは、あるコンテキストではエントリポイントになる場合があり、別のコンテキストではならない場合があります。アプリがパッケージAを使用するとします。アプリを実行すると、Aはエントリポイントパッケージではありません。しかし、Aに移動してテストを実行すると、そのコンテキストでは、アプリが関与していないため、エントリポイントになります。

エントリポイントディレクトリ

#

パッケージ内のディレクトリで、Dartエントリポイントを含むことができます。

Pubには、これらのディレクトリのリストがあります。benchmarkbinexampletesttool、およびweb(およびFlutterアプリの場合はlib)。それらのサブディレクトリ(binを除く)にもエントリポイントを含めることができます。

直接依存関係

#

パッケージ自体が直接使用する依存関係。pubspecにリストされている依存関係は、パッケージの直接依存関係です。他のすべての依存関係は推移的依存関係です。

ライブラリ

#

ライブラリは単一のコンパイル単位であり、単一の基本ファイルと任意の数のパーツで構成されています。ライブラリには独自のプライベートスコープがあります。

ロックファイル

#

パッケージが依存するすべての直接および推移的依存関係の具体的なバージョンとその他の識別情報を指定するpubspec.lockという名前のファイルです。

直接依存関係のみをリストし、バージョン範囲を許可するpubspecとは異なり、ロックファイルは、パッケージの全体の依存関係グラフを特定のバージョンのパッケージに包括的に固定します。ロックファイルにより、アプリケーションで使用されるパッケージの正確な構成を再現できます。

ロックファイルは、pub getpub upgrade、またはpub downgradeを実行すると、pubによって自動的に生成されます。Pubには、将来の解決中に確認するための各パッケージのコンテンツハッシュが含まれています。

パッケージがアプリケーションパッケージの場合は、通常、これをソース管理にチェックインします。通常のパッケージの場合は、通常チェックインしません。

パッケージ

#

そのディレクトリのルートにあるpubspec.yamlを使用して、ディレクトリの下にあるライブラリのコレクションです。

パッケージは他のパッケージに依存関係を持つことができ、それ自体が依存関係になることもできます。パッケージの`/lib`ディレクトリには、他のパッケージがインポートして使用できるパブリックライブラリが含まれています。直接実行するスクリプトを含めることもできます。他のパッケージに依存することを目的としていないパッケージはアプリケーションパッケージです。共有パッケージはpub.devに公開されますが、公開されていないパッケージを持つこともできます。

パッケージのロックファイルをソース管理にチェックインしないでください。ライブラリは、さまざまな依存関係のバージョンをサポートする必要があるためです。パッケージの直接的な依存関係バージョン制約は、依存関係がテスト済みのバージョンと互換性があることを保証しつつ、可能な限り広くする必要があります。

セマンティックバージョニングでは、下位互換性のない変更がある場合はライブラリのメジャーバージョン番号を増やす必要があるため、パッケージは通常、テスト済みのバージョン以上、次のメジャーバージョン未満の依存関係のバージョンを要求します。そのため、あなたのライブラリが(架空の)transmogrifyパッケージに依存しており、バージョン1.2.1でテストした場合、バージョン制約は^1.2.1になります。

SDK制約

#

パッケージがサポートすると宣言するDart SDK自体の宣言済みバージョン。SDK制約は、通常のバージョン制約構文を使用して指定しますが、特別な環境セクションpubspec内で指定します。

ソース

#

pubがパッケージを取得できる場所の一種です。ソースは、pub.devサイトや特定のGit URLなどの特定の場所ではありません。各ソースは、何らかの方法でパッケージにアクセスするための一般的な手順を記述しています。たとえば、gitは1つのソースです。gitソースは、Git URLが与えられるとパッケージをダウンロードする方法を知っています。いくつかの異なるサポートされているソースが利用可能です。

システムキャッシュ

#

pubがリモートパッケージを取得すると、pubによって管理される単一のシステムキャッシュディレクトリにダウンロードされます。MacとLinuxでは、このディレクトリはデフォルトで~/.pub-cacheです。Windowsでは、ディレクトリはデフォルトで%LOCALAPPDATA%\Pub\Cacheですが、Windowsのバージョンによっては正確な場所が異なる場合があります。PUB_CACHE環境変数を使用して、別の場所を指定できます。

パッケージがシステムキャッシュに入ると、pubはpackage_config.jsonファイルを作成し、アプリケーションで使用される各パッケージをキャッシュ内の対応するパッケージにマッピングします。

特定のバージョンのパッケージは一度ダウンロードするだけで済み、その後、必要なだけ多くのパッケージで再利用できます。キャッシュされたパッケージを使用するために--offlineフラグを指定すると、ネットワークにアクセスすることなく、package_config.jsonファイルを削除して再生成できます。

推移的依存関係

#

パッケージの依存関係の1つが要求するため、パッケージが間接的に使用する依存関係です。パッケージがAに依存し、AがBに依存し、BがCに依存する場合、Aは直接的な依存関係であり、BとCは推移的な依存関係です。

アップローダー

#

パッケージの管理者権限を持つユーザーです。パッケージアップローダーは、パッケージの新しいバージョンをアップロードできます。また、そのパッケージの他のアップローダーを追加または削除することもできます

パッケージに検証済みの発行元がある場合、発行元のすべてのメンバーがパッケージをアップロードできます。

検証済みのパブリッシャー

#

パッケージのセットを所有する1人以上のユーザー。各検証済み発行元は、dart.devなどの検証済みドメイン名で識別されます。検証済み発行元に関する一般的な情報については、検証済み発行元のページを参照してください。検証済み発行元の作成とパッケージの転送の詳細については、パッケージの公開に関するドキュメントを参照してください。

バージョン制約

#

パッケージの各依存関係に課せられた制約で、パッケージが動作すると予想される依存関係のバージョンを指定します。これは、単一のバージョン(0.3.0)またはバージョンの範囲(^1.2.1)にすることができます。anyも許可されていますが、パフォーマンス上の理由から推奨しません。

詳細については、バージョン制約を参照してください。

パッケージは、常にすべての依存関係に対してバージョン制約を指定する必要があります。一方、アプリケーションパッケージは、通常、依存関係の任意のバージョンを許可する必要があります。これは、ロックファイルを使用して依存関係のバージョンを管理するためです。

詳細については、Pubのバージョニングに関する考え方を参照してください。