カスタムパッケージリポジトリ
dart pub
ツールは、サードパーティ製パッケージリポジトリをサポートしています。パッケージリポジトリとは、dart pub
ツールが使用するためにDartパッケージをホストするサーバーです。デフォルトで使用されるパッケージリポジトリであるpub.devは、Dartチームが運営しており、Dartパッケージを公開して誰でも利用できるようにすることを目的としています。パッケージリポジトリは、https://dart-packages.example.com/
のような*ホストURL*で識別されます。
カスタムパッケージリポジトリは、プライベートパッケージをホストするのに役立つ場合があります。たとえば、次のようなシナリオが考えられます。
- 組織内で社内独自のプライベートパッケージを共有する。
- 企業環境での依存関係を厳密に管理する。
- 公共のインターネットアクセスがない安全な環境。
プライベートパッケージのホスティングにはgit依存関係を使用することも一般的ですが、dart pub
ツールはgitリポジトリに対するバージョンの解決をサポートしていません。gitリポジトリの特定のリビジョンを取得するだけです。そのため、多くの人が共同作業している場合は、プライベートパッケージリポジトリを使用する方が望ましいことがよくあります。
カスタムパッケージリポジトリでの認証
#ほとんどのカスタムパッケージリポジトリは、認証が必要なプライベートパッケージリポジトリです。カスタムパッケージリポジトリに対して認証を行うために、dart pub
ツールはリクエストにシークレットトークンを添付します。
シークレットトークンは、カスタムパッケージリポジトリから取得し、手動で指定するか、環境変数を介して指定できます。シークレットトークンを手動で指定するには、トークンの入力を求めるdart pub token add
コマンドを使用します。
$ dart pub token add https://dart-packages.example.com
Enter secret token: [enter secret token]
Requests to "https://dart-packages.example.com" will now be authenticated using the secret token.
CI環境など、--env-var
フラグを使用して、環境変数からトークンを読み取るようにdart pub
に指示することもできます。
$ dart pub token add https://dart-packages.example.com --env-var MY_SECRET_TOKEN
Requests to "https://dart-packages.example.com" will now be authenticated using the secret token stored in the environment variable "MY_SECRET_TOKEN".
これにより、dart pub
は実際にシークレットトークンを構成に保存するのではなく、環境変数$MY_SECRET_TOKEN
からシークレットを読み取る必要があるという事実のみを保存します。これにより、実行環境がCIジョブ間で共有されている場合に、シークレットが誤ってリークされるリスクが軽減されます。
カスタムパッケージリポジトリからの依存関係の取得
#カスタムパッケージリポジトリからパッケージを取得するには、ホストされているパッケージの構文を使用して、pubspec.yaml
にパッケージの*ホストURL*を指定する必要があります。例えば
dependencies:
example_package:
hosted: https://dart-packages.example.com
version: ^1.4.0
前の例では、package:example_package
はhttps://dart-packages.example.com
から取得されます。このパッケージリポジトリで認証が必要な場合は、リクエストを認証する方法の詳細についてカスタムパッケージリポジトリでの認証を参照してください。
--hosted
フラグを指定したdart pub add
コマンドを使用して、カスタムパッケージリポジトリから依存関係を追加することもできます。
$ dart pub add example_package --hosted https://dart-packages.example.com
複数のパッケージリポジトリの使用
#*ホストURL*は依存関係ごとに指定できるため、異なるパッケージリポジトリから異なる依存関係を取得することもできます。
dependencies:
# package retry is fetched from pub.dev (the default package repository)
retry: ^3.0.0
# package example_package is fetched from https://dart-packages.example.com
example_package:
hosted: https://dart-packages.example.com
version: ^1.4.0
これにより、プライベートパッケージリポジトリにプライベートパッケージを保持しながら、最新のパブリックパッケージを依存関係として使用できます。
ただし、依存関係が異なるリポジトリから同じ名前のパッケージを必要とする場合、競合が発生しやすくなります。たとえば、パッケージretry
がpub.devからのmeta
を必要とし、example_package
がhttps://dart-packages.example.com
からのmeta
を必要とする場合です。そのため、パッケージをプライベートパッケージリポジトリにミラーリングする場合、すべての依存関係をミラーリングし、各パッケージのdependencies
セクションを更新するか、デフォルトパッケージリポジトリをオーバーライドする必要があることがよくあります。
カスタムパッケージリポジトリへの公開
#pub.devではなくカスタムパッケージリポジトリにパッケージを公開するには、pubspec.yaml
でpublish_to
プロパティを指定します。認証が有効になっている場合、公開ではパッケージの取得と同じトークン認証が使用されます。
https://dart-packages.example.com
に公開するためにパッケージを準備するには、pubspec.yaml
は少なくとも次のようになります。
name: example_package
version: 1.0.0
# Ensures the package is published to https://dart-packages.example.com
publish_to: https://dart-packages.example.com
次に、パッケージの新しいバージョンを公開するには、dart pub publish
を使用します。
$ dart pub publish
Publishing example_package 1.0.0 to https://dart-packages.example.com
|-- CHANGELOG.md
|-- LICENSE
|-- README.md
|-- lib
| '-- example_package.dart
'-- pubspec.yaml
...
デフォルトパッケージリポジトリのオーバーライド
#デフォルトでは、dart pub
は、ホストされている依存関係の構文を使用してカスタムパッケージリポジトリが指定されていない限り、pub.devサイトから依存関係を取得し、パッケージを公開します。ただし、PUB_HOSTED_URL
環境変数を使用して、デフォルトのパッケージリポジトリをオーバーライドできます。
このアプローチは、制限されたネットワーク環境で作業する場合に、プライベートパッケージリポジトリまたはpub.devのサブセット内のすべてのパッケージをミラーリングする場合に特に役立ちます。
カスタムパッケージリポジトリのセットアップ
#ホストされたPubリポジトリ仕様バージョン2に概要が示されているREST APIを実装することで、カスタムパッケージリポジトリを作成できます。
サービスとしてのDartパッケージリポジトリ
#カスタムパッケージリポジトリは、複数のベンダーによってトークン認証がサポートされるサービスとしても提供されており、独自のカスタムパッケージリポジトリをホストおよび保守するオーバーヘッドを軽減できます。
特に明記されていない限り、このサイトのドキュメントはDart 3.5.3を反映しています。ページの最終更新日:2024年11月5日。 ソースを表示 または 問題を報告する.