Manual:Extensions/ja

From MediaWiki.org

Jump to: navigation, search

拡張機能(エクステンション)は新しい機能を追加するもしくはメインのMediaWikiコアの機能を強化するPHPコードの集まりです。拡張機能はMediaWikiの主要なアドバンテージの一つです。それらによってwiki管理者とwikiエンドユーザの要求にMediaWikiを適用させることができます。

拡張機能を使用するためのゴールは次の内容によります:

あらゆる種類の既に書かれた拡張機能を見るためにCategory:Extensions by categoryをブラウズすることが出来ます。これらの拡張機能をインストールもしくは独自のものを書くための情報については、下記をご覧下さい。

Contents

[edit] 拡張機能をインストールする

MediaWikiはインストールが終わった直後に既に拡張機能を受け入れる用意が出来ています。拡張機能を追加するために以下のステップに従います:

  1. 始める前に
    いくつかの拡張機能はパッチのインストールが要求されます。それらの多くはunixコマンドの使用によるインストールのために設計された手引きを提供しています。拡張機能ヘルプページにリスト表示されたこれらのコマンドを入力するためにシェルアクセス(SSH)の権限が要求されることもあります。
  2. ExtensionFunctions.phpをダウンロードしてインストールします。
    拡張機能の中には、とりわけ新しいものでは、ExtensionFunctions.phpと呼ばれるヘルパーファイルを要求するものがあります。ExtensionFunctionsはMediaWikiのコアコードから離れて拡張機能をモジュール化することを可能にする一連の機能を含みます。このファイルをインストールするベストな方法はSVNから現在のバージョンをダウンロードすることです。このファイルはいつでもここで見ることが出来ます。一旦ダウンロードすると、ExtensionFunctions.phpファイルをMediaWikiインストールの$IP/extensions/サブディレクトリにコピーします。
  3. 拡張機能をダウンロードする
    拡張機能は通常モジュールパッケージとして配布されます。それらは一般的に$IP/extensions/の独自のサブディレクトリに入ります。MediaWiki.org上にある拡張機能のリストはextension matrixで利用可能で、WikimediaのSVNリポジトリに保存された拡張機能のリストはsvn:trunk/extensionsにあります。
  4. 拡張機能をインストールする
    一般的に、LocalSettings.phpファイルの終わりに、(PHPのコードの終わりの区切り文字、"?>"の上に)、次の行を追加します:
    require_once "$IP/extensions/extension_name/extension_name.php";
    
    この行はPHPインタプリタに拡張機能ファイルを読み込むことを強制し、その結果MediaWikiにアクセス可能にします。
    Note Note: このインストールの手続きは大抵の拡張機能のためには十分ですが、拡張機能の中には異なったインストール手続きを要求するものがあります。詳細については拡張機能のドキュメントを確認して下さい。
    Caution! Caution: 拡張機能の宣言をLocalSettings.phpファイルの範囲内の場所で設定することができる一方で、require_once( "includes/DefaultSettings.php" );の行の前に拡張機能の宣言を決して設置してはなりません。そのようにすると拡張機能セットアップ関数の配列が空になり、拡張機能がインストールされてない状態になり、それを修正するまでwikiにアクセスできなくなるかもしれません!

[edit] 拡張機能を書く

概念としては、それぞれの拡張機能は3つの部分から構成されます:

  • セットアップ
  • 実行
  • 国際化

[edit] 国際組織の拡張機能

国際組織の拡張機能は経時変化してきました。初期の拡張機能はシンプルな単独のファイルで、名前は拡張機能によって名付けられ、今でもこのような拡張機能の例を見つけることが出来ます。MediaWikiが成熟する一方でこのような組織は軽視されてきました。代わりに、それぞれの拡張機能は3つの部分に対応した一つもしくは2つのファイルを含む一つのディレクトリに設置されます:セットアップ、実行と国際化です。

  • myextension/myextension.php - セットアップの説明書を保存します。(注意: 拡張機能の中にはこのファイルをmyextension/myextension.setup.phpと名付けるものがあります)
  • myextension/myextension.body.php - シンプルな拡張機能のための実行コードを保存します。複雑な拡張機能は複数のphpファイルを要求することがあり、実装コードはサブディレクトリ、myextension/includesに設置されることがあります。例についてはSemantic MediaWikiをご覧下さい
  • myextension/myextension.i18n.php - 拡張機能のために国際化情報を保存します。

