サムネイル

Shopify の独自開発言語 Liquid とは?使い方から基礎知識まで徹底解説!

目次

はじめに

今回は、Shopify の独自開発言語である Liquid について、基本的な使い方や Liquid を使う上で欠かせない基礎知識について解説していきます。

この記事では、以下の読者を対象にしています。

  • Shopify の EC サイトの見た目や機能を自分でカスタマイズできるようになりたい
  • Liquid について学習したいけど、何から勉強すればいいかわからない

Shopify の Liquid とは?

Shopify の Liquid とは、Shopify がオープンソースで開発しているテンプレート言語です。

Liquid を使うことで動的なサイトを作ることができ、訪問するユーザ一人ひとりに最適化した情報を画面に表示させることが可能になります。

Liquid には独自の構文があり、変数を扱うことができます。その Liquid の構文を HTML 内に埋め込み、Liquid の変数の値によって表示する情報を出し分けることで、ユーザーに合わせた動的なコンテンツを表示させることができます。

Shopify を使う場合、基本的には Liquid の知識がなくても EC サイトを立ち上げて運営することができます。しかし、Liquid について理解を深めることで、より独自性のある EC サイトを作れるようになるでしょう。


Liquid の基本的な使い方

まずは、Liquid の基本的な書き方と、Liquid のオペレータについて解説していきます。

「{{ }}」と「{% %}」

Liquid のコードは、基本的に HTML の構文の中に記載していくため、コンピュータがそれらを区別するために特別な記法で書く必要があります。(PHP でいう <?php ?> のようなものです)主な埋め込み方法は「{{ }}」と「{% %}」の二つです。それぞれ解説します。

{{ }} の使い方

{{ }} は、出力を意味します。この中で書かれた文字列や変数、オブジェクトはプログラムの実行時に評価され、HTML の一部として解釈されます。

<h2>
   {{ "Hello World!" }}
</h2>

出力: Hello World!

文字列等を代入した変数を {{ }} 内で書くと、代入された値を出力します。
(1 行目のコードの意味については後述します)

{% assign hello = "Hello World!" %}
<h2>
   {{ hello }}
</h2>

出力: Hello World!

商品詳細ページ内で product.title とすると、その商品のタイトルを表示できます。

<h2>
   {{ product.title }}
</h2>

出力: Elegant Leather Wallet

{% %} の使い方

{% %} はロジックを書く際に使用します。
この中では、条件分岐や変数の代入、計算など、さまざまなロジックを記述することができます。この中での実行結果は HTML に出力されることはありません。

下記の例では {% %} の中で変数 animal に文字列 "dog" を代入し、その変数の値がもし "cat" なら p タグに囲まれた「にゃー!」を出力し、そうでない場合は「わんわん!」を出力するロジックを書いています。(if 文の詳しい使い方については後述します)

{% assign animal = "dog" %}

{% if animal == "cat" %}
   <p>
      にゃー!
   </p>
{% else %}
   <p>
      わんわん!
   </p>
{% endif %}

出力: わんわん!

Liquid のオペレーター(演算子)

他の言語と同様に、Liquid にも固有のオペレーターがあります。

オペレーター意味
A = BA に B を代入
A == BA と B が等しい時に true を返す
A != BA と B が等しくない時に true を返す
A > BA が B よりも大きければ true を返す
A < BA が B よりも小さければ true を返す
A >= BA が B 以上なら true を返す
A <= BA が B 以下なら true を返す
A or BA または B が true なら true を返す
A and BA と B が両方 true なら true を返す
A contains BA に B が含まれている場合に true を返す

基本的には他の言語と同じなのですが、JavaScript では論理演算子が「||」や「&&」なのに対して、Liquid の場合は「or」や「and」となっているのが特徴的ですよね。

また、「contains」という見慣れないオペレーターがありますが、これはある文字列の中に部分文字列が存在するかどうかを判断するために使われます。

{% if customer.email contains "shopify.com" %}
  Hey there, Shopify employee!
{% endif %}

結果:
もし顧客の email アドレスに "shopify.com" が含まれていたらいたらそれは従業員なので、従業員用のメッセージを表示する。


Liquid の基礎知識

Liquid の大きな概念として、Object と Tags と Filters があります。
これらを使いこなすことで、必要な情報を取得・加工して適切に画面に表示させることができます。
それぞれ解説していきます。

Object

Liquid の Object は「{{ }}」や「{% %}」の中で参照できるオブジェクトのことです。Object に対して「.」を使うと、その Object の中にある任意の属性を取り出すことができます。
この Object を適切に使うことで、1 つのテンプレートで全ての商品に対応できるようになり、商品ごとに商品ページをコーディングする必要がなくなります。

