Actions

Difference between revisions of "開発者エリア/Maharaアーキテクチャインストラクション"

From Mahara Wiki

 
(19 intermediate revisions by the same user not shown)
Line 1: Line 1:
作成中です - [[User:Mits|mits]]
 
 
 
このドキュメントは、Maharaアーキテクチャの基本イントロダクションおよびアーキテクチャがどのようにコードに反映されているか、あなたに情報提供することを目的としています。このドキュメントを読んだ後、あなたはMaharaがどのように組み合わされているか、新しいプラグインまたはコアコードを書いて、どのように拡張するのか、合理的な理解を得ることができます。
 
このドキュメントは、Maharaアーキテクチャの基本イントロダクションおよびアーキテクチャがどのようにコードに反映されているか、あなたに情報提供することを目的としています。このドキュメントを読んだ後、あなたはMaharaがどのように組み合わされているか、新しいプラグインまたはコアコードを書いて、どのように拡張するのか、合理的な理解を得ることができます。
  
Line 7: Line 5:
 
==概要==
 
==概要==
  
MaharaはPHPで書かれたウェブアプリケーションであり、Moodle、Drupal、phpBBに良く似ています。フレームワークのような機能を提供するため、いくつかのライブラリを使用しますが、それ自体はZendフレームワークのようなPHPフレームワークをベースとしているわけではありません。実際、あなたが作業するのに必要なデータベースライブラリおよびフォーム作成のフレームワーク、そしてあなたのカスタマイズに関してコアをハックしなくても済むようなプラグインアーキテクチャをMaharaが提供します。この意味で、MaharaはDrupalおよびMoodleのようなプラグイン着脱可能なソフトウェアと良く似ています。
+
MaharaはPHPで書かれたウェブアプリケーションであり、Moodle、Drupal、phpBBに良く似ています。フレームワークのような機能を提供するため、いくつかのライブラリを使用しますが、それ自体はZendフレームワークのようなPHPフレームワークをベースとしているわけではありません。実際、あなたが作業するのに必要なデータベースライブラリおよびフォーム作成のフレームワーク、そしてあなたのカスタマイズに関してコアをハックしなくても済むようなプラグインアーキテクチャをMaharaは提供します。この意味で、MaharaはDrupalおよびMoodleのようなプラグイン着脱可能なソフトウェアと良く似ています。
  
Maharaへのリクエストは直接PHPスクリプトに向かいます。現在のところ、ディスパッチはありません。ホームページへのリクエストは、index.php等によって処理されます。これらのスクリプトはMaharaコアを読み込み、必要なデータを検索して、データ構造または必要なフォームを生成した後、これらを表示のために渡します。どのPHPスクリプトがどのページを生成するのか簡単に分かることができるため、理解するのにシンプルなモデルです。「クリーンURL」の利点を逃すことになりますが、多くのウェブサーバに移植することができます。
+
Maharaへのリクエストは直接PHPスクリプトに向かいます。現在のところ、ディスパッチはありません。ホームページへのリクエストは、index.php等によって処理されます。これらのスクリプトはMaharaコアを読み込み、必要なデータを検索して、データ構造または必要なフォームを生成した後、表示のために渡します。どのPHPスクリプトがどのページを生成するのか簡単に探すことができるため、理解するのにシンプルなモデルです。「クリーンURL」の利点を逃すことになりますが、多くのウェブサーバに移植することができます。
  
Maharaのコンセプトの核となるものは「プラグイン」です。大部分のMaharaの機能、コア (core) 機能でさえ、プラグインを書くことで実装されています。そして、あなたが変更したいMaharaの部分がプラグインではない場合、Maharaは簡単にハック (hack) できるよう、設計されています。
+
Maharaのコンセプトの核となるものは「プラグイン」です。大部分のMaharaの機能、コア (core) 機能でさえ、プラグインを記述することで実装されています。そして、あなたが変更したいMaharaの部分がプラグインではない場合、Maharaは簡単にハック (hack 改造) できるよう、設計されています。
  
 
</div><div id="section_2">
 
</div><div id="section_2">
Line 17: Line 15:
 
==Hackability (ハックしやすさ)==
 
==Hackability (ハックしやすさ)==
  
