Manual:拡張機能の登録/移行
拡張機能開発者向けの移行手順
名前空間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 を加えたものでなければならないことを忘れないでください。
スクリプト 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
フィールドを代わりに使用すべきです。
これは短いメモやコメントにのみ使用すべきです。
関連項目
- Manual:Developing extensions#Setup の旧バージョン (2015年5月以前) および
$wgExtensionCredits
において、拡張機能情報を PHP コードおよび変数で宣言する古い方法について説明しています - Extension registration wall of superpowers! — どの拡張機能がまだ変換されていないかの要約情報。
- タスク T98668 — 拡張機能および外装を Git で使用するように変換するための追跡チケット。