式

最終公開日 : Sep 25, 2026
StyleBookの最も強力な機能の1つは、式の使用です。StyleBookの式は、さまざまなシナリオで動的な値を計算するために使用できます。次の例は、パラメーター値とリテラル文字列を連結する式です。
例:
$parameters.appname + "-mon"
この式は、appnameという名前のパラメーターを取得し、それを文字列-monと連結します。
以下の種類の式がサポートされています:
Related information

算術式

  • 加算 (+)
  • 減算 (-)
  • 乗算 (*)
  • 除算 (/)
  • 剰余 (%)
例:
  • 2つの数値を加算する: $parameters.a + $parameters.b
  • 2つの数値を乗算する: $parameters.a * 10
  • ある数値を別の数値で除算した後の剰余を求める:
15%10 の結果は 5 となります。

文字列式

  • 2つの文字列を連結する (+)
例:
2つの文字列を連結する: str("app-") + $parameters.appname

リスト式

2つのリストを結合する (+)
例:
  • 2つのリストを連結する: $parameters.external-servers + $parameters.internal-servers
  • $parameters.ports-1 が で、$parameters.port-2 が の場合、$parameters.ports-1 + $parameters.ports-2 はリスト として表示されます。

関係式

  • == : 2つのオペランドが等しいかどうかをテストし、等しい場合はtrueを返し、そうでない場合はfalseを返します。
  • != : 2つのオペランドが異なるかどうかをテストし、異なる場合はtrueを返し、そうでない場合はfalseを返します。
  • \> : 最初のオペランドが2番目のオペランドより大きい場合はtrueを返し、そうでない場合はfalseを返します。
  • \>= : 最初のオペランドが2番目のオペランド以上である場合はtrueを返し、そうでない場合はfalseを返します。
  • \< : 最初のオペランドが2番目のオペランドより小さい場合、trueを返します。それ以外の場合はfalseを返します。
  • \<= : 最初のオペランドが2番目のオペランド以下の場合、trueを返します。それ以外の場合はfalseを返します。
例:
  • 等価演算子の使用: $parameters.name = = "abcd"
  • 不等価演算子の使用: $parameters.name != "default"
  • その他の関係演算子の例
    • 10 > 9
    • 10 >= 10
    • 0 < 9
    • 10 <= 9
    • 10 == 10
    • 10 != 1

論理式 - ブール

  • and: 論理「and」演算子。両方のオペランドがtrueの場合、結果はtrueになり、それ以外の場合はfalseになります。
  • or: 論理「or」演算子。いずれかのオペランドがtrueの場合、結果はtrueになり、それ以外の場合はfalseになります。
  • not:単項演算子です。オペランドがtrueの場合、結果はfalseになり、その逆も同様です。
  • in:最初の引数が2番目の引数の部分文字列であるかどうかをテストします。
  • in:項目がリストの一部であるかどうかをテストします。