Maharaは土台から最上部まで、高度に着脱可能な状態に設計されているため、簡単にハック (改造) することができます。この理由から私たちはMaharaのコーディングに関して意図的にPHPを選択しました - PHPに詳しい多くの開発者が存在すること、そしてLAMPの積み重ね (stack) があるからです。MaharaはLinuxの代わりにSolaris/BSD/Mac、Apacheの代わりにNginx/Lighttpd、MySQLの代わりにPostgreSQL (推奨DBMSです) を使用するように、様々なLAMP環境で動作させることができます。Maharaチームがそのような環境でテストすることはありませんが、WindowsおよびIIS環境下で動作させているユーザも存在します。パッチは歓迎します :)
+
Maharaは土台から最上部まで、高度に着脱可能な状態に設計されているため、簡単にハックすることができます。この理由から私たちはMaharaのコーディングに関して意図的にPHPを選択しました - PHPに詳しい多くの開発者が存在すること、そしてLAMPの積み重ね (stack) があるからです。MaharaはLinuxの代わりにSolaris/BSD/Mac、Apacheの代わりにNginx/Lighttpd、MySQLの代わりにPostgreSQL (推奨DBMSです) を使用できるように、様々なLAMP環境で動作させることができます。Maharaチームがそのような環境でテストすることはありませんが、WindowsおよびIIS環境下で動作させているユーザも存在します。パッチは歓迎します :)
  
 
パッチに関して言えば、Maharaはフリーのオープンソースソフトウェアです (恐らく、すでにあなたは知っていると思いますが)。チーム内には、新しい機能、バグフィックス、フォーラム投稿サポート、Maharaの一般的な改善等に毎日関わっている小さな開発部隊が存在します。開発部隊を取り囲んでいるのは、熱心なコミュニティ、翻訳者、ボランティア、開発者および様々な方法でMaharaを改善するユーザです - 新しい機能の開発からバグ報告まで、Maharaの使用に関して最善の方法を提案しています。重要な点は、Maharaがフリーソフトウェアであり、あなたは無条件に思いっきりハックできるということです!
 
パッチに関して言えば、Maharaはフリーのオープンソースソフトウェアです (恐らく、すでにあなたは知っていると思いますが)。チーム内には、新しい機能、バグフィックス、フォーラム投稿サポート、Maharaの一般的な改善等に毎日関わっている小さな開発部隊が存在します。開発部隊を取り囲んでいるのは、熱心なコミュニティ、翻訳者、ボランティア、開発者および様々な方法でMaharaを改善するユーザです - 新しい機能の開発からバグ報告まで、Maharaの使用に関して最善の方法を提案しています。重要な点は、Maharaがフリーソフトウェアであり、あなたは無条件に思いっきりハックできるということです!
Line 31: Line 29:
 
===プラグインタイプ===
 
===プラグインタイプ===
  
Maharaの部品がプラグイン着脱可能であるため、特にAPIはその目的に合致するため作成されました。例えば、検索APIではどのような検索結果が必要であるか取り扱うメソッドを提供するのに対して、ユーザコンテンツタイプAPIではコンテンツ自体およびコンテンツのオーナーシップを取り扱うメソッドを含みます。私たちはこれらの異なる'''タイプ'''のプラグインをコールすることができます。以下、いくつかの例です:
+
Maharaの部品がプラグイン着脱可能であるため、特にAPIはその目的に合致するため作成されました。例えば、検索APIではどのような検索結果が必要であるか取り扱うメソッドを提供するのに対して、ユーザコンテンツタイプAPIではコンテンツ自体およびコンテンツのオーナーシップを取り扱うメソッドを含みます。私たちはこれら異なる'''タイプ'''のプラグインをコールすることができます。以下、いくつかの例です:
  
* '''アーティファクト (artefact)'''プラグインタイプはユーザコンテンツを取り扱います (ユーザコンテンツのアイテムが「アーティファクト」呼ばれることが、この名称の由来です)。
+
* '''アーティファクト (artefact) '''プラグインタイプはユーザコンテンツを取り扱います (ユーザコンテンツのアイテムが「アーティファクト」呼ばれることが、この名称の由来です)。
* '''認証 (auth)'''プラグインにはユーザアカウントの正当性を確認するAPIがあります。
+
* '''認証 (auth)''' プラグインにはユーザアカウントの正当性を確認するAPIがあります。
* The '''ブロックタイプ (blocktype)''' プラグインタイプではシステムに新しいタイプのブロックを装着できる方法 (pluggable way) を提供します。
+
* The '''ブロックタイプ (blocktype)''' プラグインタイプでは新しいタイプのブロックをシステムに装着できる方法 (pluggable way) を提供します。
  
 
Mahara 1.1では次のプラグインを利用できます: アーティファクト (artefact)、認証 (auth)、ブロックタイプ (blocktype)、インタラクション (interaction)、通知 (notification )、検索 (search)
 
