MediaWikiハッカーになる方法
この記事は開発者を対象に、MediaWiki core と MediaWiki 拡張機能の開発に貢献するために欠かせないスキルの習得を支援する目的で執筆されました。
ウィキメディアの開発を始めることはしばしば難しいため、代わりにメンターを付けてくれるウィキメディアプロジェクトで貢献することから始めるのがいいでしょう。メンターなしで行う代替方法としては、good first bugの修正があります。
あなたが既にMediaWikiの使用に慣れ親しんだ経験を積んだ開発者である場合は、代わりに 開発者ハブ を参照してください。
ウィキメディアのコミュニティに参加するその他の方法は、貢献する方法 を参照してください。
概要
MediaWiki は、ウィキペディアとその姉妹プロジェクト群や世界中の数多くのウィキを支えるソフトウェアです。
MediaWikiおよび拡張機能のほとんどはPHPプログラミング言語で書かれています。 対話式のインターフェース要素を提供するためにJavaScriptがクライアントJavaScriptライブラリとしてのjQueryおよびVue.jsと共に使用されています。
一部の補助ツールは他の言語で書かれています。バッチ ファイル、Makefile、Python などがその例です。
MediaWiki は主に LAMP プラットフォーム向けに書かれており[1]、ほとんどの OS で実行可能です。 MediaWiki は主に MySQL または MariaDBデータベース サーバーを使用しています[2]
開発はオープンソーススタイルで行われており[3]、大部分のコミュニケーションはオンライン上で行われています。開発はウィキメディア財団による支援もありますが、ボランティアコミュニティの開発者によるものがかなりの部分を占めています。
- 開発についての議論がPhabricator、メーリング リスト、およびIRC チャンネルで行われています。 メインの開発者メーリング リストは wikitech-l です。 メインの開発者 IRC チャンネルは #mediawiki 接続 と #wikimedia-dev 接続 です。
- ソースコードは Gerrit で保管され、 Git リビジョン管理システムで管理されており、 こちらで閲覧することができます。[4]
- コードレビューは、Gerrit で行われます。こちらで閲覧できます。 パッチを投稿するために Git や Gerrit をセットアップするには、こちらのチュートリアルに従ってください。
- バグ報告、機能リクエスト、およびプロジェクトが Phabricator で整理保存、および調整されており、こちらで閲覧できます。
タスクを探す、もしくは新設
今まで、 MediaWiki プロジェクトのどれかで実際に機能を開発したとかバグ修正をしたことがなくても、始めるからには下調べが重要です。 具体的にいうと次のことを考えましょう。
- Phabricator を検索し、未解決またはすでに処理済みのタスク(文書の種別欄)がないか探ること。 もしないなら、新しく項目を立てます。 ただしごく小さな変更なら、タスクは作りません。
- 指定の機能を展開するには、どのコードを修正するか探してじっくり検討すること。 Phabricator のタスクにコメントして、自分が発見したことで他の人の助けになりそうな点を記入し、変更点の査読を待つ、あるいは展開する人が現れるのを待つこと。
- 調査したコードのどこをどう変更するか理解できるなら、自力でバグ修正する技能があるかどうか、あるいは機能そのものを追加できるかどうか、見きわめます。 タスクが長大もしくは複雑そうな場合には、もう少し難易度が低いタスクに取り組んでみて、少しずつ難し目のタスクへと技能を上げていくと、当初は長大だと判断した規模でも扱えるように努力します。 自力で完結できるという自信がある場合は、あなた自身をそのタスクに割り当てて、作業を始めてください。
開発環境のセットアップ
作業可能な内容を見つけたら、MediaWiki または拡張機能を開発する次のステップは、MediaWiki、データベース、その他の外部機能を実行するための環境を作成し、それらを開発およびテストできるようにすることです。
Linux、Windows、macOS 上で、以下の 3 つのソリューションのいずれかを使用して MediaWiki をインストールおよび開発できます。
Docker
- MediaWiki Docker – Dockerを使用してMediaWikiを実行します。
Docker は、MediaWiki インストレーションをセットアップしたいが、多くの拡張機能をインストールする予定がない場合に適しています。 MediaWiki Docker provides an easy way to spin up containerized MediaWiki environments that you can use for basic testing. If you experience slowness using MediaWiki Docker, a local installation may be a better option.
Docker を数回の簡単なコマンドでセットアップし、MediaWiki、MySQL、ElasticSearch、Memcached、その他のコンテナ間で基本的なオーケストレーション機能を提供する mwcli ツールを試すこともできます。
ローカルインストール
- ローカル開発クイックスタート – PHP と Composer を使用してローカルで MediaWiki を実行します。
ローカル インストールは、Docker を使わずにシンプルな開発環境を迅速に構築したい場合に適したオプションです。 A local installation can help you learn how MediaWiki works and get started as a contributor.
Vagrant
- MediaWiki Vagrant - Vagrantを使って、Linux仮想マシン上で、MediaWikiを実行します。
Vagrant を使用すると、開発可能な MediaWiki インスタンスを起動し、250 を超える拡張機能を追加および開発できます。これらはすべて単一のコマンドで実行できます。
これにより、Docker やローカル インストールで拡張機能を手動で追加する場合と比べて、インストールや構成にかかる時間を節約できますが、他の2つのオプションに比べて実行速度はやや遅くなります。
コード エディターを開く
MediaWiki の編集に推奨される 2 つのコードエディターは、VSCode と PhpStorm です。 VSCode は無料ですが、PhpStorm は有料です。ただし、学生であれば GitHub Education アカウントを JetBrains アカウントにリンクする ことで無料の PhpStorm ライセンスを取得できます。または、Wikimedia に付与されるライセンスを申請 することでも取得可能です。
どのエディターをインストールして使用するべきかを判断するには、PhpStorm の方が全体的に VSCode より多機能で強力であることを知っておいてください。 しかし、PhpStorm はリポジトリ全体のインデックスを作成するため、起動時に VSCode よりも大幅に時間がかかります。一方、VSCode は段階的に読み込まれます。 そのため、VSCode はファイルの閲覧や小規模な変更に適しており、PhpStorm は大規模な変更に向いています。 これらの理由から、両方をインストールしておくのが理にかなっています。
Docker コンテナー内にある MediaWiki のコードベースを開発するには、リモート接続を確立し、VSCode または PhpStorm を使用してコンテナー内の MediaWiki フォルダーを開くことができます。
コードを変更/テストする
コードを変更し、MediaWiki のブラウザー タブを再読み込みして変更を確認してください。Manual:コーディング規約 に従うことを忘れないでください。 コードが正しく動作し、適切に整形されていることを確認するために、テストを作成して実行します。
注意: テストを書く前に、変更が受け入れられる見込みを確認することで時間を節約できます。 テストがまだ書かれていない状態でパッチを作成し、レビューを依頼してください。その際、レビュー後にテストを追加する旨を伝えてください。
パッチを作成
最後に、レビューを受けて、貢献先のリポジトリにコードを追加するには、Gerrit/チュートリアル に従ってください。
コミュニケーションのヒントとガイドライン
効果的にコミュニケーションを取り、コミュニティのメンバーから支援を得るために、これらのヒントに従ってください。
効果的にPhabricatorタスクを使う
Phabricator タスクに取り組む予定がある場合:
- 許可を求める必要はありません: 未割り当てのタスクには、誰かに割り当ててもらうことなく取り組めます。 タスクを割り当てる権限者や、事前に許可を求める必要のある相手はいません。
- 既に Gerrit に最近のパッチがあるタスクは避け、代わりに別のタスクに取り組んでください。
- Gerrit に既存のパッチがあり、長期間マージされず変更もない場合は、Gerrit やタスク内のフィードバックに基づいてその既存のパッチを改善できます。
- Do your research: タスクに取り組むことを検討する際は、コーディングを始める前に調査を行ってください。コードを確認し、それが何を行うことを意図しているのかを理解し、関連するドキュメントを読み、どこにコードの変更が必要かを見つけてください。
- Phabricator タスクでは、サイドバーのプロジェクト タグを使用して、そのタスクのコード リポジトリを見つけてください。
- バグの修正方法がまったく分からない場合は、まずはより簡単なものを探すことを検討してください。
- タスクに取り組む前に計画を表明する必要はありませんが、そのタスクに取り組んでいることは伝えるべきです。
- 作業を開始したら、Phabricator で Edit Task… をクリックし、Assigned To フィールドに自分の Phabricator ユーザー名を設定して、自分をタスクの担当者に設定してください。 これにより、自分がそのタスクに取り組んでいることが他の人に伝わり、作業の重複を防げます。
- 計画や関心が変わった場合: そのタスクに取り組まなくなった場合は、自分をタスクの担当者から外してください。 これにより、他の人がそのタスクに取り組めることが伝わり、あなたが引き続き取り組んでいるとは期待されなくなります。
- Phabricator のエチケットに従ってください。
- Phabricator のタスクでは、そのタスクのトピックに関する具体的な質問のみを議論してください。 Phabricator を、開発環境の設定方法や Gerrit の問題の解決方法などの一般的な質問をするために使用しないでください。
- 「私のパッチをレビューしてください」や「このリンクにパッチを提出しました」といっただけのコメントは投稿しないでください。 コミット メッセージを正しく整形すれば、パッチは自動的にタスクに関連付けられます。また、パッチの提出は既にレビュー依頼を意味するため、それを明示しても何も追加されません。
優れた質問を執筆する
- 質問してよいかを尋ねるのではなく、すぐに質問してください
- 具体的にし、文脈を提供してください: 単に「詳しい情報を教えてください」「案内してください」「どのように始めればよいか教えてください」と尋ねるのではなく、質問には以下の情報を含めてください:
- 何を達成しようとしていますか?
- 既に何を試しましたか? コマンドとその出力 (長すぎない場合) を、自分の言葉で言い換えるのではなくコピーして貼り付けてください。
- これまでの調査で何が分かりましたか? 既に参照したコード、説明文書、その他のリソースへのリンクを含めてください。
- コミュニケーションでは、具体的なタイトルや件名を使用してください。 「提案ドラフト」や「ヘルプが必要です」は具体的ではありません。
- 会話を読みやすく保つ: Zulip、Phabricator のタスク、メーリング リストで返信する際は、前のコメントから自分の回答に関連する部分だけを引用してください。 以前のコメント全体を引用すると、スレッドが読みにくくなります。
コミュニケーションの方針と推奨手順に従う
質問を送信または投稿する前に:
- ウィキメディア技術空間の行動規範を読み、それに従ってください。
- 包括的言語 を使用してください: 「guys」「madam」「sir」などのように性別を前提とする表現の代わりに、その人の名前を使用してください。
適切な場所で尋ねる
- 公開で質問する: 会話の内容が秘密でない場合は、プライベート メッセージを送らないでください。 プライベート メッセージは他の人の助けにはなりません。
- 最適な場所で質問し、議論する:
- Phabricator のタスクでは、そのタスクのトピックに関する具体的な質問のみを議論してください。
- 開発環境のセットアップ方法や Gerrit の問題の解決方法などの一般的な技術的な質問は、コミュニケーション に記載されている場所で行ってください。
- アウトリーチ プログラムに参加している場合、Zulip はアウトリーチ プログラム自体に関する質問を議論するための場です。
辛抱強くあれ
質問を投稿した後:
- 別のメッセージでコード レビューを依頼しないでください。 人々は Gerrit や Phabricator の通知を受け取り、対応できるときに返信します。
- 入力やコメントを求める際、特に週末や休日の場合は、業務時間に戻るまで待つ必要がある場合があります。 On chat channels like IRC: if nobody answers, try again at a different time; don't just give up!
- If you don't get an answer even after waiting and being patient, consider if other Communication channels might be a better place to ask your question.
付録
PHP
MediaWikiはPHPで書かれています。ですから、MediaWikiのコアをハックするためにPHPに精通する必要があります。
- PHPを学ぶ
-
- PHP のチュートリアル — 様々な言語で利用できます。 PHPについて全く知らなくても、他のオブジェクト指向プログラミング言語の経験があれば、PHPを学ぶのは簡単です。
- PHP Programming at Wikibooks.
- PHP - Wikiversity.
- PHPに関するリソース
-
- PHPマニュアル — 様々な言語で利用できます。
- MediaWiki コミュニティ内の PHPコーディング規約
- 知っておくべきこと
-
- MediaWikiの
maintenance/eval.phpスクリプトが、基本のPHPインタープリタにMediaWikiのオブジェクトとクラスをロードします。 - また、MediaWiki のスクリプト
maintenance/shell.phpの書き換えも必要。maintenance/eval.phpがベースです。Manual:shell.php も参照してください。
- MediaWikiの
データベース
多くの機能がある程度のデータベース操作を必要とするため、MySQL/MariaDBに精通している必要がある場合が多いでしょう。
- MySQL/MariaDBについて学ぶ
-
- MySQL のチュートリアル — MySQL リファレンス マニュアルより。
- MySQL - Wikibooks.
- MySQL/MariaDB リソース
-
- MySQL のリファレンス マニュアル — 様々な言語で利用できます。
- MariaDB ナレッジ ベース
- MediaWiki コミュニティ内のデータベース コーディング規約
- データベースへのアクセス
- 知っておくべきこと
-
- MySQL/MariaDBでコードをテストしてください。
- MediaWiki は現在、主要なデータベースバックエンドとして MySQL と MariaDB を使用しています。 また、PostgreSQLやSQLiteなどの他のDBMSもサポートしています。 しかし、ほとんどすべての開発者はMySQL/MariaDBを使用しており、他のDBをテストしていないため、結果として定期的に動かなくなっていまいます。 そのため、パッチのテストには、特に他のDBのサポートを改善する場合を除き、MySQL/MariaDBを使用することをお勧めします。 後者の場合、MySQL/MariaDB を壊さないように(あるいは、MySQL/MariaDB において恐ろしく非効率なクエリを書かないように)注意してください。
- MySQL/MariaDBでコードをテストしてください。
JavaScript と CSS
JavaScriptとCSSは、フロントエンドのコードのいたるところに現れます。 MediaWikiで作業するためにJavaScript、jQuery、CSSに精通する必要はありませんが、作業する内容によっては必要かもしれません。
- JavaScriptとCSSについて学習する
-
- JavaScript ・ CSS - Wikibooks.
- jQueryをはじめる — jQuery のチュートリアルです。
- Learning JavaScript — references and sources.
- JavaScript と CSS のリソース
-
- MediaWiki コミュニティ内の JavaScript コーディング規約
- MediaWiki コミュニティ内の CSS コーディング規約
MediaWiki
MediaWikiのコードベースは大きな部分もあります; それに圧倒されないでください。 最初のうちは、コードの小さな領域にしか触れないような機能を書いたり、バグを修正したりすることを目標にしましょう。
- MediaWiki の基本と必読ページ
-
- MediaWiki のアーキテクチャ — MediaWikiの主な構成要素と、それらがどのように相互に作用するかについての高レベルな概要です。
- 開発者向けセキュリティ — 安全なコードを書く理由と方法についての概要です。
- MediaWiki のリソース
-
- Manual:コード — 重要なリストとリンクのより詳細な情報です。
- Manual:フック — フックの一覧です。コードベースのどの部分が何かをするのか見つけようとする場合、多くの場合、関連するフックを検索することから始めるのがよいでしょう。
- Manual:コーディング規約 — MediaWikiコミュニティ内の一般的なコーディング規約の概要です。
- コードの説明文書 (出典の追加) — ソースコードとそれのコメントによって自動生成されています。
- Manual:デバッグの方法 — MediaWikiデバッグの手引。
- Manual:eval.php — MediaWikiのオブジェクトをライブで操作するためのツールです。
MediaWiki 拡張機能
MediaWikiの拡張機能のコードを動かす事を選んだなら、以下のリンクから詳細をご覧いただけます。
- MediaWiki 拡張機能のリソース
-
- 拡張機能の開発 — MediaWikiでの拡張機能のコードの書き方
- 拡張機能の書き方のチュートリアル
- MediaWiki 拡張機能のリソース
-
- 拡張機能に関する最善の手法
- A brief introduction to MediaWiki extension development — MediaWikiの拡張機能の作り方に関するプレゼンの動画。(slides).
- MediaWikiの拡張機能の作り方 — MediaWikiの拡張機能を開発する方法、ベストプラクティス、MediaWikiコミュニティへの参加方法について説明します。 2011年2月からです。
- Help for extension developers on the Developer Hub
MediaWiki 外装
Manual:MediaWiki外装を作る方法 is helpful if you choose to work on MediaWiki skins.
関連項目
- リポジトリを横断してコードを検索
- 開発者ハブ – この記事にかかれていることをを精読したら、今度は開発者ハブの情報に移りましょう。
- 行動規範
脚注
- ↑ MediaWikiはPHPをサポートする殆どのプラットフォームで実行可能ですが、LAMP以外のプラットフォーム上では、特定のユーティリティやOSの機能がないために機能や性能が制限される場合があります。
- ↑ MediaWiki は MySQL とMariaDB 以外の DBMS もサポートします。例えば、PostgreSQL、SQLite です。
- ↑ 開発者は、ボランティアや様々な組織で働いているスタッフ(あるいは契約者)の集団からなります。MediaWikiのコードに取り組んでいる開発者の全リストについては、開発者の記事をご覧ください。
- ↑ ソースコードを閲覧したり、コードリポジトリを更新するには http://phabricator.wikimedia.org/diffusion/ を訪問してください。Gerritを用いてシステムにソースコードをダウンロードすることもできます。