「開発:コーディング」の版間の差分
Mitsuhiro Yoshida (トーク | 投稿記録) (done.) |
Mitsuhiro Yoshida (トーク | 投稿記録) 編集の要約なし |
||
1行目: | 1行目: | ||
このページはMoodleのコーディングガイドラインを説明するためのトップレベルのページです。 あなたがMoodleのコードをどのように書くか知りたい場合、ここから始めてください。 | このページはMoodleのコーディングガイドラインを説明するためのトップレベルのページです。 あなたがMoodleのコードをどのように書くか知りたい場合、ここから始めてください。 | ||
==Moodleアーキテクチャ== | ==Moodleアーキテクチャ== | ||
Moodleではインストール、利用、アップグレード、他のシステムとの統合が容易でありながら、可能な限り多くの人々のためにできるだけ幅広いプラットフォームでも動作するよう心がけています。 | Moodleではインストール、利用、アップグレード、他のシステムとの統合が容易でありながら、可能な限り多くの人々のためにできるだけ幅広いプラットフォームでも動作するよう心がけています。 | ||
詳細は[[Moodleアーキテクチャ]]をご覧ください。 | 詳細は[[Moodleアーキテクチャ]]をご覧ください。 | ||
==プラグイン== | |||
==プラグイン== | |||
Moodleにはモジュール化という一般的な哲学があります。 30種類近い標準的なプラグインタイプおよびさらに多くのサブプラグインタイプがありますが、これらのプラグインタイプはすべて同じように動作します。そして、ブロックおよび活動は唯一の小さな例外です。 | Moodleにはモジュール化という一般的な哲学があります。 30種類近い標準的なプラグインタイプおよびさらに多くのサブプラグインタイプがありますが、これらのプラグインタイプはすべて同じように動作します。そして、ブロックおよび活動は唯一の小さな例外です。 | ||
詳細は [[プラグイン|Moodleプラグイン]]および[[サブプラグイン|Moodleサブプラグイン]]をご覧ください。 | 詳細は [[プラグイン|Moodleプラグイン]]および[[サブプラグイン|Moodleサブプラグイン]]をご覧ください。 | ||
==コーディングスタイル== | ==コーディングスタイル== | ||
一貫した[[コーディングスタイル]]はどんな開発プロジェクトにおいても重要であり、多くの開発者が関わる場合は特にそうです。標準的なスタイルはコードが読みやすく、理解しやすいことを保証して、全体の品質向上に役立ちます。 | 一貫した[[コーディングスタイル]]はどんな開発プロジェクトにおいても重要であり、多くの開発者が関わる場合は特にそうです。標準的なスタイルはコードが読みやすく、理解しやすいことを保証して、全体の品質向上に役立ちます。 | ||
17行目: | 14行目: | ||
私たちの[[コーディングスタイル|Moodleコーディングスタイル]]ドキュメントではこの規約を説明しています。 | 私たちの[[コーディングスタイル|Moodleコーディングスタイル]]ドキュメントではこの規約を説明しています。 | ||
==セキュリティ== | ==セキュリティ== | ||
セキュリティとは私たちのすべてのユーザの利益およびデータを守ることです。 Moodleは銀行のソフトウェアではないかもしれませんが、プライベートな議論および成績のような多くの機密かつ重要なデータを外部の目 (または学生のハッカー!) から保護して、さらに私たちのユーザをスパム発信者および他のインターネット犯罪者から保護しています。 | セキュリティとは私たちのすべてのユーザの利益およびデータを守ることです。 Moodleは銀行のソフトウェアではないかもしれませんが、プライベートな議論および成績のような多くの機密かつ重要なデータを外部の目 (または学生のハッカー!) から保護して、さらに私たちのユーザをスパム発信者および他のインターネット犯罪者から保護しています。 | ||
24行目: | 20行目: | ||
Moodleコアまたはサードパーティモジュールの スクリプト1つで何千ものサイトに脆弱性をもたらせるため、すべての開発者は私たちの [[セキュリティ|Moodleセキュリティガイドライン]] に厳密に従うことが重要です。 | Moodleコアまたはサードパーティモジュールの スクリプト1つで何千ものサイトに脆弱性をもたらせるため、すべての開発者は私たちの [[セキュリティ|Moodleセキュリティガイドライン]] に厳密に従うことが重要です。 | ||
==XHTMLおよびCSS== | ==XHTMLおよびCSS== | ||
Moodleはすべての一般的なアクセシビリティガイドライン (http://www.w3.org/TR/WCAG20/ W3C WAG 2.0], [http://www.w3.org/TR/wai-aria-practices/ ARIA] など) に準拠した厳格で的確な [http://en.wikipedia.org/wiki/HTML5 HTML 5] コード (可能であれば [[XHTML|XHTML 1.1] と下位互換性のあることが望ましい) の生成が重要です。 | Moodleはすべての一般的なアクセシビリティガイドライン (http://www.w3.org/TR/WCAG20/ W3C WAG 2.0], [http://www.w3.org/TR/wai-aria-practices/ ARIA] など) に準拠した厳格で的確な [http://en.wikipedia.org/wiki/HTML5 HTML 5] コード (可能であれば [[XHTML|XHTML 1.1] と下位互換性のあることが望ましい) の生成が重要です。 | ||
レイアウトにはCSSを使用してください。Moodleにはいくつかのテーマがインストールされています。バージョン2.7以降、「クリーン」テーマのみがMoodleの基本コードに含まれています。「標準」テーマは他のテーマのビルディングブロックとして動作するのに適したプレーンなテーマであるべきです。このテーマにはMoodleの外観を整え機能的にするための最小限のスタイルが含まれていなければなりません。そして、Moodleには見た目が良くテーマ構築のための様々なテクニックを示す他のいくつかのデフォルトテーマが付属しています。 | レイアウトにはCSSを使用してください。Moodleにはいくつかのテーマがインストールされています。バージョン2.7以降、「クリーン」テーマのみがMoodleの基本コードに含まれています。「標準」テーマは他のテーマのビルディングブロックとして動作するのに適したプレーンなテーマであるべきです。このテーマにはMoodleの外観を整え機能的にするための最小限のスタイルが含まれていなければなりません。そして、Moodleには見た目が良くテーマ構築のための様々なテクニックを示す他のいくつかのデフォルトテーマが付属しています。 | ||
これはブラウザ間の一貫性をきれいに低下させて (特に非ビジュアルブラウザまたはモバイルブラウザを使用している人)、テーマデザイナの生活を向上させるのに役立ちます。]] | |||
これはブラウザ間の一貫性をきれいに低下させて (特に非ビジュアルブラウザまたはモバイルブラウザを使用している人)、テーマデザイナの生活を向上させるのに役立ちます。 | ==[[XHTML|JavaScript]]== | ||
[[XHTML|Moodleの新しいJavscriptはES6スタイルのバニラJavscriptとして記述されるべきです。jQuery、YUI、およびその他のフレームワークの使用は強く推奨されません。これらのオブジェクトの使用を必要とするレガシーインターフェースを扱う場合を除き、コアに受け入れられることはありません。 | |||
==JavaScript== | |||
Moodleの新しいJavscriptはES6スタイルのバニラJavscriptとして記述されるべきです。jQuery、YUI、およびその他のフレームワークの使用は強く推奨されません。これらのオブジェクトの使用を必要とするレガシーインターフェースを扱う場合を除き、コアに受け入れられることはありません。 | |||
一般に削除されたインターフェースを表示したり、ページ読み込み中に新しいインターフェースを追加しないようコードを記述する必要があります。 | 一般に削除されたインターフェースを表示したり、ページ読み込み中に新しいインターフェースを追加しないようコードを記述する必要があります。 | ||
すべてのJavascriptはアクセス可能でなければなりません。]] | |||
すべてのJavascriptはアクセス可能でなければなりません。 | ==国際化== | ||
[[XHTML|私たちが言語パックの言語文字列およびロケール情報をコードから分離することに細心の注意を払っているため、Moodleは84以上の言語で動作します。 | |||
== | |||
私たちが言語パックの言語文字列およびロケール情報をコードから分離することに細心の注意を払っているため、Moodleは84以上の言語で動作します。 | |||
しかし、すべてのコード、コメントおよびドキュメントのデフォルト言語は英語(AU)です。 | しかし、すべてのコード、コメントおよびドキュメントのデフォルト言語は英語(AU)です。 | ||
詳細: ストリングAPI]] | |||
詳細: | ==[[XHTML|アクセシビリティ]]== | ||
[[XHTML|Moodleは可能な限り多くの人々にうまく動作する必要があります。 | |||
==アクセシビリティ== | 詳細はMoodleアクセシビリティをご覧ください。]] | ||
==[[XHTML|ユーザビリティ]]== | |||
[[XHTML|詳細はインターフェースガイドラインをご覧ください (作成中)。]] | |||
==[[XHTML|パフォーマンス]]== | |||
[[XHTML|上の理由から、運用サイトでは推奨されないいくつかの機能 (特に開発者のための機能) が存在します。 | |||
==ユーザビリティ== | |||
==パフォーマンス== | |||
上の理由から、運用サイトでは推奨されないいくつかの機能 (特に開発者のための機能) が存在します。 | |||
最も重要な特性はスケーラビリティであり、ユーザ数、コース数、コース内の活動数等が多少増えたとしても、サーバの負荷はそれに比例して増加するだけです。 | 最も重要な特性はスケーラビリティであり、ユーザ数、コース数、コース内の活動数等が多少増えたとしても、サーバの負荷はそれに比例して増加するだけです。 | ||
詳細な情報およびアドバイスに関してパフォーマンスおよびスケーラビリティをご覧ください。]] | |||
==[[XHTML|データベース]]== | |||
[[XHTML|Moodleには私たちが書いたXMLDBと呼ばれる強力なデータベース抽象化レイヤがあります。 これにより、同じMoodleコードがMySQL/MariaDB、PostgreSQL、MS SQL ServerおよびOracleで動作します。Oracleを使用する場合、既知の問題があります。Oracleは完全にサポートされていないため、実運用環境には推奨されません。 | |||
==データベース== | |||
私たちには[DDL関数|テーブル定義および変更]]のためのツールおよびデータベースから[[データ操作API|データを出し入れするためのメソッド]]があります。 | 私たちには[DDL関数|テーブル定義および変更]]のためのツールおよびデータベースから[[データ操作API|データを出し入れするためのメソッド]]があります。 | ||
概要: [[データベース|Moodleデータベース]]ガイドライン | 概要: [[データベース|Moodleデータベース]]ガイドライン | ||
==イベント== | ==イベント== | ||
Moodleは「イベント」でモジュール間のコミュニケーションを可能にします。 モジュールは特定のイベントを「起動」できます。また、他のモジュールはそれらのイベントを「処理/観察」できます。 | Moodleは「イベント」でモジュール間のコミュニケーションを可能にします。 モジュールは特定のイベントを「起動」できます。また、他のモジュールはそれらのイベントを「処理/観察」できます。 | ||
73行目: | 51行目: | ||
詳細: | 詳細: | ||
* [[イベントAPI]] - Moodle 2.6以降 - 特に[イベントAPI#イベント命名規則|イベント命名規則]]に注意してください。 | * [[イベントAPI]] - Moodle 2.6以降 - 特に[イベントAPI#イベント命名規則|イベント命名規則]]に注意してください。 | ||
==ウェブサービス== | ==ウェブサービス== | ||
ウェブサービスは[[ウェブサービスAPI関数#命名規則|命名規則]]を含む[[WebサービスAPI関数]]および[[コアへのWebサービス関数寄稿方法]]に従って実装する必要があります。 | ウェブサービスは[[ウェブサービスAPI関数#命名規則|命名規則]]を含む[[WebサービスAPI関数]]および[[コアへのWebサービス関数寄稿方法]]に従って実装する必要があります。 | ||
==手動テスト== | ==手動テスト== | ||
コアコードベースに統合されたすべての問題は統合時にテストされます。その後、私たちのテストチームによりテストされます。テストの多くの部分は自動化されていますが、自動化できない部分も多く、手動でのテストが必要です。 | コアコードベースに統合されたすべての問題は統合時にテストされます。その後、私たちのテストチームによりテストされます。テストの多くの部分は自動化されていますが、自動化できない部分も多く、手動でのテストが必要です。 | ||
Moodleには[[テストインストラクションガイド|明確なテスト指示の書き方]]のガイドラインがあります。このガイドラインを読んだ上で従うことをお勧めします。 | Moodleには[[テストインストラクションガイド|明確なテスト指示の書き方]]のガイドラインがあります。このガイドラインを読んだ上で従うことをお勧めします。 | ||
==単体テスト== | ==単体テスト== | ||
[https://ja.wikipedia.org/wiki/単体テスト 単体テスト]単なる技術ではなく、ソフトウェア開発の哲学でもあります。 | [https://ja.wikipedia.org/wiki/単体テスト 単体テスト]単なる技術ではなく、ソフトウェア開発の哲学でもあります。 | ||
90行目: | 65行目: | ||
詳細は[[PHPUnit]] をご覧ください。 | 詳細は[[PHPUnit]] をご覧ください。 | ||
==受け入れテスト== | ==受け入れテスト== | ||
PHPUnitは関数およびクラスの内部実装を主にカバーしています。ユーザインタラクションのテストは[http://behat.org Behatフレームワーク]で自動化できます。 | PHPUnitは関数およびクラスの内部実装を主にカバーしています。ユーザインタラクションのテストは[http://behat.org Behatフレームワーク]で自動化できます。 | ||
詳細は[[受け入れテスト]] をご覧ください。 | 詳細は[[受け入れテスト]] をご覧ください。 | ||
==サードパーティライブラリ== | ==サードパーティライブラリ== | ||
Moodleにはあなたのコードにサードパーティライブラリをインクルードするための標準的な方法があります。詳細はhttps://docs.moodle.org/dev/Third_Party_Librariesをご覧ください。 | Moodleにはあなたのコードにサードパーティライブラリをインクルードするための標準的な方法があります。詳細はhttps://docs.moodle.org/dev/Third_Party_Librariesをご覧ください。 | ||
== その他の規約 == | == その他の規約 == | ||
Moodleのコーディングスタイルおよびデザインはかなり独特であり、[http://pear.php.net/manual/en/standards.php PEARコーディング規約]または他の一般的なPHP規約とは互換性がないことに留意してください。 | Moodleのコーディングスタイルおよびデザインはかなり独特であり、[http://pear.php.net/manual/en/standards.php PEARコーディング規約]または他の一般的なPHP規約とは互換性がないことに留意してください。 | ||
[[en:Development:Coding]] | [[en:Development:Coding]] |
2022年1月29日 (土) 15:04時点における版
このページはMoodleのコーディングガイドラインを説明するためのトップレベルのページです。 あなたがMoodleのコードをどのように書くか知りたい場合、ここから始めてください。
Moodleアーキテクチャ
Moodleではインストール、利用、アップグレード、他のシステムとの統合が容易でありながら、可能な限り多くの人々のためにできるだけ幅広いプラットフォームでも動作するよう心がけています。
詳細はMoodleアーキテクチャをご覧ください。
プラグイン
Moodleにはモジュール化という一般的な哲学があります。 30種類近い標準的なプラグインタイプおよびさらに多くのサブプラグインタイプがありますが、これらのプラグインタイプはすべて同じように動作します。そして、ブロックおよび活動は唯一の小さな例外です。
詳細は MoodleプラグインおよびMoodleサブプラグインをご覧ください。
コーディングスタイル
一貫したコーディングスタイルはどんな開発プロジェクトにおいても重要であり、多くの開発者が関わる場合は特にそうです。標準的なスタイルはコードが読みやすく、理解しやすいことを保証して、全体の品質向上に役立ちます。
この方法でコードを書くことはあなたのコードがMoodleコミュニティにより受け入れられるための重要なステップです。
私たちのMoodleコーディングスタイルドキュメントではこの規約を説明しています。
セキュリティ
セキュリティとは私たちのすべてのユーザの利益およびデータを守ることです。 Moodleは銀行のソフトウェアではないかもしれませんが、プライベートな議論および成績のような多くの機密かつ重要なデータを外部の目 (または学生のハッカー!) から保護して、さらに私たちのユーザをスパム発信者および他のインターネット犯罪者から保護しています。
Moodleは人々のサーバ上で動作するスクリプトでもあるため、責任あるインターネット市民である必要があり、動作するサーバにクラッカによる不法アクセスを可能にする脆弱性を持ち込まないようにしなければなりません。
Moodleコアまたはサードパーティモジュールの スクリプト1つで何千ものサイトに脆弱性をもたらせるため、すべての開発者は私たちの Moodleセキュリティガイドライン に厳密に従うことが重要です。
XHTMLおよびCSS
Moodleはすべての一般的なアクセシビリティガイドライン (http://www.w3.org/TR/WCAG20/ W3C WAG 2.0], ARIA など) に準拠した厳格で的確な HTML 5 コード (可能であれば XHTML 1.1] と下位互換性のあることが望ましい) の生成が重要です。 レイアウトにはCSSを使用してください。Moodleにはいくつかのテーマがインストールされています。バージョン2.7以降、「クリーン」テーマのみがMoodleの基本コードに含まれています。「標準」テーマは他のテーマのビルディングブロックとして動作するのに適したプレーンなテーマであるべきです。このテーマにはMoodleの外観を整え機能的にするための最小限のスタイルが含まれていなければなりません。そして、Moodleには見た目が良くテーマ構築のための様々なテクニックを示す他のいくつかのデフォルトテーマが付属しています。 これはブラウザ間の一貫性をきれいに低下させて (特に非ビジュアルブラウザまたはモバイルブラウザを使用している人)、テーマデザイナの生活を向上させるのに役立ちます。
JavaScript
国際化
アクセシビリティ
Moodleは可能な限り多くの人々にうまく動作する必要があります。 詳細はMoodleアクセシビリティをご覧ください。
ユーザビリティ
詳細はインターフェースガイドラインをご覧ください (作成中)。
パフォーマンス
データベース
Moodleには私たちが書いたXMLDBと呼ばれる強力なデータベース抽象化レイヤがあります。 これにより、同じMoodleコードがMySQL/MariaDB、PostgreSQL、MS SQL ServerおよびOracleで動作します。Oracleを使用する場合、既知の問題があります。Oracleは完全にサポートされていないため、実運用環境には推奨されません。 私たちには[DDL関数|テーブル定義および変更のためのツールおよびデータベースからデータを出し入れするためのメソッドがあります。
概要: Moodleデータベースガイドライン
イベント
Moodleは「イベント」でモジュール間のコミュニケーションを可能にします。 モジュールは特定のイベントを「起動」できます。また、他のモジュールはそれらのイベントを「処理/観察」できます。
詳細:
- イベントAPI - Moodle 2.6以降 - 特に[イベントAPI#イベント命名規則|イベント命名規則]]に注意してください。
ウェブサービス
ウェブサービスは命名規則を含むWebサービスAPI関数およびコアへのWebサービス関数寄稿方法に従って実装する必要があります。
手動テスト
コアコードベースに統合されたすべての問題は統合時にテストされます。その後、私たちのテストチームによりテストされます。テストの多くの部分は自動化されていますが、自動化できない部分も多く、手動でのテストが必要です。
Moodleには明確なテスト指示の書き方のガイドラインがあります。このガイドラインを読んだ上で従うことをお勧めします。
単体テスト
単体テスト単なる技術ではなく、ソフトウェア開発の哲学でもあります。
このアイデアは (あなたの開発と同じタイミングで) 開発中の関数の各ビットについて自動化可能なテストを作成することです。これは後でソフトウェアの動作を確認するのに役立つだけでなく、開発自体にも役立ちます。なぜなら、非常に明確に定義された構造およびゴールを持つモジュール方式で作業することを強制されるからです。
MoodleではPHPUnitと呼ばれるフレームワークを使用しているため、単体テストを簡単に記述できます。
詳細はPHPUnit をご覧ください。
受け入れテスト
PHPUnitは関数およびクラスの内部実装を主にカバーしています。ユーザインタラクションのテストはBehatフレームワークで自動化できます。
詳細は受け入れテスト をご覧ください。
サードパーティライブラリ
Moodleにはあなたのコードにサードパーティライブラリをインクルードするための標準的な方法があります。詳細はhttps://docs.moodle.org/dev/Third_Party_Librariesをご覧ください。
その他の規約
Moodleのコーディングスタイルおよびデザインはかなり独特であり、PEARコーディング規約または他の一般的なPHP規約とは互換性がないことに留意してください。