開発者エリア/Maharaアーキテクチャインストラクション
From Mahara Wiki
作成中です - mits
このドキュメントは、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を実装します。プラグインタイプに応じて、他のクラスが必要になる場合があります。
次へ: コアコンポーネント