たとえば、 product オブジェクトには title という属性が存在しており、「{{ }}」の中でその値を出力すると、画面にその商品の商品名を表示することができます。

<p>
   こちらの商品は、「 {{ product.title }} 」です!
</p>

(例 1)「Organic Cotton T-Shirt」の商品ページ内で上のコードを実行
結果: こちらの商品は、「 Organic Cotton T-Shirt 」です!

(例 2)「Luxury Silk Scarf」の商品ページ内で上のコードを実行
結果: こちらの商品は、「 Luxury Silk Scarf 」です!

Tag

Liquid の Tag とは、変数の定義や繰り返し処理を指示するためのもので、「{{% %}}」の中で使います。代表的なものでいうと、assign による変数定義や、if 文や for 文による制御フローなどがあります。
Tag を使って条件分岐や繰り返し処理を行うことで、状況にあった画面表示を実現することができます。

それでは、代表的な Tag を紹介していきます。

assign タグ

assign タグは、変数を定義・代入する際に使用します。
変数の値を出力する時は、定義した変数を「{{ }}」で囲みます。

{% assign favorite_color = "red" %}

<p>
   My favorite color is {{ favorite_color }}.
</p>

{% assign favorite_color = "blue" %}

<p>
   My favorite color is {{ favorite_color }}.
</p>

結果:
My favorite color is red.
My favorite color is blue.

上記の例では、初めに favorite_color を "red" の値で定義して、一度出力しています。その後、同じ変数に対して、"blue" を代入しているため、二度目の出力では "blue" が表示されます。

JavaScript では、一度定義した変数に他の値を代入する場合、変数名から書き始めます。それに対し Liquid では、代入する際も assign タグを入れる必要がある点に注意してください。

if タグ

if タグを使うことで、条件分岐を実現することができます。if タグと、endif タグに挟まれたコードは、if タグに書かれた条件が満たされた場合のみ実行されます。
また、Liquid では if タグの否定形として、 unless タグが存在します。このタグと endunless タグに挟まれたコードは、unless タグの条件が満たされない場合のみ実行されます。

{% if product.title == "UnReact" %}
   <p>
      You are buying some UnReact!
   </p>
{% endif %}

上記のコードでは、product.title の値が "UnReact" である場合のみ、「You are buying some UnReact!」の文字列が表示されます。

{% unless product.title == 'UnReact' %}
   <p>
      You are not buying UnReact.
   </p>
{% endunless %}

上記のコードでは、product.title の値が "UnReact" ではない場合のみ、「You are not buying UnReact.」の文字列が表示されます。

また、複数の二つ以上の条件に分岐させたい場合は elsIf タグに追加の条件分を書くことで実現できます。

{% if shipping_method.title == 'International Shipping' %}
    You're shipping internationally. Your order should arrive in 2 ~ 3 weeks.
{% elsif shipping_method.title == 'Domestic Shipping' %}
    Your order should arrive in 3 ~ 4 days.
{% else %}
    Thank you for your order!
{% endif %}

なぜか「elseIf」ではなく「elsIf」なので、書き間違えないように気をつけてください。
ちなみに、unless タグの場合も複数条件にする場合は elsIf タグを使用します。

case / when タグ

条件分岐が多くなる場合は case / when タグを使います。case タグには条件分岐に使用する変数、when タグには、変数に対して比較したい値を指定します。when タグを追加することで、条件分岐を増やすことができます。また、どの条件にも当てはまらない時に専用の処理をしたい場合は、else タグを使うことでその処理を記述できます。条件分岐を書き終わったら endcase タグで閉じてください。

{% case shipping_method.title %}
    {% when 'International Shipping' %}
         You're shipping internationally. Your order should arrive in 2 ~ 3 weeks.
    {% when 'Domestic Shipping' %}
        Your order should arrive in 3 ~ 4 days.
    {% when 'Local Pick-Up' %}
        Your order will be ready for pick-up tomorrow.
    {% else %}
        Thank you for your order!
{% endcase %}

for タグ

for タグを使うと、その中のコードブロックを繰り返し実行することができます。
for タグでは、{% for product in collection.products %} のように、 for の後に変数名、in の後に配列を受け取ります。この場合、collection オブジェクトの products 配列に含まれる商品の数だけ繰り返し、その都度対応する商品が変数 product に代入され、コードブロック内で使用することができます。

{% for product in collection.products %}
    {{ product.title }}
{% endfor %}

結果: Aurora Nebula Zenith Vertex Nimbus Eclipse Solace Vortex Haven Oasis

このように、for タグを使うことで、全ての商品に対して同じ処理を繰り返し行うことができます。
for タグは出力できる数が決まっており、1 ページあたり最大 50 件まで出力することができます。
50 件を超えて出力する場合、paginate タグを使用して複数ページにわたって表示させる必要があります。(今回は paginate の説明は割愛します)