注
文字列が数値に変換され、数値が文字列に変換される式を型キャストできます。同様に、tcp-portを数値にキャストでき、IPアドレスを文字列にキャストできます。
任意の演算子の前後に区切り文字を使用します。次の区切り文字を使用できます。
  • 演算子の前:space、tab、comma、(、)、[、]
  • 演算子の後:space、tab、(、[
例:
  • abc + def
  • 100 % 10
  • 10 > 9

逐語的な文字列式

文字列内の特殊文字がリテラル形式を取る必要がある場合に、逐語的な文字列を使用できます。これらの文字列には、エスケープ文字、バックスラッシュ、引用符、括弧、空白、角括弧などが含まれる場合があります。逐語的な文字列では、特殊文字の通常の解釈はスキップされます。文字列内のすべての文字はリテラル形式で保持されます。
StyleBookでは、NetScalerポリシー式を逐語的な文字列を使用してリテラル形式で含めることができます。ポリシー式には通常、特殊文字が含まれています。逐語的な文字列を使用しない場合、文字列を部分文字列に分割することで特殊文字をエスケープする必要があります。
逐語的な文字列を作成するには、次のように特殊文字の間に文字列をカプセル化します。
~{string}~
逐語的な文字列は、StyleBookのどこでも使用できます。
注
このシーケンスは逐語的な文字列の終わりを示すため、入力文字列で文字シーケンス}~を使用しないでください。
例:
~{HTTP.REQ.COOKIE.VALUE("jsessionid") ALT HTTP.REQ.URL.BEFORE_STR("=").AFTER_STR(";jsessionid=") ALT HTTP.REQ.URL.AFTER_STR(";jsessionid=")}~

ターゲット式

StyleBook定義では、現在のターゲットNetScalerインスタンスを参照するために$current-target式を使用できます。ターゲットNetScalerインスタンスのIPアドレスを具体的に参照するには、この式を次のように使用します。
$current-target.ip
例:
components:
 -
  name: lb-comp
  type: ns::lbvserver
  properties:
    name: $current-target.ip + "-lbvserver"
この例では、lbvserverの名前はターゲットNetScalerインスタンスのIPアドレスで構成されています。

式の型検証

StyleBookエンジンは、コンパイル時に強力な型チェックを可能にします。つまり、StyleBookの作成中に使用される式は、コンフィグパックの作成時ではなく、StyleBook自体のインポート中に検証されます。
パラメータ、置換、コンポーネント、コンポーネントのプロパティ、コンポーネントの出力、ユーザー定義変数(繰り返し項目、繰り返しインデックス、置換関数の引数)などへのすべての参照は、その存在と型についてすべて検証されます。
型チェックの例:
次の例では、lbvserver StyleBookのポートプロパティの予期される型はtcp-portです。NetScaler Consoleでは、型検証はコンパイル時(インポート時)に行われます。コンパイラは、文字列とtcp-portが互換性のない型であると判断し、そのためStyleBookコンパイラはエラーを表示し、StyleBookのインポートまたは移行に失敗します。
components:
  -
    name: lbvserver-comp
    type: ns::lbvserver
    properties:
      name: mylb
      ipv46: 10.102.190.15
      port: str("80")
      servicetype: HTTP
このStyleBookを正常にコンパイルするには、コンパイラで以下を数値として宣言します。
port: 80
無効な式のフラグ付けの例:
以前のリリースでは、無効な式がプロパティ名に割り当てられた場合、コンパイラは無効な式を検出しなかったため、StyleBookをNetScaler Consoleにインポートすることができました。現在、このStyleBookがNetScaler Consoleにインポートされると、コンパイラはそのような無効な式を識別してフラグを付けます。その結果、StyleBookはNetScaler Consoleへのインポートに失敗します。
この例では、lb-sg-binding-compコンポーネントのnameプロパティに割り当てられた式は$components.lbvserver-comp.properties.lbvservernameです。しかし、lbvserver-compコンポーネントにはlbvservernameというプロパティはありません。以前のNetScaler Consoleリリースでは、コンパイラはこの式を許可し、正常にインポートしていました。実際の障害は、ユーザーがこのStyleBookを使用して構成パックを作成しようとしたときに発生していました。しかし、現在では、このようなエラーはインポート時に識別され、StyleBookはNetScaler Consoleにインポートされません。このようなエラーを手動で修正し、StyleBookをインポートしてください。
Components:
  -
    name: lbvserver-comp
    type: ns::lbvserver
    properties:
      name: mylb
      ipv46: 10.102.190.15
      port: 80
      servicetype: HTTP
  -
    name: sg-comp
    type: ns::servicegroup
    properties:
      servicegroupname: mysg
      servicetype: HTTP
  -
    name: lb-sg-binding-comp
    type: ns::lbvserver_servicegroup_binding
    condition: $parameters.create-binding
    properties:
      name: $components.lbvserver-comp.properties.lbvservername
      servicegroupname: $components.sg-comp.properties.servicegroupname

リストのインデックス付け

リストの項目は、直接インデックスを付けてアクセスできるようになりました。
式 説明
$components.test-lbs[0] test-lbsコンポーネントの最初の項目を参照します
$components.test-lbs[0].properties.p1 test-lbsコンポーネントの最初の項目のプロパティp1を参照します
$components.lbcomps[0].outputs.servicegroups[1].properties.servicegroupname lbcompsコンポーネントの最初の項目からの出力である、servicegroupsコンポーネントの2番目の項目のプロパティservicegroupnameを参照します