[edit] セットアップの説明を書く

セットアップの部分を書く目標はセットアップを強化することで、ユーザがLocalSettings.phpファイルにセットアップファイルを含む作業以外が必要ないようにすることです。例は次の通りです:

require_once("$IP/extensions/''myextension''/''myextension''.php);

ユーザが設定出来るようにする場合、設定パラメータを定義してドキュメント化する必要があり、ユーザは次のようにセットアップしなければなりません(XXXをmyextensionで置き換えます):

$wgXXXConfigThis=1;
$wgXXXConfigThat=false;
require_once("$IP/extensions/XXX/XXX.php);

簡単にするためにセットアップファイルはいくつかのタスクを成し遂げなければなりません:

  • 拡張機能で定義したコンフィギュレーション変数を定義かつ/もしくは検証します
  • オートロードするために拡張機能によって使用されるクラスを準備します
  • 即座になされるべきセットアップ部分とMediaWikiコアが初期化して設定するまで延期される必要があるものを決定します
  • 拡張機能を使用して特別ページカスタムのXMLタグパーサ関数、と変数を登録します
  • 拡張機能によって必要とされる追加のフックを定義します
  • 拡張機能のために国際化とローカライゼーション(現地化)をセットアップします

[edit] ユーザが拡張機能を設定できるようにする

ユーザが拡張機能を設定出来るようにしたい場合、コンフィギュレーション変数を一つ以上提供する必要があります。これらの変数の名前をユニークなものにすることはよいアイディアです。それらはMediaWikiの命名規約にも従うべきです(例えば、グローバル変数は$wgで始まります)。

例えば、 "Very silly extension that does nothing"(何もしないとても馬鹿げた拡張機能)と命名したら、 すべてのコンフィギュレーション変数を$wgVsetdnもしくは$wgVSETDNで命名したいと思うかもしれません。MediaWikiコアがこの方法で変数を始めない限り、何を選択するのかは本当は問題ではありませんし、 この方法で変数を始める公開された拡張機能がないことをチェックすることはもっともな仕事です。あなたの拡張機能と他の拡張機能の間に変数名の重複があることをユーザは善意に受け取りません。

コンフィギュレーション変数のドキュメントをインストールノートに書いておくこともよいアイディアです。

[edit] オートロードのためにクラスを準備する

拡張機能を実行するクラスを使用する場合、MediaWikiはクラスがどこにあるのかを見つけ出す簡易化されたメカニズムを提供します。このメカニズムのおかげで、多くの場合__autoload($classname) を書く必要がありません。

MediaWikiのオートロードメカニズムを使用するためには、エントリを$wgAutoloadClasses変数に追加します。それぞれのエントリのキーはクラス名です; 値はクラスの定義を保存するファイルです。シンプルな一つのクラスの拡張機能のために、オートローディングセクションが次のような内容を探すことが出来るようにクラスは拡張機能と同じ名前が与えられます(拡張機能の名前はFoobarです):

$wgAutoloadClasses['Foobar'] = dirname(__FILE__) . '/Foobar.body.php';

.

複数のクラスを持つ複雑な拡張機能のために、オートローディングセクションは次のように探します:

$wgFoobarIncludes = dirname(__FILE__) . '/includes/';
$wgAutoloadClasses['SpecialFoobar'] 
  = $wgFoobarIncludes . 'SpecialFoobar.php'; #Foobar特別ページを実装する
$wgAutoloadClasses['FoobarTag']
  = $wgFoobarIncludes . 'FoobarTag.php';   #<foobar>タグを実装する

[edit] MediaWikiで機能を登録する

例えば、MediaWikiはインストールしたすべての拡張機能を<code>Special:Version</code>ページでリスト表示します。拡張機能がこのページにもリスト表示されていることを確認することはよい習慣です。これをするために、拡張機能で使用される特別ページカスタムのXMLタグパーサ関数、と変数のそれぞれのためにエントリーを$wgExtensionCreditsに追加します。エントリーは次のようなものです:

   $wgExtensionCredits['validextensionclass'][] = array(
       'name' => 'Example',
       'author' =>'John Doe', 
       'url' => 'http://www.mediawiki.org/wiki/User:JDoe', 
       'description' => 'This Extension is an example and performs no discernable function'
       );

Manual:$wgExtensionCreditで説明されているように、validextensionclassspecialpage, parserhook, variable, otherの一つでなければなりません。

上記の登録に加えて、機能をMediaWikiに"フック(hook)"しなければなりません。上記の作業はSpecial:Versionページをセットアップしただけです。詳細についてはそれぞれのタイプの拡張機能のドキュメントをご覧下さい:

[edit] セットアップを延期する

MediaWikiのセットアッププロセスにおいてLocalSettings.phpは初期の段階で動作をしますが、この時点では多くのことが十分に設定されていません。このことがある種のセットアップ活動のための問題になる可能性があります。この問題を解決するために、MediaWikiではセットアップアクションの動作タイミングを選択できるようにしています。それらをすぐに動作させたい場合、セットアップファイルにコマンドを書き込むか後でコアのソフトウェアの設定が終了した後に動作させることが出来ます。

セットアップアクションを遅延するために、セットアップファイルは以下の2つの内容を含まなければなりません:

PHPコードは以下のようなものになります:

$wgExtensionFunctions[]='wfFoobarSetup';
function wfFoobarSetup() {
   #セットアップの後でする必要があるものをする
}

[edit] 実行部分を書く

実装部分を書くための技術は拡張機能の目的次第です:

  • wikiマークアップ: wikiマークアップを拡張する拡張機能は大抵カスタムXMLタグパーサ関数変数を定義して実行するコードを含みます。拡張機能でこれらの機能をどのように実装するのかについて詳細な内容は前の文のリンク先で見ることが出来ます。
  • レポーティングとアドミニストレーション: 拡張機能にレポートおよび管理機能を追加することは通常特別ページを追加することによってなされます。もっと詳細な情報を追加するために、Manual:Special pages/jaをご覧下さい。
  • 記事の自動化と統合: MediaWikiと背景のデータベースもしくは統合機能のための記事のチェック間の統合を改善する拡張機能はたいていの場合記事の作成、編集、リネームと削除のプロセスに影響を与える多くのフックの一つに機能を追加します。フックとそれらにコードを追加する方法についてもっと詳細な情報は、Manual:Hooks/jaをご覧下さい。
  • ルックアンドフィール: 新しいルックアンドフィールをMediaWikiに提供する拡張機能はスキンに搭載されます。独自のスキンを書くための詳細な情報については、Manual:Skins/jaManual:Skinning/jaをご覧下さい。
  • セキュリティ: ある種のユーザを制限する拡張機能はMediaWiki独自のパーミッションシステムと統合すべきです。システムについてもっと学ぶためには、Manual:Preventing access/jaをご覧下さい。拡張機能の中にはMediaWikiに外部の認証メカニズムを利用させるものもあります。詳細な情報については、AuthPlugin/jaをご覧下さい。加えて、拡張機能がある種の記事の読者数を制限しようとする場合、Security_issues_with_authorization_extensions/jaをチェックして下さい。


Extensions FAQ/jaDeveloper hub/jaもご覧下さい。

[edit] 拡張機能を国際化する

多言語の読者を持つwiki上で拡張機能を使用したい場合、国際化サポートを拡張機能に追加する必要があります。幸いにもこの作業は比較的簡単です。

  1. ユーザに表示するテキストのために、メッセージを定義します。MediaWikiはパラメータ化したメッセージと 実行時に生成される情報にメッセージが依存する時に使用される機能をサポートします。それぞれのメッセージを小文字のメッセージidに割り当てます。
  2. セットアップとコードの実装において、それぞれのリテラルの使用をwfMsg($msgID, $param1, $param2, ...)へのコールで置き換えます。
  3. メッセージ定義を国際化ファイル(myextension.i18n.php) に保存します。これは通常、言語とメッセージidをそれぞれの文字列に位置付けをする配列をセットアップすることで行われますそれぞれのメッセージidは小文字です。最小のファイルは次のようになります:
    <?php
    $allMessages 
      = array('en' => array('sillysentence' 
                            => 'This sentence says nothing'
                            , 'answertoeverything' 
                            => 'Forty-two')
    	  , 'fr' => array('sillysentence' 
                              => 'Une phrase absurde'
                              , 'answertoeverything' 
                              => 'quarante-deux')
    );
    ?>
    
  4. セットアップに手順において、それぞれのメッセージを登録します。これは通常は($allMessagesを定義するために)ローカライゼーションファイルのインクルードによってなされます。それぞれのメッセージを通したルーピングと$wgMessageCache->addMesssages($aMessages, $lang)をそれに追加します:
    require( dirname( __FILE__ ) . '/XXX.i18n.php' );
    foreach ( $allMessages as $lang => $langMessages ) {
        $wgMessageCache->addMessages( $langMessages, $lang );
    }
    


もっと詳細な情報については、下記を参照して下さい:

  • Internationalisation/ja - MediaWiki国際化エンジンを検討します。 とりわけローカライズできる機能のリストとローカライゼーションに関連したMediaWikiソースコードのクラスのレビューがあります。
  • Localization checks - ローカライズしたメッセージの共通の問題を検討します。

[edit] 拡張機能のテクニック

拡張機能は効果を獲得するために使用されるプログラミングテクニックに基づいて分類することが出来ます。 多くの拡張機能はこれらのテクニックを1つ以上使用します:

  • サブクラスにする: MediaWikiはある種の拡張機能に対してベースクラスによって提供されたMediaWikiのサブクラスとして実装されることを期待します:
    • 特別ページ - SpecialPageクラスのサブクラスは現在のシステム状態、ユーザ入力のパラメータとデータベースクエリの組み合わせによってページの内容をダイナックに構築するために使用されます。レポートとデータエントリフォームの両方が生成されます。レポートとアドミニストレーションの両方のために使用されます。
    • スキン - スキンはSkinTemplateクラスのサブクラスによる出力ページを変更によってMediaWikiのMediaWikiのルックアンドフィールを変更します。
  • フック: MediaWikiの処理の範囲内のキーポイントでカスタムのPHPコードを追加するためのテクニックです。それらはMediaWikiのパーサ、ローカライゼーションエンジン、拡張機能マネジメントシステムとページメンテナンスシステムによって広く使用されます。
  • タグ拡張機能関連 - XMLスタイルタグはHTMLコードを出力するphp関数と関連づけられています。タグ内部でテキストをフォーマットするためにあなた自身を制限する必要はありません。表示する必要さえありません。多くのタグ拡張機能はテキストを埋め込みのgoogleオブジェクト、データエントリフォーム、RSSフィード、選択されたwiki記事からの抜粋などを埋め込みするHTMLの生成を導くパラメータとしてとして使用します。
  • マジックワード: wikiテキストの文字列を関数と関連を持つ単独のidにマッピングするための技術です。変数パーサ機能の両方ともこの技術を使用します。idに位置付けされたすべてのテキストは関数の返り値で置き換えられます。文字列とid間のマッピングはLanguageGetMagicフックに付属したそれぞれの関数に渡された配列に保存されます。idの解釈はいくぶんか複雑なプロセスです - 詳細な情報についてはマジックワードをご覧下さい。
    • 変数 - 変数の中には誤称があるものが少々あります。テンプレートのようなwikiテキストだが、パラメータを持たず、決め打ちされた値が割り当てられます。{{PAGENAME}}もしくは{{SITENAME}}といった標準的なwikiマークアップは変数の例です。それらは値のソースから名前を取得します: PHP変数もしくは変数に割り当てられる可能性のあるものです。例として、文字列、数、式、もしくは関数の返り値です。
    • パーサ関数 - {{functionname: argument 1 | argument 2 | argument 3...}}です。

タグ式と同様に、パーサ関数は引数と処理して返り値を返します、タグ式とは異なり、パーサ関数の結果はwikitextです。

  • Manual:Ajax/ja 拡張機能でAJAXを使用できます。 これによってページをリロードすることなくサーバサイドの拡張機能コードとあなたのJavaScriptコードをインタラクトさせることができます。

[edit] 関連項目