Skip to content

Cloud Native Adapter Module, Package

Cloud Native Adapterは、CUE言語のパッケージ仕様を活用して、他ファイルから参照できます。具体的には、QVS ConfigやCloud Native Adapterから、他のCloud Native Adapterを利用する際に、パッケージを指定してインポートして利用します。 本章では、モジュール、パッケージ仕様について述べます。詳細はCUE言語のパッケージ仕様を参照してください。

Cloud Native Adapter Package

CUE言語では、パッケージ機能を利用するためにモジュールを定義する必要があります。以下のように、cue.modディレクトリ配下のmodule.cueファイルにモジュールパスを宣言します。

bash
.  # Repository root
└── cue.mod
    └── module.cue

module.cueファイルでは、以下のようにホスト名を含んだ形式でモジュールパスを宣言します。ここでは、Gitリポジトリ名を使うこと推奨します。

module: "${hostName}/${path}"

CUEパッケージを利用する際に宣言するインポートパスは、以下のように、モジュールパスとパッケージパスを結合した形で表現されます。

cue
${modulePath}/${packagePath}

パッケージパスは、CUEファイルを置くディレクトリから決定されます。${dir0}/${dir1}というディレクトリがあった場合、パッケージパスは${dir0}/${dir1}となります。このとき、パッケージパスの最後の要素、この例では${dir1}が、パッケージ名となります。パッケージに所属するCUEファイルには、そのパッケージ名をpackage句で宣言します。例えば、${dir0}/${dir1}/main.cueには、package ${dir1}という宣言をファイルの先頭に記述します。

なお、ディレクトリ名とは異なる文字列をpackage宣言をすることで、ファイル単位でサブパッケージを用意することも可能です。この場合、サブパッケージのインポートパスは${modulePath}/${packagePath}:${subPackageName}となります。 例えば、foo/bar/sub.cueというファイルがあり、sub.cuepackage subという形で宣言した場合、パッケージ名barの下にサブパッケージsubを作成したことになり、インポートパスは${modulePath}/foo/bar:subとなります。

パッケージの利用

QVS ConfigのdesignPatterns宣言で指定するCloud Native Adapterは、上記で解説したインポートパスを指定します。QVS Configの詳細は、仕様を参照してください。

yaml
designPatterns:
  - pattern: github.com/qmonus/foo/bar      // barパッケージのインポートパス
  - pattern: github.com/qmonus/foo/bar:sub  // サブパッケージsubのインポート

Cloud Native Adapterから他のパッケージに所属するCloud Native Adapterを利用する場合、CUE言語のimport宣言を利用してパッケージをインポートし、利用したい構造体/オブジェクトを参照します。

以下に、Cloud Native Adapterから他パッケージのCloud Native Adapterをcompositeする場合のインポート例を挙げます。

cue
import (
  "github.com/qmonus/foo/bar"      // barパッケージのインポートパス
)

DesignPattern: {
  composite: [
    {
      pattern: bar.DesignPattern   // barパッケージのDesignPatternを利用
    }
  ]
}