Gutenbergのパッケージのバージョン取得API
Gutenbergは下位互換性はあまり考慮されておらず、破壊的な変更が度々発生します。
また、それぞれの環境で使用されているGutenbergや使用されているパッケージのバージョンを取得する方法がありません。
下記の記事で書いてあるように一応頑張れば可能ですが、開発者が下位互換性を考慮するのはかなり大変です。
これを解決するために、Gutenbergや利用されているパッケージのバージョンを取得するためのAPIを作成しました。
バージョン取得API
このリポジトリは
- Gutenberg のバージョンごとに使用されているパッケージ及びそれらのバージョン
- WP Core のバージョンごとに使用されているパッケージ及びそれらのバージョン
をそれぞれ GitHub から取得しAPI化します。
TravisCIのクーロンを使用して毎日チェックを行い、更新があれば自動でAPIの情報も更新されます。
サマリー取得API
それぞれの最新タグ(バージョン)の情報や最終更新に関する情報を返します。
エンドポイント
取得例
{
"gutenberg": {
"tag": "6.1.1",
"url": "https://api.wp-framework.dev/api/v1/gutenberg/tags/6.1.1.json"
},
"wp": {
"tag": "5.2.2",
"url": "https://api.wp-framework.dev/api/v1/wp-core/tags/5.2.2.json"
},
"last_updated": {
"date": "13 July 2019 17:21:41 UTC",
"url": "https://travis-ci.com/technote-space/gutenberg-package-versions/builds/119035815"
}
}
タグ一覧API
有効なタグ(バージョン)の一覧を返します。
エンドポイント
取得例
[
"5.0.0",
"5.0.1",
"5.0.2",
"5.0.3",
"5.0.4",
"5.0.5",
"5.1.0",
"5.1.1",
"5.2.0",
"5.2.1",
"5.2.2"
]
バージョン取得API(一部取得)
指定したタグ(バージョン)のパッケージの情報を返します。
エンドポイント
https://api.wp-framework.dev/api/v1/gutenberg/tags/${tag}.json
https://api.wp-framework.dev/api/v1/wp-core/tags/${tag}.json
取得例
{
"wp-a11y": "2.0.2",
"wp-annotations": "1.0.8",
"wp-api-fetch": "2.2.8",
"wp-autop": "2.0.2",
"wp-blob": "2.1.0",
"wp-block-editor": "1.0.0-alpha.0",
"wp-block-library": "2.2.16",
"wp-block-serialization-default-parser": "2.0.5",
"wp-block-serialization-spec-parser": "2.0.3",
"wp-blocks": "6.0.7",
"wp-components": "7.0.8",
"wp-compose": "3.0.1",
"wp-core-data": "2.0.17",
"wp-data": "4.2.1",
"wp-date": "3.0.1",
"wp-deprecated": "2.0.5",
"wp-dom": "2.0.8",
"wp-dom-ready": "2.0.2",
"wp-editor": "9.0.11",
"wp-edit-post": "3.1.11",
"wp-element": "2.1.9",
"wp-escape-html": "1.0.1",
"wp-format-library": "1.2.14",
"wp-hooks": "2.0.5",
"wp-html-entities": "2.0.4",
"wp-i18n": "3.1.1",
"wp-is-shallow-equal": "1.1.5",
"wp-keycodes": "2.0.6",
"wp-list-reusable-blocks": "1.1.21",
"wp-notices": "1.1.3",
"wp-nux": "3.0.9",
"wp-plugins": "2.0.11",
"wp-priority-queue": "1.0.0-alpha.0",
"wp-redux-routine": "3.0.4",
"wp-rich-text": "3.0.7",
"wp-shortcode": "2.0.2",
"wp-token-list": "1.1.0",
"wp-url": "2.3.3",
"wp-viewport": "2.1.1",
"wp-wordcount": "2.0.3"
}
バージョン取得API(全部取得)
全ての有効なタグ(バージョン)に関してパッケージの情報を返します。
一度に全部の情報が欲しい場合に使用します。
エンドポイント
Composer
Composer から利用することでローカルからデータを利用できます。
composer require technote/gutenberg-package-versions
ヘルパーを利用して情報を取得できます。
<?php
use Technote\GutenbergPackageVersionProvider;
// for Gutenberg
$provider = new GutenbergPackageVersionProvider();
$provider->get_tags(); // tags
$provider->get_versions(); // array of (tag => packages)
$provider->get_versions( '5.2.0' ); // array of (package => version)
$provider->get_package_version( '5.1.0', 'wp-block-editor' ); // false
$provider->get_package_version( '5.2.0', 'wp-block-editor' ); // 1.0.0-alpha.0
$provider->package_exists( '5.1', 'wp-block-editor' ); // false
$provider->package_exists( '5.2.0', 'wp-block-editor' ); // true
$provider->package_exists( 'v5.2', 'wp-block-editor' ); // true
// for WP Core
$provider = new GutenbergPackageVersionProvider( 'wp' );
$provider->get_tags(); // tags
$provider->get_versions(); // array of (tag => packages)
$provider->get_versions( '5.2.0' ); // array of (package => version)
$provider->get_package_version( '5.1.0', 'wp-block-editor' ); // false
$provider->get_package_version( '5.2.0', 'wp-block-editor' ); // 2.0.1
$provider->package_exists( '5.1', 'wp-block-editor' ); // false
$provider->package_exists( '5.2.0', 'wp-block-editor' ); // true
$provider->package_exists( 'v5.2', 'wp-block-editor' ); // true
ラッパー
前述のAPIを使用することで、互換性を考慮できます。
- Gutenbergプラグインが有効かどうかを取得
- 有効な場合はそのバージョンを取得
- 有効でない場合はWordPressのバージョンを取得
- 取得したバージョンのパッケージ情報をAPIから取得
- パッケージのバージョンごとに処理を書く
ただ、APIから情報を取得したり、取得した情報を利用するための手段を用意したりするのは面倒なので、これらの処理をまとめたものを用意しています。
Makefile で 動的にコマンドを変える方法