mcpField
S
shopify-liquid-themes

shopify-liquid-themes

github.com/benjaminsehl開発1213.7k 回インストール15 週間前に更新
リポジトリ

shopify-liquid-themes について

Shopify Liquid テーマ開発者向けのリファレンススキルです。テーマ構造、Liquid 構文、Schema 設定、オブジェクトやフィルターを実践的に整理しています。

主な機能

  1. 01テーマのディレクトリとコンポーネントの役割
  2. 02Liquid の構文、タグ、フィルター
  3. 03セクションとブロックの Schema ガイド
  4. 04グローバルおよびページ固有のオブジェクト一覧
  5. 05CSS、JavaScript、翻訳のパターン

活用シーン

  1. 01セクション、ブロック、スニペットの選択
  2. 02Liquid 構文やフィルター動作の確認
  3. 03テーマコンポーネントのエディター設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/benjaminsehl/liquid-skills --skill shopify-liquid-themes

インストール後、Claude Code で/shopify-liquid-themesを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
examples.md
filters-commerce.md
filters-html-media.md
filters-language.md
objects-commerce.md
objects-content.md
objects-tier2.md
objects-tier3.md
schema-and-settings.md
tags.md

詳細

Shopify Liquid テーマ

テーマのアーキテクチャ

.
├── sections/    # Full-width page modules with {% schema %} — hero, product grid, testimonials
├── blocks/      # Nestable components with {% schema %} — slides, feature items, text blocks
├── snippets/    # Reusable fragments via {% render %} — buttons, icons, image helpers
├── layout/      # Page wrappers (must include {{ content_for_header }} and {{ content_for_layout }})
├── templates/   # JSON files defining which sections appear on each page type
├── config/      # Global theme settings (settings_schema.json, settings_data.json)
├── locales/     # Translation files (en.default.json, fr.json, etc.)
└── assets/      # Static CSS, JS, images (prefer {% stylesheet %}/{% javascript %} instead)
用途に応じた使い分け
必要なもの使用するもの理由
全幅でカスタマイズ可能なモジュールセクション{% schema %} を持ち、エディターに表示され、ブロックをレンダリングします
エディター設定を備えた、小さくて入れ子にできるコンポーネントブロック{% schema %} を持ち、セクションやブロックの中に入れ子にできます
マーチャントが編集しない再利用可能なロジックスニペットスキーマを持たず、{% render %} でレンダリングし、パラメーターを受け取ります
複数のブロックやスニペットで共有するロジックスニペットブロックから別のブロックを {% render %} できません

Liquid 構文

区切り文字
  • {{ ... }} — 出力(値を表示します)
  • {{- ... -}} — 空白を削除して出力します
  • {% ... %} — ロジックタグ(if、for、assign)— 何も出力しません
  • {%- ... -%} — 空白を削除するロジックタグ
演算子

比較: ==、!=、>、<、>=、<= 論理: and、or、contains

重要な注意点
  1. 条件式では括弧を使用できません — 代わりに {% if %} を入れ子にします
  2. 三項演算子はありません — 常に {% if cond %}value{% else %}other{% endif %} を使用します
  3. for ループの最大反復回数は50回です — それより大きな配列には {% paginate %} を使用します
  4. contains は文字列に対してのみ機能します — 配列内のオブジェクトは確認できません
  5. {% stylesheet %}/{% javascript %} は Liquid をレンダリングしません — これらの中に Liquid を記述できません
  6. スニペットから外側のスコープの変数にはアクセスできません — render パラメーターとして渡します
  7. include は非推奨です — 常に {% render 'snippet_name' %} を使用します
  8. {% liquid %} タグ — 区切り文字を使わずに複数行のロジックを記述できます。出力には echo を使用します
変数
{% assign my_var = 'value' %}
{% capture my_var %}computed {{ value }}{% endcapture %}
{% increment counter %}
{% decrement counter %}

フィルター早見表

フィルターは | で連結します。あるフィルターの出力型が、次のフィルターの入力になります。

配列: compact、concat、find、find_index、first、has、join、last、map、reject、reverse、size、sort、sort_natural、sum、uniq、where 文字列: append、capitalize、downcase、escape、handleize、lstrip、newline_to_br、prepend、remove、replace、rstrip、slice、split、strip、strip_html、truncate、truncatewords、upcase、url_decode、url_encode 数学: abs、at_least、at_most、ceil、divided_by、floor、minus、modulo、plus、round、times 通貨: money、money_with_currency、money_without_currency、money_without_trailing_zeros 色: color_brightness、color_darken、color_lighten、color_mix、color_modify、color_saturate、color_desaturate、color_to_hex、color_to_hsl、color_to_rgb メディア: image_url、image_tag、video_tag、external_video_tag、media_tag、model_viewer_tag URL: asset_url、asset_img_url、file_url、shopify_asset_url HTML: link_to、script_tag、stylesheet_tag、time_tag、placeholder_svg_tag ローカライズ: t(翻訳)、format_address、currency_selector その他: date、default、json、structured_data、font_face、font_url、payment_button

詳細:言語フィルター、HTML/メディアフィルター、コマースフィルター

タグ早見表

カテゴリータグ
テーマcontent_for、layout、section、sections、schema、stylesheet、javascript、style
制御if、elsif、else、unless、case、when
反復処理for、break、continue、cycle、tablerow、paginate
変数assign、capture、increment、decrement、echo
HTMLform、render、raw、comment、liquid
ドキュメントdoc

構文とパラメーターを含む詳細:references/tags.md

オブジェクト早見表

グローバルオブジェクト(どこからでも利用可能)

cart、collections、customer、localization、pages、request、routes、settings、shop、template、theme、linklists、images、blogs、articles、all_products、metaobjects、canonical_url、content_for_header、content_for_layout、page_title、page_description、handle、current_page