Mahara 1.1では次のプラグインを利用できます: アーティファクト (artefact)、認証 (auth)、ブロックタイプ (blocktype)、インタラクション (interaction)、通知 (notification )、検索 (search)
  
このアプローチには、いくつかの素晴らしい利点があります。例えば、プラグインの1つが使用されているシステムの一部の場合、私たちはシステム内の単一のプラグインすべてにどのAPIをサポートしているのか尋ねる必要がありません - 適切なタイプのプラグインのみが使用されます。プラグインタイプでは実際要件のため、私たちがAPIをカスタマイズすることができます。例えば、検索を扱うプラグインでは単に検索APIメソッドを実装するだけで良く、そのことに関して、ユーザコンテンツ、通知または他の機能を実装しないことに言及する必要はありません。
+
このアプローチには、いくつかの素晴らしい点があります。例えば、プラグインの1つがシステムの一部の場合、私たちはシステム内の単一のプラグインすべてにどのAPIをサポートしているのか尋ねる必要はありません - 適切なタイプのプラグインのみが使用されます。プラグインタイプでは実際要件のため、私たちがAPIをカスタマイズすることができます。例えば、検索を扱うプラグインでは単に検索APIメソッドを実装するだけで良く、そのことに関して、ユーザコンテンツ、通知または他の機能を実装しないことに言及する必要はありません。
  
ディスク上では: それぞれのプラグインタイプは htdocs/ フォルダ内にディレクトリを持ちます。それぞれにディレクトリには、lib.phpを含みます。
+
ディスク上では: それぞれのプラグインタイプは htdocs/ フォルダ内にディレクトリを持ちます。それぞれディレクトリには、lib.phpを含みます。
  
 
</div><div id="section_5">
 
</div><div id="section_5">
Line 47: Line 45:
 
===プラグイン===
 
===プラグイン===
  
前のセクションを前提として、プラグイン自体は単にプラグインタイプのインスタンスと言えます。例えばアーティファクトを例に挙げると、Maharaコアはブログ、ファイルマネージャ、レジュメおよびプロファイル情報のプラグインと共に提供されます。そして、通知において、Maharaは「内部」(ユーザの活動ログにメッセージを記録)、EメールおよびEメールダイジェストを持ちます。
+
前のセクションを前提とした場合、プラグイン自体は単にプラグインタイプのインスタンスと言えます。例えばアーティファクトを例に挙げると、Maharaコアはブログ、ファイルマネージャ、レジュメおよびプロファイル情報のプラグインと共に提供されます。そして、通知において、Maharaは「内部」(ユーザの活動ログにメッセージを記録)、EメールおよびEメールダイジェストを持ちます。
  
それぞれのプラグインには少なくとも1つのクラス定義が含まれるlib.phpが提供されます。このクラスではプラグインがcronジョブおよびイベントを登録することができます。また、さらにそのプラグインタイプ固有の機能に接続することができます。例えば、アーティファクトプラグインではメインメニューに新しいメニューアイテムを登録することができます。
+
それぞれのプラグインには少なくとも1つのクラス定義が含まれるlib.phpが提供されます。このクラスでは、プラグインがcronジョブおよびイベントを登録することができます。また、さらにそのプラグインタイプ固有の機能に接続することができます。例えば、アーティファクトプラグインではメインメニューに新しいメニューアイテムを追加することができます。
  
アーティファクトプラグインの場合、それぞれのプラグインは必要なページを描写するための1つまたはそれ以上のPHPスクリプトを提供することができます。他のコンテンツアイテムの様々な属性を共有できる利点すべてを得ることができるのに加えて、このようにして、アーティファクトプラグインはコンテンツ管理のために高度にカスタマイズしたインタフェースを提供することができます。
+
アーティファクトプラグインの場合、それぞれのプラグインでは必要なページを描写するための1つまたはそれ以上のPHPスクリプトを提供することができます。他のコンテンツアイテムの様々な属性を共有できる利点すべてを得ることができるのに加えて、このようにして、アーティファクトプラグインはコンテンツ管理のため、高度にカスタマイズしたインタフェースを提供することができます。
  
'''ディスク上:''' それぞれのプラグインは該当するプラグインタイプのサブディレクトリ配下にあるサブディレクトリに入ります。It provides a lib.php and version.php, and if it needs database tables, a db/ directory. Some plugin types have other directories too - such as theme/ or blocktype/.
+
'''ディスク上:''' それぞれのプラグインは該当するプラグインタイプのサブディレクトリ配下にあるサブディレクトリに入ります。このディレクトリにはlib.phpおよびversion.php、そしてデータベーステーブルが必要な場合、db/ ディレクトリが入ります。いくつかのプラグインタイプでは、例えば、theme/ または blocktype/ のように他のディレクトリも含みます。
  