また、配列の代わりに数値を使うこともできます。
数値を使う場合は、in の後に (1..4) というふうに初めの数字と終わりの数字を記入します。そして、対応する数字が for の後の変数に代入され、コードブロック内で参照することができます。

{% for index in (1..4) %}
   {{ index }}
{% endfor %}

出力: 1 2 3 4

Liquid では以上のようなタグを組み合わせて使用することで、商品や顧客の情報に合わせて表示を切り替えたり、繰り返し表示させたりすることができます。


Filter

Filter とは、JavaScript でいうメソッドのことです。
たとえば文字列に対しては、文字列を追加する append 、全て大文字に置き換える upcase 、指定した文字列を削除する remove などがあります。
Filter を駆使することで、情報を整形して、最適な形で出力することができます。
それでは、代表的な Filter をいくつか紹介していきます。

String filter

文字列に対する Filter です。

append

文字列に文字列を追加します。

{{ '30' | append: '% OFF!!' }}

結果: 30% OFF!!

upcase

文字列を大文字に変換します。

{{ "coming soon" | upcase }}

結果: COMING SOON

remove

文字列から指定した文字列を全て削除します。

{{ "Hello, world. Goodbye, world." | remove: "world" }}

出力: Hello, . Goodbye, .

Math filter

数値に対して処理をする Filter です。
Liquid では、四則演算をするときも Filter を使います。JavaScript のように「+」「-」「*」「/」を使って表すことはできないので注意が必要です。

plus

足し算です。

{{ 3 | plus: 2 }}

結果: 5

minus

引き算です。

{{ 3 | minus: 2 }}

結果: 1

times

かけ算です。

{{ 3 | times: 2 }}

結果: 6

divided_by

割算です。
整数同士で割ると、小数点以下は切り捨てられます。

{{ 20 | divided_by: 7 }}

結果: 2

割る数に少数点以下の数値を入れると、小数点以下まで計算します。

{{ 20 | divided_by: 7.0 }}

結果: 2.857142857142857

以上が代表的な Math filter となります。

HTML filter

HTML filter は HTML 要素を生成するためのフィルターです。
Liquid のプロパティやストアの assets(画像や動画などが保存されているファイル)から HTML 要素(img タグや button タグなど)を作ることができます。

image_tag

image_tag フィルターを使うと、HTML の img タグを生成できます。

{{ 'aurora_glass.png' | asset_url | image_tag }}

出力: <img src="aurora_glass.png の URL">

image_url

image_url フィルターは、画像の URL を返し、パラメーターとして、width と height を受け取ります。必ずどちらかのパラメーターを渡してください。どちらも渡さなかった場合はエラーが返されます。

{{ product | image_url: width: 450 }}

出力: 商品画像の URL

以上が代表的な HTML filter となります。


おすすめの Shopify アプリ

liquid を用いて開発したアプリです。liquid を用いることで、様々なアプリを開発することができます。

シンプル Coming Soon |商品ページ発売予告アプリ

「シンプル Coming Soon |商品ページ発売予告アプリ」は、Shopify ストアに発売予告(Coming Soon)を導入できるアプリのことです。こちらのアプリを利用すれば、商品毎に発売予告(Coming Soon)を行えます。

こちらからアプリをインストールできます。

シンプル Coming Soon |商品ページ発売予告アプリ

詳しい使い方については、以下のご利用ガイドをご覧ください。

Shopify で Coming Soon(発売予告)を実施するアプリについて徹底解説|ご利用ガイド

シンプル予約販売|受注販売や在庫切れ商品販売で使える

「シンプル予約販売|受注販売や在庫切れ商品販売で使える」は、ストア上で予約販売機能を設定することができるアプリです。

こちらからアプリをインストールできます。

シンプル予約販売|受注販売や在庫切れ商品販売で使える

詳しい使い方については、以下のご利用ガイドをご覧ください。

Shopify に予約販売機能を追加して受注販売や在庫切れ販売を簡単に実現できるアプリについて徹底解説|ご利用ガイド

シンプル Wishlist |お手軽お気に入り

「シンプル Wishlist |お手軽お気に入り」は、Shopify ストアに簡単にお気に入り機能を導入することができるアプリです。

こちらからアプリをインストールできます。

シンプル Wishlist|お手軽お気に入り

詳しい使い方については、以下のご利用ガイドをご覧ください。

Shopify にお気に入り(wishlist)を簡単に導入できるアプリについて徹底解説|ご利用ガイド

シンプルセット販売|お手軽クロスセル

