依存関係管理

Wippyはロックファイルベースの依存関係システムを使用します。モジュールはハブに公開され、ソース内で依存関係として宣言され、正確なバージョンを追跡する wippy.lock ファイルに解決されます。

プロジェクトファイル

wippy.lock

ロックファイルはプロジェクトのディレクトリレイアウトと固定された依存関係を追跡します:

directories:
  modules: .wippy
  src: ./src
modules:
  - name: acme/http
    version: v1.2.0
    hash: 4ea816fe84ca58a1f0869e5ca6afa93d6ddd72fa09e1162d9e600a7fbf39f0a2
  - name: acme/sql
    version: v2.0.1
    hash: b3f9c8e12a456d7890abcdef1234567890abcdef1234567890abcdef12345678
フィールド 説明
directories.modules ダウンロードしたモジュールの保存先 (デフォルト: .wippy)
directories.src ソースコードの場所 (デフォルト: ./src)
modules[].name org/module 形式のモジュール識別子
modules[].version 固定されたセマンティックバージョン
modules[].hash 整合性検証のためのコンテンツハッシュ

wippy.yaml

公開用のモジュールメタデータ。自分のモジュールを公開する場合にのみ必要です:

organization: acme
module: http
version: 1.2.0
description: HTTP utilities for Wippy
license: MIT
repository: https://github.com/acme/wippy-http
keywords:
  - http
  - web
フィールド 必須 説明
organization はい 小文字、英数字とハイフン
module はい 小文字、英数字とハイフン
version いいえ セマンティックバージョン (公開時に設定)
description いいえ モジュールの説明
license いいえ SPDXライセンス識別子
repository いいえ ソースリポジトリURL
homepage いいえ プロジェクトホームページ
keywords いいえ 検索用キーワード
authors いいえ 著者リスト

依存関係の宣言

_index.yamlns.dependency エントリを追加します:

version: "1.0"
namespace: app
entries:
  - name: dependency.http
    kind: ns.dependency
    component: acme/http
    version: "^1.0.0"

  - name: dependency.sql
    kind: ns.dependency
    component: acme/sql
    version: ">=2.0.0"

バージョン制約

制約 マッチ
完全一致 1.2.3 1.2.3のみ
キャレット ^1.2.0 >=1.2.0, <2.0.0
チルダ ~1.2.0 >=1.2.0, <1.3.0
範囲 >=1.0.0 1.0.0以上
ワイルドカード * 任意のバージョン (最新を選択)
複合 >=1.0.0 <2.0.0 1.0.0から2.0.0の間

解決ルール

  • 各モジュールは、依存関係グラフ全体で宣言されたすべての範囲の積集合に対して解決されます。互換性のない範囲(ダイヤモンド競合)は、どちらか一方を黙って選ぶのではなく、明示的なエラーで解決に失敗します。
  • 依存関係は、以前に解決されたピンからではなく、宣言された範囲から解決されます。
  • ルートの宣言は推移的な宣言より優先されます: アプリと依存関係の両方が同じモジュールや要件を取り込む場合、あなたの宣言が優先されます。meta.module を持つ依存関係エントリは、明示的にルートとしてフラグ付けされない限り推移的です — 公開されたアプリケーションは、ソースで宣言された依存関係をルートとして保持します。
  • 同じコンポーネントをルート依存関係として宣言できるのは一度だけです — 重複した宣言は競合エラーとして拒否されます。代わりに既存の依存関係を更新してください。

ランタイムは解決された各グラフをレジストリ履歴に永続化し、ブート時に再解決する代わりにそれをリプレイします。そのため、デプロイされたアプリケーションは、依存関係の変更が適用された時点で解決されたバージョンそのままで起動します。wippy.lock は引き続き、ソースプロジェクト向けのポータブルなスナップショットです。

ワークフロー

新規プロジェクトの開始

wippy init

デフォルトのディレクトリで wippy.lock を作成します。

依存関係の追加

wippy add acme/http               # Latest version
wippy add acme/http@1.2.3         # Exact version
wippy add acme/http@latest         # Latest label

これによりロックファイルが更新されます。次にインストールします:

wippy install

ソースからの解決

ソースに ns.dependency エントリが既に宣言されている場合:

wippy update

これはソースディレクトリをスキャンし、すべての依存関係の制約を解決し、ロックファイルを更新し、モジュールをインストールします。

依存関係の更新

wippy update                       # Re-resolve all dependencies
wippy update acme/http             # Update only acme/http
wippy update acme/http acme/sql    # Update specific modules

特定のモジュールを更新する場合、他のモジュールは現在のバージョンに固定されたままです。更新により対象外のモジュールの変更が必要になる場合、確認が求められます。

ロックファイルからのインストール

wippy install                      # Install all from lock
wippy install --refresh            # すべてのモジュールを再取得(--force と --repair はエイリアス)

モジュールストレージ

ダウンロードしたモジュールは .wippy/vendor/ ディレクトリに保存されます:

project/
  wippy.lock
  src/
    _index.yaml
  .wippy/
    vendor/
      acme/
        http-v1.2.0.wapp
        sql-v2.0.1.wapp

デフォルトでは、モジュールは .wapp ファイルとして保持されます。ディレクトリに展開するには:

# wippy.lock
options:
  unpack_modules: true

展開を有効にした場合:

.wippy/
  vendor/
    acme/
      http/
        wippy.yaml
        src/
          _index.yaml
          ...

リプレースメントによるローカル開発

開発時にハブモジュールをローカルディレクトリで上書きします。リプレースメントはランタイム設定ファイルの workspace セクションで宣言します — 通常は .wippy.yaml の上に合成される、git 管理外のプライベートなファイルです:

# .wippy.workspace.yaml
version: "1.0"
workspace:
  replacements:
    acme/http: ../local-http
    acme/sql: ../local-sql
wippy run --config .wippy.yaml --config .wippy.workspace.yaml

キーは org/module、値はディレクトリです(相対パスは最初の --config ファイルのディレクトリを基準に解決されます。パスは存在し、かつディレクトリでなければなりません)。リプレースメントを null に設定すると、前の設定レイヤーやプロファイルから継承したものを無効化できます。リプレースメントはプロファイルの中に置くこともでき、その場合は --profile workspace を指定したときのみ有効になります。

ワークスペースリプレースメントはブート時のロードグラフに作用し、wippy.lock に書き込まれることはありません。ローカルソースへの変更は、ハブに接続することなく直接反映されます。wippy.yaml のソース exclude: グロブは、エントリのロード時とコンテンツのハッシュ時の両方で、リプレースメントディレクトリにも適用されます。

wippy.lock 内の replacements: セクションは非推奨です: 引き続きロードされますが警告が表示されます。それらのエントリは設定ファイルの workspace.replacements に移してください。

ロード順序

起動時に、Wippyは以下の順序でディレクトリからエントリをロードします:

  1. ソースディレクトリ (src)
  2. リプレースメントディレクトリ
  3. ベンダーモジュールディレクトリ

アクティブなリプレースメントがあるモジュールはベンダーパスをスキップします。

整合性検証

ロックファイル内の各モジュールにはコンテンツハッシュがあります。インストール中、ダウンロードされたモジュールは期待されるハッシュと照合して検証されます。不一致のモジュールは拒否され、レジストリから再ダウンロードされます。

関連項目