'''コード内:''' Each plugin's lib.php contains a Plugin class which extends Plugin. E.g., PluginArtefactBlog which extends PluginArtefact. This implements the appropriate API. Other classes may be necessary depending on the plugin type.
+
'''コード内:''' それぞれのプラグインのlib.phpには、プラグインを拡張するプラグインクラスを含みます。例えば、PluginArtefactBlogはPluginArtefactを拡張します。これは適切なAPIを実装します。プラグインタイプに応じて、他のクラスが必要になる場合があります。
  
'''次へ: '''[[Developer Area/Mahara Architecture Introduction/Core Components|'''Core Components''']]
+
'''次へ: '''[[開発者エリア/Maharaアーキテクチャインストラクション/コアコンポーネント|'''コアコンポーネント''']]
  
 
</div></div>
 
</div></div>
Line 63: Line 61:
 
===サブページ===
 
===サブページ===
  
* [[Developer_Area/Mahara_Architecture_Introduction/Core_Components|Core Components]]
+
* [[開発者エリア/Maharaアーキテクチャインストラクション/コアコンポーネント|コアコンポーネント]]
* [[Developer_Area/Mahara_Architecture_Introduction/Core_Subsystems|Core Subsystems]]
+
* [[開発者エリア/Maharaアーキテクチャインストラクション/コアサブシステム|コアサブシステム]]
[[Category:Developer Area]]
+
[[Category:開発者エリア]]

Latest revision as of 07:36, 7 November 2012

このドキュメントは、Maharaアーキテクチャの基本イントロダクションおよびアーキテクチャがどのようにコードに反映されているか、あなたに情報提供することを目的としています。このドキュメントを読んだ後、あなたはMaharaがどのように組み合わされているか、新しいプラグインまたはコアコードを書いて、どのように拡張するのか、合理的な理解を得ることができます。

概要

MaharaはPHPで書かれたウェブアプリケーションであり、Moodle、Drupal、phpBBに良く似ています。フレームワークのような機能を提供するため、いくつかのライブラリを使用しますが、それ自体はZendフレームワークのようなPHPフレームワークをベースとしているわけではありません。実際、あなたが作業するのに必要なデータベースライブラリおよびフォーム作成のフレームワーク、そしてあなたのカスタマイズに関してコアをハックしなくても済むようなプラグインアーキテクチャをMaharaは提供します。この意味で、MaharaはDrupalおよびMoodleのようなプラグイン着脱可能なソフトウェアと良く似ています。

Maharaへのリクエストは直接PHPスクリプトに向かいます。現在のところ、ディスパッチはありません。ホームページへのリクエストは、index.php等によって処理されます。これらのスクリプトはMaharaコアを読み込み、必要なデータを検索して、データ構造または必要なフォームを生成した後、表示のために渡します。どのPHPスクリプトがどのページを生成するのか簡単に探すことができるため、理解するのにシンプルなモデルです。「クリーンURL」の利点を逃すことになりますが、多くのウェブサーバに移植することができます。

Maharaのコンセプトの核となるものは「プラグイン」です。大部分のMaharaの機能、コア (core) 機能でさえ、プラグインを記述することで実装されています。そして、あなたが変更したいMaharaの部分がプラグインではない場合、Maharaは簡単にハック (hack 改造) できるよう、設計されています。

Hackability (ハックしやすさ)

Maharaは土台から最上部まで、高度に着脱可能な状態に設計されているため、簡単にハックすることができます。この理由から私たちはMaharaのコーディングに関して意図的にPHPを選択しました - PHPに詳しい多くの開発者が存在すること、そしてLAMPの積み重ね (stack) があるからです。MaharaはLinuxの代わりにSolaris/BSD/Mac、Apacheの代わりにNginx/Lighttpd、MySQLの代わりにPostgreSQL (推奨DBMSです) を使用できるように、様々なLAMP環境で動作させることができます。Maharaチームがそのような環境でテストすることはありませんが、WindowsおよびIIS環境下で動作させているユーザも存在します。パッチは歓迎します :)

