Content last updated 2026-07-14

Liquid 言語

Zendesk の Liquid 言語に関するドキュメント

このガイドでは、Zendesk で Liquid テンプレート言語を使用するためのリファレンスを提供します。Liquid により、トリガー、自動化、テーマで動的コンテンツを利用できます。このページでは、一般的な変数、関数、実用例を扱います。

Liquid 言語とは

Liquid は、Shopify が作成したオープンソースのテンプレート言語で、Ruby で記述されています。テーマやページなどでより動的なコンテンツを利用できるようにするために使用します。

Zendesk で Liquid を使用する方法

Zendesk では、Liquid を主にトリガー、自動化、拡張機能で利用しています。これにより、より動的なメッセージ(コメント、URL など)を実現できます。Liquid 言語を完全に使いこなすには時間がかかる場合があります。特に多くの機能があり、頻繁に更新されるためです。

変数の展開

テキストまたは出力に値を挿入するには、変数、関数、または値の名前を二重波かっこで囲みます。

例として、チケットのリクエスター名を出力する場合は、次の形式になります。

  • 入力: Greetings {{ticket.requester.name}}
  • 出力: Greetings John Doe

同じ方法で関数も使用できます。たとえば、メッセージに自分のロールを入れつつ、大文字化したい場合は、次の形式になります。

  • 入力: My role is {{current_user.role | capitalize }}
  • 出力: My role is Fullstack Engineer

コードブロック

コードブロック(一般的なループ、代入、条件分岐など)を使用するには、行を {% で開始し、%} で終了します。

たとえば、チケットのコメントに対するループを開始する場合は、{% for comment in ticket.comments %} のようにします。

一般的な変数

オブジェクトの種類変数説明
現在のユーザーcurrent_user現在のユーザーを参照するユーザー オブジェクト
ユーザーnameユーザーのフルネーム
ユーザーfirst_nameユーザーの名
ユーザーlast_nameユーザーの姓
ユーザーemailユーザーのメールアドレス
ユーザーdetailsユーザーの詳細テキストボックス
ユーザーnotesユーザーのメモテキストボックス
ユーザーidユーザーの Zendesk ID
ユーザーorganizationユーザーの組織オブジェクト
ユーザーcustom_fields.gitlab_user_idユーザーの GitLab ユーザー ID(カスタム ユーザーフィールド)
ユーザーcustom_fields.gitlab_usernameユーザーの GitLab ユーザー名(カスタム ユーザーフィールド)
ユーザーcustom_fields.xxxxxxxxxx という名前のユーザーフィールドに対するユーザーの値
組織id組織の Zendesk ID
組織name組織の名前
組織details組織の詳細テキストボックス
組織notes組織のメモテキストボックス
組織custom_fields.salesforce_id組織の Salesforce ID
組織custom_fields.arr組織の ARR
組織custom_fields.technical_account_manager組織の CSM
組織custom_fields.account_owner組織の AM
組織custom_fields.org_region.title組織のリージョン
組織custom_fields.support_level.title組織のサポートレベル
組織custom_fields.xxxxxxxxxx という名前の組織フィールドに対する組織の値
エージェントnameエージェントの名前
エージェントroleエージェントのロール
エージェントemailエージェントのメールアドレス
エージェントsignatureエージェントの署名
チケットassigneeチケットの担当者(ユーザー オブジェクト)
チケットccsチケットで CC されているユーザーの配列
チケットdue_dateチケットの期日(日付のみ)
チケットdue_date_with_timestampチケットの期日(タイムスタンプ付き)
チケットfollowersチケットをフォローしているユーザーの配列
チケットidチケットの Zendesk ID
チケットin_business_hoursチケットが現在スケジュールの営業時間内かどうかを示すブール値
チケットlinkHTTP プロトコルを含むチケットの URL
チケットrequesterチケットのリクエスター(ユーザー オブジェクト)
チケットorganizationチケットの組織(組織オブジェクト)
チケットstatusチケットのステータス
チケットticket_field_xxxxxxID が xxxxxx のチケットフィールドに対するチケットの API 値
チケットticket_field_option_title_xxxxxxID が xxxxxx のチケットフィールドに対するチケットのドロップダウンタイトル値
チケットticket_field_360019949920チケットの未承認ユーザーフィールド値(Zendesk Global)
チケットticket_field_360017383799チケットの期日に関するメモの値(Zendesk Global)
チケットticket_field_360012194220チケットのパートナートラブルシューティング値(Zendesk Global)
チケットticket_field_360020735339チケットの CC リクエスト値(Zendesk Global)
チケットticket_field_360012194200チケットの組織メール(パートナー)の値(Zendesk Global)
チケットticket_field_360018253094チケットのサポートの優先リージョンの値(Zendesk Global)
チケットticket_formチケットのフォーム
チケットurlHTTP プロトコルを含まないチケットの URL
チケットtitleチケットの件名
チケットcommentsチケットのコメントの配列
チケットpublic_commentsチケットの公開コメントの配列
満足度current_ratingチケットの現在の満足度評価
満足度rating_sectionユーザーに満足度調査を依頼するために送信される書式設定済みブロック
満足度current_commentチケットの現在の満足度コメント

