Manual:Extensions/ja

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

エクステンションを使用するためのゴールは次の内容によります:


 * 記事を書くために変数、パーサ関数、とカスタムのXMLタグを通してwikiマークアップを拡張します - 例はCategory:Parser function extensionsとCategory:Parser extensionsをご覧下さい.
 * 特別ページを通して新しいレポーティングと運営上の機能を追加します - 例はCategory:Special page extensionsをご覧下さい.
 * skinsと様々なユーザインターフェイスエクステンション経由でMediaWikiのルックアンドフィールを変更します - 例はGallery of user stylesとCategory:User interface extensionsをご覧下さい.
 * カスタム認証メカニズムを使用してセキュリティを強化します - 例は Category:Authentication and Authorization Extensionsをご覧下さい.

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

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


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

エクステンションを書く
概念としては、それぞれのエクステンションは3つの部分から構成されます:


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

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


 * myextension/myextension.php - セットアップの説明書を保存します. (注意: エクステンションの中にはこのファイルを と名付けるものがあります)


 * myextension/myextension.body.php - シンプルなエクステンションのための実行コードを保存します. 複雑なエクステンションは複数のphpファイルを要求することがあり、実装コードはサブディレクトリ、 に設置されることがあります. 例についてはSemantic MediaWikiをご覧下さい


 * myextension/myextension.i18n.php - エクステンションのために国際化情報を保存します.

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

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

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


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

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

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

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

オートロードのためにクラスを準備する
エクステンションを実行するクラスを使用する場合、MediaWikiはクラスがどこにあるのかを見つけ出す簡易化されたメカニズムを提供します. このメカニズムのおかげで、多くの場合 を書く必要がありません.

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

.

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

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

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

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


 * Manual:Special pages/ja
 * Manual:Variables/ja
 * Manual:Parser functions/ja
 * Manual:Tag extensions/ja

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

セットアップアクションを遅延するために、セットアップファイルは以下の2つの内容を含まなければなりません:
 * セットアップ関数の定義
 * 関数を$wgExtensionFunctions配列に割り当てること

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

実行部分を書く
実装部分を書くための技術はエクステンションの目的次第です:


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

Extensions FAQ/ja、Developer hub/jaもご覧下さい.

エクステンションを国際化する
多言語の読者を持つwiki上でエクステンションを使用したい場合、国際化サポートをエクステンションに追加する必要があります. 幸いにもこの作業は比較的簡単です.

 ユーザに表示するテキストのために、メッセージを定義します. MediaWikiはパラメータ化したメッセージと 実行時に生成される情報にメッセージが依存する時に使用される機能をサポートします. それぞれのメッセージを小文字のメッセージidに割り当てます.  セットアップとコードの実装において、それぞれのリテラルの使用を へのコールで置き換えます.  メッセージ定義を国際化ファイル(myextension.i18n.php) に保存します. これは通常、言語とメッセージidをそれぞれの文字列に位置付けをする配列をセットアップすることで行われますそれぞれのメッセージidは小文字です. 最小のファイルは次のようになります:

 セットアップに手順において、それぞれのメッセージを登録します. これは通常は($allMessagesを定義するために)ローカライゼーションファイルのインクルードによってなされます. それぞれのメッセージを通したルーピングと をそれに追加します:  

もっと詳細な情報については、下記を参照して下さい:
 * Internationalisation/ja - MediaWiki国際化エンジンを検討します. とりわけローカライズできる機能のリストとローカライゼーションに関連したMediaWikiソースコードのクラスのレビューがあります.
 * Localization checks - ローカライズしたメッセージの共通の問題を検討します.

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

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

関連項目

 * Extension Matrix
 * Category:Extensions/ja
 * Template:Extension/ja
 * Manual:Parser functions/ja
 * Manual:Special pages/ja
 * Manual:Tag extensions/ja
 * Project:Extension requests
 * m:Category:MediaWiki extensions - MediaWiki.org.に移行中です