パッチに関して言えば、Maharaはフリーのオープンソースソフトウェアです (恐らく、すでにあなたは知っていると思いますが)。チーム内には、新しい機能、バグフィックス、フォーラム投稿サポート、Maharaの一般的な改善等に毎日関わっている小さな開発部隊が存在します。開発部隊を取り囲んでいるのは、熱心なコミュニティ、翻訳者、ボランティア、開発者および様々な方法でMaharaを改善するユーザです - 新しい機能の開発からバグ報告まで、Maharaの使用に関して最善の方法を提案しています。重要な点は、Maharaがフリーソフトウェアであり、あなたは無条件に思いっきりハックできるということです!

プラグインシステム

Maharaアーキテクチャの重要な特徴はプラグインシステムです。Maharaのパーツすべてはプラグイン着脱可能です - ユーザが持つことのできるコンテンツから、ユーザの認証方法、検索の実装およびグループのワークまでがプラグイン着脱可能です。タイプ (次のセクションで詳細説明します) に関わらず、Mahara内のプラグインすべてはcronジョブの登録およびイベントの購読等、いくつかの機能を共有しています。極めて少ない数のサブシステムが実装されていることも、プラグインの作成を容易にしています。

プラグインタイプ

Maharaの部品がプラグイン着脱可能であるため、特にAPIはその目的に合致するため作成されました。例えば、検索APIではどのような検索結果が必要であるか取り扱うメソッドを提供するのに対して、ユーザコンテンツタイプAPIではコンテンツ自体およびコンテンツのオーナーシップを取り扱うメソッドを含みます。私たちはこれら異なるタイプのプラグインをコールすることができます。以下、いくつかの例です:

  • アーティファクト (artefact) プラグインタイプはユーザコンテンツを取り扱います (ユーザコンテンツのアイテムが「アーティファクト」呼ばれることが、この名称の由来です)。
  • 認証 (auth) プラグインにはユーザアカウントの正当性を確認するAPIがあります。
  • The ブロックタイプ (blocktype) プラグインタイプでは新しいタイプのブロックをシステムに装着できる方法 (pluggable way) を提供します。

Mahara 1.1では次のプラグインを利用できます: アーティファクト (artefact)、認証 (auth)、ブロックタイプ (blocktype)、インタラクション (interaction)、通知 (notification )、検索 (search)

このアプローチには、いくつかの素晴らしい点があります。例えば、プラグインの1つがシステムの一部の場合、私たちはシステム内の単一のプラグインすべてにどのAPIをサポートしているのか尋ねる必要はありません - 適切なタイプのプラグインのみが使用されます。プラグインタイプでは実際要件のため、私たちがAPIをカスタマイズすることができます。例えば、検索を扱うプラグインでは単に検索APIメソッドを実装するだけで良く、そのことに関して、ユーザコンテンツ、通知または他の機能を実装しないことに言及する必要はありません。

ディスク上では: それぞれのプラグインタイプは htdocs/ フォルダ内にディレクトリを持ちます。それぞれディレクトリには、lib.phpを含みます。

プラグイン

前のセクションを前提とした場合、プラグイン自体は単にプラグインタイプのインスタンスと言えます。例えばアーティファクトを例に挙げると、Maharaコアはブログ、ファイルマネージャ、レジュメおよびプロファイル情報のプラグインと共に提供されます。そして、通知において、Maharaは「内部」(ユーザの活動ログにメッセージを記録)、EメールおよびEメールダイジェストを持ちます。

それぞれのプラグインには少なくとも1つのクラス定義が含まれるlib.phpが提供されます。このクラスでは、プラグインがcronジョブおよびイベントを登録することができます。また、さらにそのプラグインタイプ固有の機能に接続することができます。例えば、アーティファクトプラグインではメインメニューに新しいメニューアイテムを追加することができます。

アーティファクトプラグインの場合、それぞれのプラグインでは必要なページを描写するための1つまたはそれ以上のPHPスクリプトを提供することができます。他のコンテンツアイテムの様々な属性を共有できる利点すべてを得ることができるのに加えて、このようにして、アーティファクトプラグインはコンテンツ管理のため、高度にカスタマイズしたインタフェースを提供することができます。

ディスク上: それぞれのプラグインは該当するプラグインタイプのサブディレクトリ配下にあるサブディレクトリに入ります。このディレクトリにはlib.phpおよびversion.php、そしてデータベーステーブルが必要な場合、db/ ディレクトリが入ります。いくつかのプラグインタイプでは、例えば、theme/ または blocktype/ のように他のディレクトリも含みます。

コード内: それぞれのプラグインのlib.phpには、プラグインを拡張するプラグインクラスを含みます。例えば、PluginArtefactBlogはPluginArtefactを拡張します。これは適切なAPIを実装します。プラグインタイプに応じて、他のクラスが必要になる場合があります。

次へ: コアコンポーネント

サブページ