Skip to main content
HubLでは、テンプレートのロジックと機能を拡張するための主な演算子と式評価をサポートしています。演算子を使用すると、算術関数の実行、比較、テンプレートロジックの複雑化、マークアップのレンダリングの変更を行うことができます。この記事では、HubLで使用できる式評価も含めて紹介します。

演算子

演算子は、HubLコンパイラーに対して各種の演算を行うよう指示する記号です。これらの演算の結果、最終出力が生成されます。演算子は、算術関数の実行、比較、ブール式の実装などのために、2つの値を関連付けるためにオペランド間に配置されます。
operators-and-operands-diagram
以下は、HubLで使用できる演算子をタイプ別にまとめたものです。

数学

標準の算術演算子を使用して、テンプレートのコンテキストで値を計算できます。

比較

比較演算子を使用すると、テンプレートロジックに対して値を評価できます。if文で、比較演算子の使用例を確認できます。
短縮形の比較演算子は、|selectattr()などの式を評価するHubLフィルターで使用できます。

論理

論理演算子を使用すると、ブール式を実装するだけでなく、複数の式を1つのステートメント(文)に結合できます。
AND/OR演算子の使用 HubLでは、or演算子はPythonのor演算子やJavaScriptの||演算子のように動作します。式がtrueと評価された場合は第1オペランドを返し、それ以外の場合は第2オペランドを返します。or演算子の一般的な使用例は、変数値が定義されていない場合のフォールバック値の設定です。
ただし、and演算子は、Pythonのand演算子やJavaScriptの&&演算子とは異なる動作をします。HubLでは、andは常にブール値を返します。式がtrueと評価された場合はtrueが返され、それ以外の場合はfalseが返されます。一方、PythonとJavaScriptの演算子は、ステートメント(文)がtrueとfalseのどちらとして評価されるかに基づいてオペランド値を返します。
HubLでは、空のリスト([])と空のディクショナリー({})はfalsyと見なされます。これはPythonでの動作と同等ですが、[]{}がtruthyであるJavaScriptとは異なります。

その他のHubL演算子

以下に、さまざまなタスクを実行するために使用できる、その他の重要なHubL演算子を示します。

式評価

式評価は、論理演算子を使用して評価できる各種のブール条件です。

boolean

オブジェクトがブール値かどうかを評価します(厳密なチェックであり、truthy式の評価ではありません)。

containing

変数のリストに値が含まれているかどうかを評価します。

containingall

変数のリストに別のリストの全ての値が含まれているかどうかを評価します。

defined

変数がテンプレートのコンテキスト内で定義済みかどうかを評価します。演算子を使わずにif文を記述してこの式評価を使用することもできますが、その場合は既定で、変数が定義されているかどうかだけがチェックされます。 以下の例では、カラーモジュールのcolorパラメーターがテストされます。Colorパラメーターに値がない場合、テンプレートは既定の背景色として黒をレンダリングします。値が定義されている場合、ユーザーが設定した背景色がテンプレートによってレンダリングされます。

divisibleby

オブジェクトを別の数値で割り切れるかどうかを評価します。 例えば、以下のforループは、動物の種類のリストを反復処理するために作成されています。動物の各種類がdiv内に出力され、5つ目ごとのdivに異なるインラインスタイルが適用されます(幅: 100%)。このコンセプトをブログに適用すると、特定のパターンの記事に別のマークアップをレンダリングできます。Forループとloop.indexの詳細については、こちらの記事を参照してください

equalto

変数の値が定数または別の変数の値と等しいかどうかを評価します。これと同じ評価は、==演算子を使用して行うこともできます。 以下の例では、ループ内の投稿の合計数に応じてブログ記事の幅を調整します。この出力例では、ブログに4件の記事があると仮定しています。

even

数値型変数の値が偶数かどうかを評価します。 以下の例は、単純化したブログリストのループを示しています。この例では、ループの現在の反復処理での値が偶数の場合、その投稿アイテムのdivにeven-postクラスを割り当てます。それ以外の場合は、odd-postクラスを割り当てます。

float

数値型変数の値が浮動小数点数かどうかを評価します。

integer

変数が整数かどうかを評価します。

iterable

変数がループ処理を適用できるかどうかを評価します。 以下の例では、jobsという変数が反復可能かどうかをチェックします。この変数にジョブのリストが格納されている場合、if文trueと評価されて、ループが実行されます。変数に1つの値しか格納されていない場合は、if文により、別のマークアップを使用してその値が出力されます。ループの詳細については、こちらを参照してください

lower

文字列が小文字かどうかを評価します。 以下の例では、unless文と小文字フィルターを使用して、テキストモジュールに入力されるテキストの文字列が常に小文字になるようにしています。

mapping

オブジェクトがディクショナリー(辞書型)かどうかを評価します。 以下の例では、contactオブジェクトが辞書型かどうかをチェックしています。

none

変数にnull値があるかどうかを評価します。

number

変数の値が数値かどうかを評価します。 以下の例では、変数をチェックして、数かどうかを調べ、数の場合は百万に変換します。

odd

数値型変数の値が奇数かどうかを評価します。 以下の例は、前述のeven式評価の例の逆バージョンです。

sameas

2つの変数の値が同じかどうかを評価します。 以下の例では、2つの変数を設定してから、これらの変数の値が同じかどうかをチェックします。

sequence

iterable評価と同様に、この式評価では変数がシーケンスかどうかをチェックします。 以下の例では、変数がシーケンスかどうかを評価してから、音楽ジャンルのシーケンスを反復処理します。

string

変数の値が文字列であるかどうかを評価します。 以下の例では、変数をチェックして、それが文字列かどうかを調べます、文字列の場合はタイトルフィルターを適用して大文字に変更します。

string_containing

指定された部分文字列が別の文字列に含まれているかどうかを評価します。この式評価はis演算子と組み合わせて使用します。

string_startingwith

文字列が特定の文字列で始まるかどうかを評価します。is演算子と組み合わせて使用します。

truthy

式がTrueとして評価されるかどうかを評価します。 以下の例では、ブール値チェックボックスモジュールを使用してアラートメッセージを表示します。

undefined

テンプレートのコンテキスト内で変数が未定義かどうかを評価します。この評価はnone式評価とは異なります。undefined式評価でtrueが返されるのは、変数が存在しても値が格納されていない場合です。一方、none式評価では変数にnull値が格納されている場合にtrueが返されます。 以下の例では、テンプレートで変数”my_var”の有無をチェックします。

upper

文字列がすべて大文字かどうかを評価します。以下の例は、前述lower式評価の例の逆バージョンです。

within

変数がリスト内に存在するかどうかを評価します。
最終更新日 2026年2月10日