さらに多くの変数を使用できますが、GitLab で使用するものの中では、これらが圧倒的に一般的です。

チケットフィールド ID の確認

これには管理者レベルのアクセスが必要になる場合が多いため、支援が必要な場合は Customer Support Systems チームに連絡することをおすすめします。

一般的な関数

関数説明
slice部分文字列を返す
split区切り文字に基づいて文字列を配列に分割する
url_encode文字列を URL エンコードされた文字に変換する
url_decodeurl_encode でエンコードされた文字列をデコードする
first配列内の最初の項目
last配列内の最後の項目
join配列内の項目を結合する
capitalize文字列の最初の文字を大文字にする
upcaseすべての文字を大文字にする
downcaseすべての文字を小文字にする
sizeオブジェクトのサイズを返す。文字列の場合は文字数、配列の場合は項目数
lstrip文字列の左側から空白を削除する
rstrip文字列の右側から空白を削除する
strip文字列の左側と右側の両方から空白を削除する
remove文字列内の項目を削除する
replace項目を置換する
sort配列内の項目をアルファベット順に並べ替える
truncate文字列を短縮する
uniq配列から重複する項目を削除する

一般的なタグ

タグ説明
assign変数に値を代入する
blank“nil” または “null” と同じ
captureテキストを変数に取り込む
breakループを終了する
continueループ内の残りのコードをスキップし、次のイテレーションを開始する

条件分岐

条件分岐使用可能な演算子
if..elsif..else..endif== != <> < <= > >= contains and or
unless..endless== != <> < <= > >= contains and or
case..when..else..endcaseN/A

ループ

ループ構文
forfor x in y, for x in y limit:5, for x in y offset:3, for x in y reversed
cyclecycle "apple", "banana", "cherry"

ドキュメント Issue 作成トリガー

これをトリガーで使用し、最新コメントの作成者、タイトル、説明を特定してドキュメント Issue を作成します。

{% for comment in ticket.comments limit:1 offset:0 %}
  {% assign author = comment.author.custom_fields.gitlab_user_id %}
  {% assign lines = comment | url_encode | split: "%0A" %}
  {% for line in lines %}
    {% assign first_five = line | slice: 0,5 %}
    {% if first_five == 'Title' %}
      {% assign title = line | url_decode | split: ': ' | last %}
    {% endif %}
  {% endfor %}
  {% assign description = comment | split: 'Description:' | last | join: '\n' %}
{% endfor %}

