Actions

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

From Mahara Wiki

 
(38 intermediate revisions by the same user not shown)
Line 1: Line 1:
作成中です - [[User:Mits|mits]] ([[User talk:Mits|talk]])
このドキュメントはMaharaアーキテクチャの基本情報およびコードの繋がりの情報提供を目的としています。このドキュメントを読むことにより、Maharaの連携、プラグイン開発による拡張、コアコードのハッキングに関して理解できます。
 
このドキュメントはあなたにMaharaアーキテクチャの基本的な情報およびコードとの繋がりを提供することを目的としています。このドキュメントを読むことにより、あなたはMaharaの連携、プラグインの開発による拡張、コアコードのハッキングに関して理解することができます。


<div id="section_1">
<div id="section_1">


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


MaharaはPHPで書かれたウェブアプリケーションであり、Moodle、Drupal、phpBB等に良く似ています。フレームワークのような機能を提供するため、Maharaはいくつかのライブラリを提供しますが、これ自体はZendフレームワークのようなPHPのフレームワークをベースにしていません。実際のところ、Maharaはデータベースアクセスおよびフォーム構築のようなフレームワークを提供しています。そして、あなたはその中で作業を進める必要があります。また、プラグインアーキテクチャによりあなたのカスタマイズはコアコードの改変を避けることができます。この点において、MaharaはDrupalおよびMoodleのようなプラグイン設置可能なソフトウェアに非常に類似しています。
Maharaへのリクエストは特定のPHPスクリプトにヒットします。現在、ディスパッチャはありません。ホームページへのリクエストはindex.php等により扱われます。これらのスクリプトはMaharaコアを読み込んで、必要なデータを検索して、必要なデータ構造またはフォームを生成して、それらを表示するためテンプレータに渡しています。これはどのPHPスクリプトがどのページを生成するのかを簡単に把握できるシンプルなモデルです。「クリーンURL」の利点を失うことになりますが、多くのウェブサイトにとって移植可能な方法でもあります。


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


</div><div id="section_2">
</div><div id="section_2">
Line 17: Line 14:
==ハッカビリティ==
==ハッカビリティ==


Maharaは基本部分からすべてにおいて高度に着脱および簡単に改造できるよう設計されています。PHPおよびLAMPスタックに慣れている多くの開発者が存在しているため、私たちはMaharaを意図的にPHPで書くようにしました。MaharaはLinuxからSolaris/BSD/Macへの移行、ApacheからNginx/Lighttpdへの移行、およびMySQLからPostgreSQL (推奨DBMS) への移行も含めて、多くの様々なLAPMで動作させることができます。Maharaチームが厳密にテストしたわけではありませんが、MaharaをWindowsおよびIISで動作させた人もいます。パッチは歓迎します :)
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の一般的な改善に日々携わっています。新しい機能の開発からMaharaの最良な利用の提案に関するバグレポートの投稿等、開発部隊のまわりには熱心なコミュニティ、翻訳者、ボランティア、開発者および多くの部分でMaharaの改善に尽力するユーザがいます。重要な点はMaharaがフリーソフトウェアであり、あなたが思う存分ハック (改造) できることです!


</div><div id="section_3">
</div><div id="section_3">
Line 25: Line 22:
==プラグインシステム==
==プラグインシステム==


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


<div id="section_4">
<div id="section_4">
Line 31: Line 28:
===プラグインタイプ===
===プラグインタイプ===


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


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


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


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


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


</div><div id="section_5">
</div><div id="section_5">


===プラグイン Plugins===
===プラグイン===


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


Each plugin has to provide a lib.php, which contains at least one class definition. This class allows the plugin to register cron jobs and events, and also hook into more specific functionality for that plugin type. For example, artefact plugins can register new menu items for the main menu.
それぞれのプラグインでは少なくとも1つのクラス定義を含むlib.phpファイルを提供する必要があります。このクラスはプラグインによるcronジョブおよびイベント登録を可能とします。また、そのプラグインタイプのさらに特別な機能を引き込むこともできます。例えばアーティファクトプラグインにはメインメニューに新しいメニューアイテムを追加できます。


In the case of artefact plugins, each plugin can also provide one or more PHP scripts that render pages it requires. In this way, artefact plugins can present highly custom interfaces for managing content, while gaining all the benefits of sharing various properties with other items of content.
アーティファクトプラグインに関して言えば、それぞれのプラグインはページ描写に必要な1つまたはそれ以上のPHPスクリプトも提供します。このようにしてアーティファクトプラグインはコンテンツを管理するための高度なカスタムインターフェースを提供しながら、コンテンツのほかのアイテムと様々なプロパティを共有できる利点を獲得しています。


'''On disk:''' Each plugin is a subdirectory under the appropriate plugin type subdirectory. 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/


'''In code:''' 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が実装されます。他のクラスはプラグインタイプによっては必要な場合があります。


'''次へ: '''[[開発者エリア/Maharaアーキテクチャイントロダクション/コアコンポーネント|'''コアコンポーネント''']]
'''次へ: '''[[開発者エリア/Maharaアーキテクチャイントロダクション/コアコンポーネント|'''コアコンポーネント''']]
Line 62: Line 59:


===サブページ===
===サブページ===
* [[Developer_Area/Mahara_Architecture_Introduction/Core_Components|Core Components]]
* [[開発者エリア/Maharaアーキテクチャイントロダクション/コアコンポーネント|コアコンポーネント]]
* [[開発者エリア/Maharaアーキテクチャイントロダクション/コアコンポーネント|コアコンポーネント]]
* [[Developer_Area/Mahara_Architecture_Introduction/Core_Subsystems|Core Subsystems]]
* [[開発者エリア/Maharaアーキテクチャイントロダクション/コアサブシステム|コアサブシステム]]
* [[開発者エリア/Maharaアーキテクチャイントロダクション/コアサブシステム|コアサブシステム]]
[[Category:開発者エリア]]
[[Category:開発者エリア]]

Latest revision as of 20:29, 21 July 2019

このドキュメントは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が実装されます。他のクラスはプラグインタイプによっては必要な場合があります。

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

サブページ