Help:Extension:Translate/Developer guide/ja

Translate 拡張機能は、数百のクラスからなる大規模な拡張機能です. このページでは、コードに手を加える開発者のためのガイダンスを提供します. このページとリンク先の文書を読めば、Translate のコードがどのように構成され、どのような特別な規約が使用されているか、よりよく理解できるはずです. 一般的な MediaWiki の開発方針、コーディング規約、Gerrit や Phabricator のようなツールの使い方は範囲外です. これらの話題は既にご存知だと思いますが、Translate に適用される場合、ここでは繰り返しません.

Translate 拡張機能では、多くの大規模な移行が同時に進行しています. ここでは、現在進行中の主な移行を列挙し、新しいコードにどのスタイルが好ましいかを詳しく説明します. 一般に、既存のコードを修正する場合は、現在のスタイルを維持し、移行は別に行うのがいいでしょう. コードを触るときにやってもいい小さなクリーンアップもあります.

名前空間の移行
現在、すべての Translate のコードを名前空間  配下に移行しているところです. すべての名前空間付きコードは、 ディレクトリ配下に置かれます. 新しい PHP ファイルは、すべて適切な名前空間に配置する必要があります. どの名前空間が利用できるようになるかのガイダンスは を参照してください. 名前空間は、機能ではなくドメインで整理されています. 名前空間やクラス名では省略形を避けるべきです. レガシー コードは、リポジトリのルート (root) とさまざまな下位ディレクトリにあります.

テストを統合テストと単体テストに分割
以前は、統合テストと単体テストの区別はありませんでした. 新しいコードの場合、単体テストが主なテストの種類になるはずです. 単体テストは、 ディレクトリ配下の名前空間のレイアウトに合わせたディレクトリに配置されます. そのディレクトリの中に Makefile があり、開発中に単体テストの全部または一部を簡単に実行できます.

型宣言とコメント
すべての新しいコードは、パラメーターと戻り値の両方の型を宣言する必要があります. また、厳密な型付け (strict_types) を  で有効にする必要があります.

型宣言のおかげで、ほとんどの関数やメソッドのコメントは、パラメーター名と型を繰り返すだけで、冗長になっています. このため、パラメーターや戻り値の型宣言の欠落に対する linter チェックは、型宣言を使用する場所とほぼ一致する  および   の配下のコードでは無効になっています. このコードでは、付加価値を提供する場合以外は冗長な説明文書を追加しないでください. そのような例として、配列型に対してより正確な型ヒントを提供することが挙げられます. 例:

上記のように、1 つのタグや 1 行の記述しかないコメントには、1 行コメント構文も使用します.

コンストラクターの依存性注入
新しいコードには、その依存性をすべてコンストラクターで注入する必要があります. 多くの場合、これはまだできません. なぜなら、多くのサービスは MediaWiki 1.35 でのみ利用でき (現在 1.34 以降をサポートしています)、サービスに対する ObjectFactory のサポートが不足しているからです. このような新しいコードでは、将来コンストラクターの依存性注入に移行しやすいように、すべての依存性をクラスのコンストラクター (またはクラスへの主なエントリ ポイント) に配置します.

ファイルのヘッダー
新しいコードには、以下のような最小限のヘッダーを採用しています:

著作権をより明確に主張したい場合は、必要に応じて @copyright タグを追加することもできます.

宣言とバージョン番号
後方互換性のない方法で Translate のコードを変更する場合、コードのすべての使用箇所に対して https://codesearch.wmcloud.org/search/ をチェックしてください. 既知の使用箇所は、TwnMainPage、TranslateSVG、CentralNotice、MassMessage と translatewiki リポジトリにある多数のものです.

@deprecated タグと wfDeprecated ハード廃止予定 (hard deprecation) を含む、MediaWiki コアによって提供される廃止予定の機能を使用できます. コードの既知の使用箇所がない場合、安定版として明示的にマークされていない限り、廃止予定にせずに後方互換性のない方法で変更しても問題ありません (安定版インターフェイス ポリシーを参照してください). Code marked as stable should be hard-deprecated at least for one MLEB release.

MediaWiki core version numbers are meaningless in the context of Translate, as Translate always supports multiple MediaWiki releases. Translate itself uses YYYY.MM style versioning (as part of MLEB). New classes and methods should be annotated with @since YYYY.MM tags.