アップデート履歴 (2026-05-11)
これは API バージョン 2026-05-11 の アップデート履歴 です。バージョンごとに 1 つのリビングドキュメントを持ち、新しいエントリーを最上部に追加していきます。各エントリーには、プラグインが /guide レスポンスで返す api_update の日付をタグ付けしています。上から下へ読むことで、このバージョンの初回リリース以降の API の成長を追うことができ、最新エントリーをお使いのサーバーの api_update と突き合わせれば、実際にどの機能が利用可能かを把握できます。
2026-05-11 初回リリース セクション以下のエントリーは、前バージョン 2025-10-20 から文脈のために引き継いだものです。最上部の破壊的変更エントリーが、2025-10-20 から移行する際に把握すべき契約の差分を説明しています。
2026-05-11 — api_update: 2026-05-11 — Version 2026-05-11 初回リリース — calc 列宣言の対称化
これは破壊的変更を伴うバージョン bump です。2025-10-20 から移行する前に必ず読んでください。
追加:
- ✅ calc 列宣言の対称化(T87c)。
calc式の中のmaterial.column参照は、その列の単一の宣言サイトとして、from側とjoin.with側の両方で 同じ意味を持つようになりました。Executor はそのマテリアルがどちら側にあるかに関わらず列を fetch + preserve し、出力からは取り除きます(出力はkeep列とcalcキーのみ)。これにより、from側列は自動 fetch されるがjoin側列は fetch されないという長年の非対称が解消されました。前バージョンではclick_eventを join 対象としたときにCOUNT(click_event.pv_id)のような集計がサイレントに 0 を返していましたが、新バージョンでは正しく動作します。Since: 2026-05-11。/guideのfeatures_detail.calc_join_symmetric.enabled: trueで検出可能。 - ✅
E_CALC_COLUMN_UNRESOLVED(バリデータ)。 実行前バリデーションで、calc式が参照するmaterial.columnがビューのスコープ(fromまたはjoin.withにそのマテリアルが存在する)に解決できないか、列がマテリアルのスキーマに存在しない場合に拒否するようになりました。以前はサイレントに 0 行を返していたケースを明示的なバリデーションエラーに変換することで、AI が組み立てたクエリの「修復ループ」シグナルを取り戻します。詳細は エラー を参照。 - ✅ JOIN
on.left/on.rightピンポイント・スコープ事前検証 + エラー詳細の構造化(T87、もともと 2026-05-10 に2025-10-20で出荷)。on.leftはfrom側の解決済み物理マテリアル名(view chain は事前解決)と完全一致、on.rightはjoin.with文字列と完全一致を要求します。エラーにはside("left"または"right")、received_value、expected_prefix、hintを含むdetailsが乗ります。2026-05-11にもそのまま引き継がれます。
変更(2025-10-20 からの破壊的変更):
- 🔄
calcセマンティクス:material.columnが列の宣言。2025-10-20では fetch + preserve を確実にトリガーする宣言サイトはfrom側だけでした。2026-05-11からはルールが対称化され、仕様が統一されます:calc式の中のmaterial.columnの出現そのものが「Executor がこの列を fetch する」という宣言であり、それが join のどちら側にあるかは問いません。 出力は依然としてkeep列とcalcキーのみで、calcの入力列は merge を通り抜けるけれども最終結果からは取り除かれます(GROUP BY = keepセマンティクスが保たれる)。
2025-10-20 からの移行:
- 動いていたクエリは引き続き正しいです:
from側 calc 参照の動きは同一です。クライアントの変更は不要。 - 以前 サイレントに 0 行を返していた
join側列をcalcで参照していたクエリは、変更なしで正しい集計を返すようになります。再実行してください。 calcから見えるようにするためだけに join 側列をkeepに入れていた回避策は、keepから外せます。残しても合法ですが GROUP BY の粒度が変わるため、本来は不要です。- 列名の typo や
from/join.withに登場しないマテリアル参照など、無効なcalc参照は、以前サイレントに 0 行を返していたものが、いまはE_CALC_COLUMN_UNRESOLVEDでバリデーション時に失敗します。参照を修正するか削除してください。 /guideのfeatures.calc_join_symmetricフラグで、サーバーが新しい対称ルールで動いているかを判定できます。存在しないかfalseの場合は「旧挙動 — join 側 calc 参照に依存する前に列の配置を再確認」扱いにしてください。
既知の制限(引き継ぎ事項、本 bump では意図的にスコープ外):
- 🚧 view chain × calc 対称化はスコープ外です。
from[0]が事前定義の view を参照する場合(ビューチェイニング)、バリデータはそのビューに対するE_CALC_COLUMN_UNRESOLVEDチェックをスキップし、Executor は calc の preserve を旧 Material runtime 経路にフォールバックします。実マテリアル名プレフィックスは Material runtime 経由で引き続き解決されますが、calc内の素の view 名プレフィックス(<from_view>.column)はまだ preserve できません。将来課題として追跡しており、本バージョン bump のブロッカーには意図的にしていません。
これがアップデートではなくバージョン bump である理由:
- この修正は、バリデータが妥当と判定していたクエリ に対する観測可能な実行セマンティクスを変えています。新しいセマンティクスはおそらく「すべてのクライアントがずっとそう意図していたもの」でもありますが、旧挙動に依存していたもの(例: silent-zero バグを
keepに列を追加して回避していた連携)は厳密には別の契約で動くことになります。バージョン管理ポリシーに従い、これはアップデートではなくバージョン bump 扱いです。
2026-05-11 より前の履歴(2025-10-20 から文脈のため引き継ぎ)
2026-04-29 — api_update: 2026-04-29 — materials.supports_all フラグ
追加:
- ✅
materials.{name}.supports_all: true | falseをmaterials.yamlに追加 — すべてのマテリアルが、tracking_id: "all"(夜間バッチで生成される全サイト集約)でクエリできるかどうかを宣言するようになりました。現時点でtrueはallpv,click_event,datalayer_event,events_template、falseはgsc,goal_x,page_version,ga4_*です。AI クライアントや管理画面 UI は、特定のマテリアルに対して "全サイト" を tracking_id の選択肢として提示する前に、このフラグを必ず参照してください。 - ✅
features.materials_supports_allを/guideで返すようになりました — クライアントはこの機能フラグを確認することで、新フラグの可用性を検出できます。旧バージョンのサーバーは個別マテリアルのsupports_allを省略する可能性があります。フラグ非存在時は「不明 — クエリを投げてエラーで判定する」扱いにしてください。Since: 2026-04-29 - ✅
ai/materials.yamlとai/qal-validation.yamlを qa-labo ソースと同期 — 今回のアップデートだけでなく、直前の 2026-04-17 アップデートぶんも反映しました。AI に配信される YAML が、2026-04-17 で追加されたprev_page_id/next_page_id/prev_url/prev_title/next_url/next_titleカラムとallpv_prev_next_page機能フラグを反映するようになっています。人間向けのmaterials/allpv.mdと/guideリファレンス例はすでに正しい状態でしたが、AI 向け YAML だけが追従できていませんでした。
このアップデートが非破壊である理由:
supports_allフラグは純粋な追加メタデータです。既存のクエリ —supports_all: falseのマテリアルにtracking_id: "all"を渡すクエリも含めて — は従前と全く同じ動作になります(従来どおりエラーまたは空結果を返します)。- qa-labo ランタイムは引き続き
tracking_idのセマンティクスを強制します。本フラグはあくまで既存の振る舞いを文書化するだけなので、AI クライアントはクエリを投げる前に判定できるようになります。
2026-04-17 — api_update: 2026-04-17 — allpv ページ遷移カラム
追加:
- ✅
allpv.prev_page_id/allpv.next_page_id— 同一セッション内で各ページビューの直前・直後に閲覧されたページを記録する新しい物理カラム (uint32) です。ランディング PV はprev_page_id = 0、離脱 PV はnext_page_id = 0になります。これらの値でフィルターすれば、1つの QAL クエリでランディング PV や離脱 PV を抽出できます。 - ✅
allpv.prev_url/allpv.prev_title/allpv.next_url/allpv.next_title—prev_page_id/next_page_idからqa_pagesマスターテーブル経由で解決される仮想カラムです。keepに含めれば、前後ページの人間が読める URL やタイトルを取得できます。 - ✅
features.allpv_prev_next_pageが/guideで返されるようになりました — クライアントはこの機能フラグを確認することで、新カラムの可用性を検出できます。Since: 2026-04-17
このアップデートが非破壊である理由:
- すべての新カラムは追加のみです。
prev_page_id/next_page_idを参照しない既存のクエリにはまったく影響しません。 - 新しい物理カラムは
nullable: true, default: 0を使用しているため、このアップデート以前の日付範囲では、エラーではなく0(遷移データなし)が返ります。
2026-04-14 — api_update: 2026-04-14 — 開発者マニュアル再構成 + features_detail + since
追加:
- ✅
/guideがfeatures_detailを返すように — 機能名をキーとする、エントリごとに{ enabled, since }形式を持つリッチなマップ。既存のフラットなfeaturesマップも射影として保持されているので、古いクライアントはそのまま動きます。新しい AI クライアントはfeatures_detailを優先し、各機能のsinceをサーバーのapi_updateと比較して可用性を判定してください。 - ✅
qal-validation.yamlの機能ごとのsince— 検証マニフェストのfeatures:下の各エントリに、enabled: trueのときsince: YYYY-MM-DDタグが付きました。/guideエンドポイントはここから射影しています。 - ✅
materials-manifest.yamlのトップレベルversion/update— と、個別のマテリアル・フィールドへのオプショナルなsince:タグ。純粋な追加で、既存の消費者には影響しません。 - ✅ 新しい
ai/サブディレクトリ をdeveloper-manual/api/2026-05-11/以下に追加。簡潔な AI 向け指示 (README.md) と2本の機械可読 YAML 仕様書 (materials.yaml,qal-validation.yaml) を含みます。/guideエンドポイントはレガシーなフラット markdown の代わりにこのサブディレクトリを配信するようになったので、MCP / LLM クライアントは必要な内容だけを受け取ります — 人間向けの冗長な散文は含まれません。
変更:
- 🔄 開発者マニュアルの再編成。
concepts/,materials/,reference/,ai/のサブディレクトリに再構成しました。トップレベルの入口は、従来の curl 先行のクイックスタートではなく 「AI と使いはじめる」 という枠組みになりました。レガシーなフラットファイル (qal.md,qal-validation.md,materials.md,endpoints.md) はこの構造に置き換わる形で削除されました。 - 🔄 各マテリアルは手作りの サンプル表 つきの専用ページを持つようになり、データの粒度が一目で分かります。サンプル表は3つの ID カラム (
page_id,session_id,pv_id) だけを表示します — ID の全集合とスキーマはai/materials.yamlが正本です。 - 🔄
/guideのドキュメントコンテンツは AI 向けに最適化されました。 以前このエンドポイントは人間向けの markdown ファイル4つ (index.md,endpoints.md,materials.md,qal.md) を fetch していましたが、今は簡潔なREADME.mdと2本の YAML 仕様書を fetch します。人間向けのページは引き続き docs.qazero.com に残しています。
このアップデートが非破壊である理由:
- レガシーなフラット
featuresマップは/guideレスポンスで変わらず保持されています。 version,api_update,features,sites, あるいはdocumentation.sectionsの存在を読んでいる既存クライアントコードはそのまま動きます。documentation.sectionsの 内容 は変わりましたが、(AI クライアントのように) pass-through として扱っているクライアントには影響ありません。- QAL クエリの形は何も変わっていません。既存のマテリアルやカラムが削除・リネームされたものはありません。
2026-04-13 — api_update: 2026-04-13 — Documentation v1.2.0
追加:
- ✅ QAL
make.sort— ビュー単位の行ソートとトップ N 抽出。make内のビューにsort: { by, order, top }を置くことで、filter/join/keep/calcの後にそのビューの出力をソートします。byは修飾あり(allpv.url)でも修飾なし(pageviews)でも指定でき、orderはasc/desc、topは省略可能な行数キャップです。QAL とは何か? コンセプトページと、正本のqal-validation.yamlを参照。 - ✅ 本アップデートを導入したサーバーでは
/guideのfeatures.sortがtrueを返すようになりました。クライアントは機能の可用性をハードコードせず、この値を参照して検出してください。
訂正:
- 🔧 ソートは意図的に ビュー単位であり、
result単位ではありません。result.sortキーは存在しません。1 つの QAL クエリで複数のチェインされたビューを要求できる以上、各ビューが自分の順序を所有するのが自然です。 - 🔧 本日時点の
resultホワイトリストはちょうどuse/limit/count_onlyです。result.sample/result.include_count/result.returnは 現在受理されません(以前は「バリデーターは受理するが no-op」と記載していましたが、その記述は廃止されました)。
2026-04-11 — api_update: 2026-04-11 — Documentation v1.1.2
ランタイム:
- ✅
/guideがapi_updateフィールドと、filter、join、calc、view_chaining、sort、sample、include_count、return_file、return_csv、return_parquetをキーとするfeaturesマップを返すようになりました。これが実行時状態の正本であり、クライアント(AI エージェントを含む)は機能の可用性をハードコードせず、featuresを参照してください。 - ✅ プラグイン定数
QAHM_API_VERSIONとQAHM_API_UPDATEを導入し、これらを使って guide レスポンスを生成するようになりました。
訂正(ドキュメントのみ。v1.1.1 から持ち越し):
- 🔧
result.sortはE_RESULT_FORBIDDEN_KEYとして拒否されます。result.sample/result.include_countはバリデーションを通過しますが no-op です。サンプル、機能表、バリデーションマニフェストは前リビジョンで更新済みで、引き続きその内容が正です。
2026-04-10 — api_update: 2026-04-10 — Documentation v1.1.0
追加:
- ✅ QAL
filter(フラット形式、eq/neq/gt/gte/lt/lte/in/contains/prefix/between) - ✅ QAL
join(ビューごとに 1 つの等結合(equi-join)、id カラムのみ) - ✅ QAL
calc集計(ホワイトリスト関数:COUNT、COUNTUNIQUE、SUM、AVERAGE、MIN、MAX) - ✅ ビューチェイニング —
fromで同じmakeブロック内で先に定義されたビューを参照可能 - ✅ M:N 結合のフィルター必須化(
E_JOIN_FILTER_REQUIRED)をドキュメント化 - ✅ 新しいマテリアル:
goal_1..goal_N、ga4_age_gender、ga4_country、ga4_region、page_version、click_event、datalayer_event、events.{name} - ✅
allpvの行動カラム(depth_position、deep_read、stop_max_sec、stop_max_pos、exit_pos、is_submit、dead_click_image_count、irritation_click_count、scroll_back_count、content_skip_count、exploration_count) - ✅
allpvのページタイプ判定フラグ(is_article、is_product、is_form、...)および仮想ゴールカラム(is_goal_1..is_goal_10) - ✅
gscのカラム DB スキーマ(clicks、impressions、position_x100)と仮想カラムctr、position、position_weighted
変更:
- 🔄 QAL バリデーションマニフェストを現行の実行時ルール(filter/join/calc 機能を有効化)に合わせて整合
- 🔄 マテリアルリファレンスを再構成し、
/guide由来の全マテリアルをカタログ化
これらの機能は 2026 年 4 月までに qa-labo にマージされた成果を反映しています。何が作られたか、なぜ作られたかの背景は Developer Blog をご覧ください。
2025-10-06 - Documentation v1.0.0
追加:
- ✅ すべての QAL クエリで
tracking_idフィールドを必須化 - ✅
/guideエンドポイントが包括的なサーバー情報を返すように - ✅
/guideレスポンスにplugin_versionフィールドを追加 - ✅
/guideレスポンスにサイト固有のマテリアルとゴールを追加 - ✅ システム上限情報を追加
- ✅ 互換性マトリクスのドキュメントを追加
削除:
- ❌
/materialsエンドポイント(/guideに置き換え) - ❌
allpvマテリアルからゴール関連フィールドを削除 - ❌ 複数の廃止予定フィールド:
session_id、tracking_domain、path_prefix、utm_content、utm_term、version_id
変更:
- 🔄
country→country_code(ISO 3166-1 alpha-2) - 🔄 QAL のバージョン指定をクエリボディから URL パラメーターに移動
プラグインバージョン:
- 🔌 QA Platform Plugin 3.0.0.0+ が必要
2025-10-20 - 初回リリース
リリース内容:
fromとkeep操作を備えた基本的な QAL- 2 つのマテリアル:
allpvとgsc - シンプルな result オプション:
limitとcount_only