最終更新日: 2025年10月8日
HubLでは、テンプレートのロジックと機能を拡張するための主な演算子と式評価をサポートしています。演算子を使用すると、算術関数の実行、比較、テンプレートロジックの複雑化、マークアップのレンダリングの変更を行うことができます。この記事では、HubLで使用できる式評価も含めて紹介します。
演算子
演算子は、HubLコンパイラーに対して各種の演算を行うよう指示する記号です。これらの演算の結果、最終出力が生成されます。演算子は、算術関数の実行、比較、ブール式の実装などのために、2つの値を関連付けるためにオペランド間に配置されます。
数学
標準の算術演算子を使用して、テンプレートのコンテキストで値を計算できます。| 記号 | 説明 | 
|---|---|
| + | 2つのオブジェクト(通常は数値)を加算します。文字列やリストを連結させるには、代わりに ~演算子を使用する必要があります。 | 
| - | ある数値を別の数値から減算します。 | 
| / | 数値を除算します。 | 
| % | 数値を除算した余りを返します。 | 
| // | 2つの数値を除算した余りを整数に切り捨てて返します。たとえば、 {{ 20 // 7 }}は2です。 | 
| * | 数値を乗算します。 | 
| ** | 左辺のオペランドを右辺のオペランドで累乗します。 | 
比較
比較演算子を使用すると、テンプレートロジックに対して値を評価できます。if文で、比較演算子の使用例を確認できます。| 記号 | 省略形 | 説明 | 
|---|---|---|
| == | eq | 次の値に等しい。2つのオブジェクトの値が等しい場合、trueと評価されます。 | 
| != | ne | 次の値に等しくない。2つのオブジェクトが等しくない場合、trueと評価されます。 | 
| > | gt | 次の値より大きい。左辺のオペランドの値が右辺のオペランドの値よりも大きい場合、trueと評価されます。 | 
| >= | gte | 次の値以上。左辺のオペランドが右辺のオペランドと同じかそれよりも大きい場合、trueと評価されます。 | 
| < | lt | 次の値より小さい。左辺のオペランドが右辺のオペランドよりも小さい場合、trueと評価されます。 | 
| <= | lte | 次の値以下。左辺のオペランドが右辺のオペランドと同じかそれより小さい場合、trueと評価されます。 | 
短縮形の比較演算子は、
|selectattr()などの式を評価するHubLフィルターで使用できます。論理
論理演算子を使用すると、ブール式を実装するだけでなく、複数の式を1つのステートメント(文)に結合できます。| 記号 | 説明 | 
|---|---|
| and | 左辺のオペランドと右辺のオペランドの両方がtruthyの場合に trueを返します。それ以外の場合は、falseを返します。この演算子は、Pythonの and演算子やJavaScriptの&&演算子のようには動作しません。and演算子の使用の詳細については、以下をご覧ください。 | 
| or | 第1オペランドがtruthyの場合に、そのオペランドを返します。それ以外の場合は、第2オペランドを返します。 この演算子は、PythonおよびJavaScriptの orに||相当します。or演算子の使用の詳細については、以下をご覧ください。 | 
| is | 肯定文の2つのオペランドを結合します。 | 
| not | ステートメント(文)を isと組み合わせて否定します。 | 
| (expr) | 演算順を示すために、式をグループ化します。例: (10 - 2) * variable。 | 
| ? | 三項演算子を使用すると、条件付きロジックをすばやく記述できます。3つの引数(式、true条件、false条件)を受け入れます。式を評価し、該当した条件を返します。 | 
or演算子はPythonのor演算子やJavaScriptの||演算子のように動作します。式がtrueと評価された場合は第1オペランドを返し、それ以外の場合は第2オペランドを返します。or演算子の一般的な使用例は、変数値が定義されていない場合のフォールバック値の設定です。
and演算子は、Pythonのand演算子やJavaScriptの&&演算子とは異なる動作をします。HubLでは、andは常にブール値を返します。式がtrueと評価された場合はtrueが返され、それ以外の場合はfalseが返されます。一方、PythonとJavaScriptの演算子は、ステートメント(文)がtrueとfalseのどちらとして評価されるかに基づいてオペランド値を返します。
[])と空のディクショナリー({})はfalsyと見なされます。これはPythonでの動作と同等ですが、[]と{}がtruthyであるJavaScriptとは異なります。
その他のHubL演算子
以下に、さまざまなタスクを実行するために使用できる、その他の重要なHubL演算子を示します。| 記号 | 説明 | 
|---|---|
| in | 値がシーケンス内に含まれているかどうかをチェックします。 | 
| is | 式評価を実行します。 | 
| | | フィルターを適用します。 | 
| ~ | 値を連結します。 | 
式評価
式評価は、論理演算子を使用して評価できる各種のブール条件です。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式評価の例の逆バージョンです。