Liquid の変数の仕様について質問

Topic summary

Liquid gemをアプリケーションに組み込む際、角カッコ内の引用符の扱いについて仕様が不明確な問題に直面しています。

主な疑問点:

  • item["item['key']"]という記述で、キー名item['key']を文字列として正しく指定できるか
  • 最新リリース版では引用符で囲んでも変数として処理されてしまう
  • masterブランチでは文字列として解釈される

具体的な課題:

  • 引用符内でのバックスラッシュエスケープ(例:item["keys[\"aaa\"]"])が可能か
  • この動作がLiquidの言語仕様なのか、liquid gemの実装不備なのか判断できない

求めている情報:

  • Referencing handlesに関するより詳細なドキュメントのURL
  • 角カッコ内の引用符と文字解釈に関する正確な仕様

バージョン間で挙動が異なるため、正しい仕様の確認が必要な状況です。

Summarized with AI on November 17. AI used: claude-sonnet-4-5-20250929.

アプリケーションに liquid gem を組み込み、ユーザーが Liquid テンプレートを使えるようにしたいと考えています。
導入前の検証で Liquid の言語仕様なのか liquid gem の実装不備なのか判断がつかない振る舞いに遭遇したため質問させてください。

以下は読みましたが、角カッコを使う際の引用符および引用符の中の文字がどう解釈されるのかが分かりませんでした。
https://shopify.dev/docs/api/liquid/basics#referencing-handles

Referencing handles についてより詳細な Web ドキュメントがあれば、その URL を教えてください。

(十分な情報が手元になく、ライブラリの問題なのか、Liquid の仕様なのか、判断が難しい状況で困っています)

以下、本題です。

  1. item[“item[‘key’]”] は item のキー item[‘key’] を指定する記述であっているか

liquid gem の最新リリース版では引用符で囲んでも変数として処理されます。

(最初に item[‘key’] の値を取得してしまう)

一方で、liquid gem の master ブランチでは引用符で囲んだ場合は文字列キーitem[‘key’] として扱われます。

Liquid の仕様として正しい振る舞いは後者であるという認識で正しいでしょうか?

  1. Referencing handles においてバックスラッシュエスケープはあるのか

例えば item[“keys["aaa"]”] のように、引用符で囲まれた中で引用符を使うためにバックスラッシュエスケープが可能な仕様でしょうか?

  1. item[“var]”] は変数 item のキー var] を指定する記述ではないのか

引用符で囲んだとき、角カッコは特別扱いされるものでしょうか。

liquid gem の master ブランチを使っても、文字列キー var] ではなく変数 var として解釈されます。

これは Liquid の仕様でしょうか、liquid gem の実装不備でしょうか。

(おそらく、liquid gem の実装不備ではないかと考えていますが)

require 'liquid'

puts Liquid::Template.parse('{{ item["var]"] }}', error_mode: :strict).render!(
  {
    'var' => 'item-key',
    'item' => {
      'item-key' => 'item-value',
    },
  },
  { strict_variables: true },
)

__END__

item-value