The HTML is ready, but the write to `site/public/raw/` needs your approval (the permission prompt was declined). Here's the complete document — intended filename `260401_line-item-components-draft-orders-customer-account-api.html` (matching the `urlToSlug` convention in `ingest.mjs`). If you'd like me to write it to disk, re-run with approval. Otherwise here is the full HTML: ```html
バージョン 2026-04 から DraftOrderLineItem に components フィールドが追加。親 line item にぶら下がる構成要素(バンドルの中身など)を、親子のネスト構造でそのまま取得できる。
flattenComponents が追加された。
親も構成品も、同列の line item として一列に並んで返ってきた。「どれが親で、どれが中身か」はレスポンスの構造からは読み取れない。
トップレベルには親 line item だけが並び、構成品は components フィールドの中にぶら下がる。親子関係がそのまま構造に表れる。
DraftOrderLineItem.components は、その line item に紐づく
個々の構成 line item(component line items)を返すフィールド。
バンドル商品のように「1 つの親アイテムが複数の中身で構成される」ケースで、
中身を親の下にネストして表現できる。
name と quantity が使われている。
DraftOrder.lineItems 接続に追加された任意引数
flattenComponents で、構成品の返り方を切り替える。
トップレベルの nodes は親 line item のみ。構成品は各親の components から辿る。
親も構成品も、すべて同列の nodes として返る。2026-04 より前のバージョンと同じ挙動。
| API バージョン | flattenComponents の既定 | 返り方 |
|---|---|---|
| 2026-04 以降 | false | トップレベルは親 line item のみ。構成品は DraftOrderLineItem.components から取得 |
| 2026-04 より前 | true | 親・構成品ともにトップレベルの node として返る(後方互換のため) |
flattenComponents: true を明示するか、components を辿る実装へ移行する必要がある。記事に掲載されている例。親 line item の components をネストで取得している(既定の false 前提)。
query { draftOrder(id: "gid://shopify/DraftOrder/1") { lineItems(first: 10) { nodes { name quantity components { name quantity } } } } }
nodes の各要素(親)の中に components をネストで書くだけ。フラットな従来挙動が欲しければ lineItems(first: 10, flattenComponents: true) のように引数を渡す。この変更は Customer Account API の話。マイページ等の「顧客自身がアクセスする」文脈で、下書き注文の構成品が見えるようになる。Admin API の同種変更とは別物として扱う。
2026-04 では flattenComponents が false 既定。バージョンを上げると nodes の中身が「親だけ」に変わる。アップグレード時の最重要チェックポイント。
移行を急げない場合は flattenComponents: true を明示すれば、2026-04 でも従来どおり親・構成品が同列で返る。段階的移行の逃げ道になる。
既定挙動では、構成品は DraftOrderLineItem.components をクエリに追加しないと取得できない。フラット前提の集計ロジックは、親をループ → 子をループの二段に書き換える。
component line item の型・取得できるフィールドの全容、ページネーション時の挙動、他 API(Admin / Storefront)との整合などはこの記事には記載なし。サンプルにある name / quantity 以外を使うなら、実バージョンのスキーマで確認すること。
components をインデントした子リストとして描画。components をループの二段描画。name / quantity は記事のサンプルで確認済みのフィールド。flattenComponents: true を明示してバージョンだけ先行で上げる → ② その後、components を辿るネスト実装へ段階移行。components を「内訳行」として階層を保ったまま PDF / 帳票へ出力。true)、表示時はネスト(false)と、用途で flattenComponents を使い分けるとロジックが素直になる。components フィールド追加+flattenComponents 引数で従来のフラット挙動とも切替可能。