Manual:拡張機能の登録/移行

This page is a translated version of the page Manual:Extension registration/Migration and the translation is 100% complete.

拡張機能開発者向けの移行手順

名前空間ID

MediaWikiのバージョン1.30以降では、拡張機能を読み込む前に LocalSettings.php でそれぞれの定数を定義することにより extension.json で定義された名前空間IDをローカルで上書きできます。 例えば、extension.json のファイルで以下の名前空間宣言を行うことを検討してください:

	"namespaces": [
		{
			"id": 1212,
			"constant": "NS_FOO",
			"name": "Foo"
		},
		{
			"id": 1213,
			"constant": "NS_FOO_TALK",
			"name": "Foo_Talk"
		}
	]

これにより、既定で定数 NS_FOO が値 1212 で定義されることになります。 ただし、LocalSettings.php 内で対応する定数を定義することでこれを上書きできます:

define( 'NS_FOO', 6688 );
define( 'NS_FOO_TALK', 6689 );
wfLoadExtension( "Foo" );

これにより、「Foo」名前空間が 1212 ではなく 6688 の ID で登録されます。 名前空間の ID をオーバーライドする際は、すべてのトーク名前空間が奇数の ID を持つ必要があり、トーク名前空間の ID は常に (トークページに紐づく) 対象名前空間の ID に 1 を加えたものでなければならないことを忘れないでください。

extension registration wall of sadness (現在は wall of superpowers) も参照してください。

スクリプト maintenance/convertExtensionToRegistration.php は、PHP エントリー ポイントから JSON メタデータ ファイルへの移行を支援します。 あなたの拡張機能が MediaWiki の古いバージョンをサポートしている場合、それらの古いバージョンのサポートを終了するまで、PHP エントリー ポイント FooBar/FooBar.php を保持すべきです。

コマンド ラインの例:

$ cd core
$ php maintenance/convertExtensionToRegistration.php extensions/MassMessage/MassMessage.php
$ php maintenance/convertExtensionToRegistration.php skins/MonoBook/MonoBook.php --skin

定数や関数を再定義できないというエラーが出た場合、LocalSettings.php から拡張機能をアンインストールする必要があるかもしれません。 アップグレード プロセス中にウィキを壊さないようにするために、PHP エントリ ポイント ファイル (FooBar.php) を以下のようなものに置き換えるべきです。

<?php
if ( function_exists( 'wfLoadExtension' ) ) {
	wfLoadExtension( 'FooBar' );
	// mergeMessageFileList.php が壊れないように i18n グローバルを保持
	$wgMessagesDirs['FooBar'] = __DIR__ . '/i18n';
	$wgExtensionMessagesFiles['FooBarAlias'] = __DIR__ . '/FooBar.alias.php';
	wfWarn(
		'Deprecated PHP entry point used for the FooBar extension. ' .
		'Please use wfLoadExtension() instead, ' .
		'see https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extension_registration for more details.'
	);
	return;
} else {
	die( 'This version of the FooBar extension requires MediaWiki 1.29+' );
}

外装の場合は以下の通り:

<?php
if ( function_exists( 'wfLoadSkin' ) ) {
	wfLoadSkin( 'FooBar' );
	// mergeMessageFileList.php が壊れないように i18n グローバルを保持
	$wgMessagesDirs['FooBar'] = __DIR__ . '/i18n';
	$wgExtensionMessagesFiles['FooBarAlias'] = __DIR__ . '/FooBar.alias.php';
	wfWarn(
		'Deprecated PHP entry point used for the FooBar skin. Please use wfLoadSkin instead, ' .
		'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
	);
	return;
} else {
	die( 'This version of the FooBar skin requires MediaWiki 1.25+' );
}

説明文書の保持

通常、PHP エントリー ポイントには有用な設定の説明文書があり、失われてはなりません。 残念ながら、JSON はコメントをサポートしていません。 設定の説明文書を拡張機能のリポジトリ内の README ファイルに移行することをお勧めします。 また、Extension:MyExtension のページ内で設定に関する解説をすべきです。 extension.json ファイルにも一部の説明文書を直接含められます。 拡張機能の登録では、JSON ファイルのトップレベル構造で '@' から始まるキーを無視するため、JSON ファイルのそれらの部分にコメントを記述できます。 例:

{
	"@note": "This file must be kept in sync with LocalisationUpdate.php",
	"@name": ...

extension.json 形式のバージョン 1 では、config の節内で @note も許可されていましたが、バージョン 2 ではこれは推奨されておらず、サポートされていません。 構成変数の description フィールドを代わりに使用すべきです。

これは短いメモやコメントにのみ使用すべきです。

関連項目