行ごとの内訳:

  1. チケットコメントに対する for ループを開始し、上限を 1 イテレーションに設定します(つまり最新の 1 件だけを取得します)
  2. 変数 author に値を代入します
    • 値はコメント作成者の GitLab ユーザー ID(カスタム ユーザーフィールド)にします
  3. 変数 lines に値を代入します
    • これにより comment を関数 url_encode に渡し、文字列を URL セーフ形式にエンコードします
    • これにより URL エンコードされた文字列を split 関数に渡し、区切り文字 %0A で分割した配列に変換します
  4. lines 変数に格納された配列に対する for ループを開始します
  5. 変数 first_five に値を代入します
    • これにより line を slice 関数に渡し、最初の 5 文字を返します
  6. first_five の値が Title であることを条件とする if ブロックを宣言します
  7. 変数 title に値を代入します
    • これにより line を関数 url_decode に渡し、url_encode が先に行ったことを元に戻します
    • これを split 関数に渡し、区切り文字 : で分割した配列に変換します
    • これを last 関数に渡し、配列の最後の項目を返します
  8. if ブロックを終了します
  9. 2 つ目の for ループを終了します
  10. 変数 description に値を代入します
    • これにより comment を split 関数に渡し、区切り文字 ‘Description:’ で分割した配列に変換します
    • これを last 関数に渡し、配列の最後の項目を返します
    • これを join 関数に渡し、区切り文字 \n を使用して項目を結合します
  11. 最初の for ループを終了します

時間外メッセージを表示するか判断する

これを使用して、チケットが現在営業時間内かどうかに基づき、テキストブロックを表示するかどうかを判断します。

{% if ticket.in_business_hours == 'false' %}
  <li>You indicated in this ticket, #{{ticket.id}}, a "Preferred Region for Support." The current time is outside of that region's standard business hours. You can rest assured that this ticket will be addressed by the next available engineer in the selected region. It is important that you understand when you may expect a reply regarding this case. Please see the linked handbook section for more information regarding the <a href='https://about.gitlab.com/support/#effect-on-support-hours-if-a-preferred-region-for-support-is-chosen' target='_blank'>effect of using Preferred Region</a>.<br />During the course of this ticket if you require assistance outside of the selected region's standard business hours please feel free to reply asking one of our support engineers to set this ticket's preferred region to "All regions".</li>
{% endif %}

行ごとの内訳:

  1. チケットが営業時間内ではないことを条件とする if ブロックを宣言します
  2. テキストブロックを表示します
    • これにより、Liquid 変数 {{ticket.id}} を使用してチケットの ID を挿入します
  3. if ブロックを終了します

SSAT Issue 作成トリガー

これを、顧客が残した SSAT 評価に基づいて Issue を作成するトリガーの一部として使用します。これは、チケットで使用しているフォームを特定し、チケットフォームに対応する GitLab Issue タグを含む、使用する変数を設定するために使用されます。

{% assign form = ticket.ticket_form %}

{% if form == 'GitLab.com User Accounts and Login Issues' %}
  {% assign form = 'form::GitLab.com' %}
{% elsif form == 'Support for GitLab.com' %}
  {% assign form = 'form::GitLab.com' %}
{% elsif form == 'Support for a self-managed GitLab instance' %}
  {% assign form = 'form::Self-managed' %}
{% elsif form == 'Licensing and Renewals Problems' %}
  {% assign form = 'form::Upgrades & Renewals' %}
{% elsif form == 'Contact the Security team' %}
  {% assign form = 'form::Security' %}
{% elsif form == 'Other Request' %}
  {% assign form = 'form::Other' %}
{% else %}
  {% assign form = 'form::GitLab Community Edition' %}
{% endif %}

行ごとの内訳:

  1. 変数 form に値を代入します
    • 値はチケットのフォームにします
  2. 間隔を空けるための空行です(必須ではなく、見た目をよくするためだけのものです)
  3. form の値が GitLab.com User Accounts and Login Issues であることを条件とする if ブロックを宣言します
  4. 変数 form に値を代入します
  5. form の値が Support for GitLab.com であることを条件とする elsif ブロックを宣言します
  6. 変数 form に値を代入します
  7. form の値が Support for a self-managed GitLab instance であることを条件とする elsif ブロックを宣言します
  8. 変数 form に値を代入します
  9. form の値が Licensing and Renewals Problems であることを条件とする elsif ブロックを宣言します
  10. 変数 form に値を代入します
  11. form の値が Contact the Security team であることを条件とする elsif ブロックを宣言します
  12. 変数 form に値を代入します
  13. form の値が Other Request であることを条件とする elsif ブロックを宣言します
  14. 変数 form に値を代入します
  15. else ブロックを宣言します
  16. 変数 form に値を代入します
  17. if ブロックを終了します

便利なリンク

一般的な問題とトラブルシューティング

これは必要に応じて項目が追加される継続的なセクションです。