ページ固有のオブジェクト
テンプレートオブジェクト
/productproduct、remote_product
/collectioncollection、current_tags
/cartcart
/articlearticle、blog
/blogblog、current_tags
/pagepage
/searchsearch
/customers/*customer、order

詳細なリファレンス:commerce objects、content objects、tier 2、tier 3

Schema タグ

セクションとブロックでは、有効な JSON オブジェクトを含む {% schema %} が必要です。セクションでは section.settings.* を、ブロックでは block.settings.* を使用します。

セクションの schema 構造
{
  "name": "t:sections.hero.name",
  "tag": "section",
  "class": "hero-section",
  "limit": 1,
  "settings": [],
  "max_blocks": 16,
  "blocks": [{ "type": "@theme" }],
  "presets": [{ "name": "t:sections.hero.name" }],
  "enabled_on": { "templates": ["index"] },
  "disabled_on": { "templates": ["password"] }
}
ブロックの schema 構造
{
  "name": "t:blocks.slide.name",
  "tag": "div",
  "class": "slide",
  "settings": [],
  "blocks": [{ "type": "@theme" }],
  "presets": [{ "name": "t:blocks.slide.name" }]
}
設定タイプの選択表
必要な機能設定タイプ主なフィールド
オン/オフ切り替えcheckboxdefault: true/false
短いテキストtextplaceholder
長いテキストtextareaplaceholder
リッチテキスト(<p> を含む)richtext—
インラインのリッチテキスト(<p> を含まない)inline_richtext—
数値入力numberplaceholder
スライダーrangemin、max、default(すべて必須)、step、unit
ドロップダウン/セグメント選択selectoptions: [{value, label}]
ラジオボタンradiooptions: [{value, label}]
テキスト配置text_alignmentdefault: "left"/"center"/"right"
カラーピッカーcolordefault: "#000000"
画像のアップロードimage_picker—
動画のアップロードvideo—
外部動画の URLvideo_urlaccept: ["youtube", "vimeo"]
商品ピッカーproduct—
コレクションピッカーcollection—
ページピッカーpage—
ブログピッカーblog—
記事ピッカーarticle—
URL の入力url—
メニューピッカーlink_list—
フォントピッカーfont_pickerdefault(必須)
エディターの見出しheadercontent(id は不要)
エディターの説明paragraphcontent(id は不要)
visible_if のパターン
{
  "visible_if": "{{ block.settings.layout == 'vertical' }}",
  "type": "select",
  "id": "alignment",
  "label": "t:labels.alignment",
  "options": [...]
}

他の設定値に応じて、エディター内の設定を条件付きで表示/非表示にします。

ブロックエントリーのタイプ
  • { "type": "@theme" } — 任意のテーマブロックを受け付けます
  • { "type": "@app" } — アプリブロックを受け付けます
  • { "type": "slide" } — slide ブロックタイプのみを受け付けます

schema の詳細と全 33 種類の設定タイプ:references/schema-and-settings.md

CSS と JavaScript

コンポーネントごとのスタイルとスクリプト

セクション、ブロック、スニペット内で {% stylesheet %} と {% javascript %} を使用します。

{% stylesheet %}
  .my-component { display: flex; }
{% endstylesheet %}

{% javascript %}
  console.log('loaded');
{% endjavascript %}
  • 各ファイルにつきタグはそれぞれ 1 つ — {% stylesheet %} タグを複数使うとエラーになります
  • Liquid は使用できません — これらのタグでは Liquid は処理されません。代わりに CSS 変数またはクラスを使用してください
  • sections/、blocks/、snippets/ 内でのみ使用できます
{% style %} タグ(Liquid 対応 CSS)

Liquid が必要な動的 CSS(エディターでリアルタイムに更新されるカラー設定など)に使用します。

{% style %}
  .section-{{ section.id }} {
    background: {{ section.settings.bg_color }};
  }
{% endstyle %}
設定用の CSS パターン

単一の CSS プロパティ — CSS 変数を使用します。

<div style="--gap: {{ block.settings.gap }}px">

複数の CSS プロパティ — 選択値として CSS クラスを使用します。

<div class="{{ block.settings.layout }}">

LiquidDoc({% doc %})

必須対象: スニペット(常に)、ブロック({% content_for 'block' %} を使用して静的にレンダリングする場合)

{% doc %}
  Brief description of what this file renders.

  @param {type} name - Description of required parameter
  @param {type} [name] - Description of optional parameter (brackets = optional)

  @example
  {% render 'snippet-name', name: value %}
{% enddoc %}

パラメーターのタイプ: string、number、boolean、image、object、array

翻訳

ユーザーに表示されるすべての文字列で t フィルターを使用する必要があります

<h2>{{ 'sections.hero.heading' | t }}</h2>
<button>{{ 'products.add_to_cart' | t }}</button>


<h2>Welcome to our store</h2>
変数の補間
{{ 'products.price_range' | t: min: product.price_min | money, max: product.price_max | money }}

ロケールファイル:

{
  "products": {
    "price_range": "From {{ min }} to {{ max }}"
  }
}
ロケールファイルの構造
locales/
├── en.default.json          # English translations (required)
├── en.default.schema.json   # Editor setting translations (required)
├── fr.json                  # French translations
└── fr.schema.json           # French editor translations
キーの命名規則
  • snake_case と階層化されたキー(最大3階層)を使用します
  • すべてのテキストに文頭のみ大文字の形式を使用します
  • スキーマのラベルには t: プレフィックスを使用します:"label": "t:labels.heading"
  • コンポーネントごとにグループ化します:sections.hero.heading、blocks.slide.title

リファレンス

コメント