Actions

開発者エリア/Maharaアーキテクチャイントロダクション

From Mahara Wiki

このドキュメントはMaharaアーキテクチャの基本情報およびコードの繋がりの情報提供を目的としています。このドキュメントを読むことにより、Maharaの連携、プラグイン開発による拡張、コアコードのハッキングに関して理解できます。

概要

MaharaはPHPで書かれたウェブアプリケーションであり、Moodle、Drupal、phpBB等に良く似ています。フレームワークのような機能を提供するため、Maharaはいくつかのライブラリを提供しますが、これ自体はZendフレームワークのようなPHPのフレームワークをベースにしていません。実際のところ、Maharaはデータベースアクセスおよびフォーム構築のようなフレームワークを提供しています。そして、あなたはその中で作業を進める必要があります。また、プラグインアーキテクチャにより、あなたのカスタマイズはコアコードの改変を避けることができます。この点において、MaharaはDrupalおよびMoodleのようなプラグイン設置可能なソフトウェアに非常に類似しています。

Maharaへのリクエストは特定のPHPスクリプトにヒットします。現在、ディスパッチャはありません。ホームページへのリクエストはindex.php等により扱われます。これらのスクリプトはMaharaコアを読み込んで、必要なデータを検索して、必要なデータ構造またはフォームを生成して、それらを表示するためテンプレータに渡しています。これはどのPHPスクリプトがどのページを生成するのかを簡単に把握できるシンプルなモデルです。「クリーンURL」の利点を失うことになりますが、多くのウェブサイトにとって移植可能な方法でもあります。

Maharaコアのコンセプトはプラグインです。仮にコア機能であったとしても、Maharaの大部分の機能はプラグインを書いた上で実装されています。そして、あなたが変更したいMaharaの一部分がプラグインに対応していない場合、Maharaは簡単に改変できるよう設計されています。

ハッカビリティ

Maharaは基本部分からすべてにおいて、高度に着脱および簡単に改造できるよう設計されています。PHPおよびLAMPスタックに慣れた多くの開発者が存在するため、私たちはMaharaを意図的にPHPで書くようにしました。MaharaはLinuxからSolaris/BSD/Macへの移行、ApacheからNginx/Lighttpdへの移行、およびMySQLからPostgreSQL (推奨DBMS) への移行も含めて、多くの様々なLAPM環境で動作させることができます。Maharaチームが厳密にテストしたわけではありませんが、MaharaをWindowsおよびIISで動作させた人もいます。パッチも歓迎します :)

パッチに関して話しますと、すでにご存知のようにMaharaは無料のオープンソースです。Maharaの小規模開発部隊は新しい機能、バグ修正、フォーラムでのサポート、Maharaの一般的な改善に日々携わっています。新しい機能の開発からMaharaの最良な利用の提案に関するバグレポートの投稿等、開発部隊のまわりには熱心なコミュニティ、翻訳者、ボランティア、開発者および多くの部分でMaharaの改善に尽力するユーザがいます。重要な点はMaharaがフリーソフトウェアであり、あなたが思う存分ハック (改造) できることです!

プラグインシステム

Maharaアーキテクチャの重要な特徴はプラグインシステムであることです。ユーザのコンテンツタイプからユーザ認証方法、検索方法の実装、グループの運用方法まで、Maharaのすべての部品は脱着可能です。Maharaのすべてのプラグインは「タイプ」 (次のセクションで説明します) に関わらずcronジョブの登録およびイベントの予約のような機能を共有しています。プラグインを書く作業が簡単になるよう、すぐに使える多くのサブシステムもあります。

プラグインタイプ

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

  • アーティファクトプラグインタイプではユーザのコンテンツを取り扱います (ユーザコンテンツのアイテムはアーティファクトと呼ばれるため、このプラグイン名となりました)。
  • 認証プラグインタイプはユーザアカウントの認証のためのAPIです。
  • ブロックタイププラグインタイプはシステムへの着脱可能な新しいタイプのブロックの設置を提供します。

Mahara 1.1では次のタイプのプラグインを利用できます: アーティファクト、認証、ブロックタイプ、グループタイプ、インタラクション、通知および検索。

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

ディスク上では: プラグインタイプは「htdocs/」フォルダ (ディレクトリ) 内にそれぞれディレクトリを持ちます。これらすべてのディレクトリにはlib.phpが含まれます。

プラグイン

前のセクションを前提とした場合、プラグイン自体は単にプラグインタイプのインスタンスでしかありません。ですから、例えばアーティファクトの場合、Maharaコアにはブログ、ファイルマネージャ、レジュメおよびプロファイル情報が同梱されます。そして通知においてMaharaには「内部」 (ユーザの活動ログへのログメッセージを記録)、メールおよびメールダイジェストがあります。

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

アーティファクトプラグインに関して言えば、それぞれのプラグインはページ描写に必要な1つまたはそれ以上のPHPスクリプトも提供します。このようにしてアーティファクトプラグインはコンテンツを管理するための高度なカスタムインターフェースを提供しながら、コンテンツのほかのアイテムと様々なプロパティを共有できる利点を獲得しています。

ディスク上: それぞれのプラグインは適切なプラグインタイプサブディレクトリのサブディレクトリです。lib.phpおよびversion.php、そしてデータベーステーブルを必要とする場合、「db/」ディレクトリが提供されます。いくつかのプラグインタイプには他のディレクトリもあります - 例) theme/ または blocktype/

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

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

サブページ