「シンプルセット販売|お手軽クロスセル」は、ストア上でセット販売を設定できるアプリです。セット販売によるクロスセルを簡単に実現できます。

こちらからアプリをインストールできます。

「シンプルセット販売|お手軽クロスセル」

詳しい使い方については、以下のご利用ガイドをご覧ください。

Shopify でセット販売(クロスセル)を簡単に実現できるアプリについて徹底解説|ご利用ガイド

シンプルスライドショー|お手軽画像スライダー

「シンプルスライドショー|お手軽画像スライダー」は、ストアにノーコードでスライドショーを表示できるアプリです。

こちらからアプリをインストールできます。

シンプルスライドショー|お手軽画像スライダー

詳しい使い方については、以下のご利用ガイドをご覧ください。

Shopify にスライドショーを追加して画像をスライダー表示できるアプリについて徹底解説|ご利用ガイド

シンプル在庫数表示|お手軽残りわずか表示

「シンプル在庫数表示|お手軽残りわずか表示」は、Shopify ストアにノーコードで商品の残りわずか表示を実現できるアプリです。

こちらからアプリをインストールできます。

シンプル在庫数表示|お手軽残りわずか表示

詳しい使い方については、以下のご利用ガイドをご覧ください。

Shopify で残りわずか表示を挿入して在庫数表示が実現できるアプリについて徹底解説|ご利用ガイド

シンプル顧客タグ送料割引|お手軽顧客タグ送料無料

「シンプル顧客タグ送料割引|お手軽顧客タグ送料無料」は、顧客タグに応じて配送料を割引したり、無料にしたりできるアプリです。

こちらからアプリをインストールできます。

シンプル顧客タグ送料割引|お手軽顧客タグ送料無料

詳しい使い方については、以下のご利用ガイドをご覧ください。

Shopify に顧客タグに応じた自動送料割引機能を追加できるアプリについて徹底解説|ご利用ガイド

シンプル追従カート|追従購入ボタン(Buy Button)

「シンプル追従カート|追従購入ボタン(Buy Button)」は、Shopify ストアにノーコードで追従カートを導入できるアプリです。

こちらからアプリをインストールできます。

シンプル追従カート|追従購入ボタン(Buy Button)

詳しい使い方については、以下のご利用ガイドをご覧ください。

Shopify ストアに追従カート・追従購入ボタンを追加するアプリについて徹底解説|ご利用ガイド

おわりに

今回は、Liquid 言語の基本的な使い方や基礎知識について解説しました。

この記事が皆様の Liquid 学習の一助になれば幸いです。

最後まで読んでいただきありがとうございました。

おすすめ Shopify アプリ

シンプル追従営業日カレンダー|お手軽追従休業日設定のアイコン

シンプル追従営業日カレンダー|お手軽追従休業日設定

営業日カレンダーをストアに常に追従表示。定休日や臨時休業がお客様にひと目で伝わり、安心してお買い物いただけます。

シンプル店舗受け取り|お手軽ローカルピックアップのアイコン

シンプル店舗受け取り|お手軽ローカルピックアップ

お客様がカートページで受け取り店舗・日時を指定できます。テイクアウトや店舗受け取りにおすすめです。

シンプル注文履歴おすすめ商品|お手軽マイページアップセルのアイコン

シンプル注文履歴おすすめ商品|お手軽マイページアップセル

マイページの注文ページに、商品ごとに設定したおすすめ商品を表示。再購入を後押しします。

シンプル顧客メタフィールドCSVインポート・エクスポートのアイコン

シンプル顧客メタフィールドCSVインポート・エクスポート

顧客メタフィールドをCSVで一括管理。エクスポート・編集・インポートがかんたんに。

シンプルフォーム一体型LP|お手軽チャットボット購入のアイコン

シンプルフォーム一体型LP|お手軽チャットボット購入

チャットボット形式でお客様が迷わず注文できるLPを設置できます。コーディング不要で、テーマエディタから簡単に設定できます。

シンプル商品メタフィールドCSVインポート・エクスポートのアイコン

シンプル商品メタフィールドCSVインポート・エクスポート

商品やバリエーションのメタフィールドをCSVで一括管理。インポートもエクスポートもこのアプリひとつで完了。

シンプル新しいお客様アカウント拡張|生年月日・追加フォームのアイコン

シンプル新しいお客様アカウント拡張|生年月日・追加フォーム

誕生日や性別などの項目を、お客様アカウントのプロフィールページに追加できます。コーディング不要です。

シンプル2点目購入割引|2点目以降自動セール設定のアイコン

シンプル2点目購入割引|2点目以降自動セール設定

2点目以降の購入で自動割引。割引バッジと対象商品の表示で、まとめ買いを後押しします。

関連記事