Actions

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

From Mahara Wiki

No edit summary
 
(62 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スクリプトがどのページを生成するのか簡単に分かることができるため、理解するのにシンプルなモデルです。It's also portable across many web servers, though it misses the benefits of "clean URLs".
Maharaへのリクエストは直接PHPスクリプトに向かいます。現在のところ、ディスパッチはありません。ホームページへのリクエストは、index.php等によって処理されます。これらのスクリプトはMaharaコアを読み込み、必要なデータを検索して、データ構造または必要なフォームを生成した後、表示のために渡します。どのPHPスクリプトがどのページを生成するのか簡単に探すことができるため、理解するのにシンプルなモデルです。「クリーンURL」の利点を逃すことになりますが、多くのウェブサーバに移植することができます。


Maharaのコンセプトの核となるものは「プラグイン」です。The vast majority of Mahara's functionality - even core functionality - is implemented by writing plugins. And if the part of Mahara you wish to change is not pluggable, Mahara is designed to be easy to hack.
Maharaのコンセプトの核となるものは「プラグイン」です。大部分のMaharaの機能、コア (core) 機能でさえ、プラグインを記述することで実装されています。そして、あなたが変更したいMaharaの部分がプラグインではない場合、Maharaは簡単にハック (hack 改造) できるよう、設計されています。


</div><div id="section_2">
</div><div id="section_2">


==Hackability==
==Hackability (ハックしやすさ)==


Mahara has been designed from the ground up to be highly pluggable, and easy to hack. We deliberately chose to write Mahara in PHP for this reason - as there is a huge collection of developers who are familiar with PHP, and also the LAMP stack. Mahara can run on many variations LAMP, including swapping Linux for Solaris/BSD/Mac, Apache for Nginx/Lighttpd, and MySQL for PostgreSQL (which is the preferred DBMS to use). People have also got Mahara going under Windows and IIS, though the Mahara team doesn't explicitly test under such conditions. Patches are welcome :)
Maharaは土台から最上部まで、高度に着脱可能な状態に設計されているため、簡単にハックすることができます。この理由から私たちはMaharaのコーディングに関して意図的にPHPを選択しました - PHPに詳しい多くの開発者が存在すること、そしてLAMPの積み重ね (stack) があるからです。MaharaはLinuxの代わりにSolaris/BSD/Mac、Apacheの代わりにNginx/Lighttpd、MySQLの代わりにPostgreSQL (推奨DBMSです) を使用できるように、様々なLAMP環境で動作させることができます。Maharaチームがそのような環境でテストすることはありませんが、WindowsおよびIIS環境下で動作させているユーザも存在します。パッチは歓迎します :)


Speaking of patches, Mahara is free, open source software (as you probably already know). There is a small army of developers on the team working on new functionality, bug fixes, helping in the forums and generally improving Mahara every day. Surrounding them is a community of enthusiasts, translators, volunteers, developers and users who improve Mahara in many ways - from developing new features to reporting bugs to suggesting the best way to use Mahara. The point is, it's free software which means you're absolutely encouraged to hack it to death!
パッチに関して言えば、Maharaはフリーのオープンソースソフトウェアです (恐らく、すでにあなたは知っていると思いますが)。チーム内には、新しい機能、バグフィックス、フォーラム投稿サポート、Maharaの一般的な改善等に毎日関わっている小さな開発部隊が存在します。開発部隊を取り囲んでいるのは、熱心なコミュニティ、翻訳者、ボランティア、開発者および様々な方法でMaharaを改善するユーザです - 新しい機能の開発からバグ報告まで、Maharaの使用に関して最善の方法を提案しています。重要な点は、Maharaがフリーソフトウェアであり、あなたは無条件に思いっきりハックできるということです!


</div><div id="section_3">
</div><div id="section_3">


==Plugin System==
==プラグインシステム==


A key feature of Mahara's architecture is the plugin system. All sorts of parts of Mahara are pluggable - from the types of content users can have, to how users are authorised, right through to how search is implemented and how groups work. All plugins in Mahara, regardless of their '''type''' (more on that in the next section), share some functionality such as the ability to register cron jobs and subscribe to events. There are quite a few subsystems in place to make the job of writing plugins easier as well.
Maharaアーキテクチャの重要な特徴はプラグインシステムです。Maharaのパーツすべてはプラグイン着脱可能です - ユーザが持つことのできるコンテンツから、ユーザの認証方法、検索の実装およびグループのワークまでがプラグイン着脱可能です。'''タイプ''' (次のセクションで詳細説明します) に関わらず、Mahara内のプラグインすべてはcronジョブの登録およびイベントの購読等、いくつかの機能を共有しています。極めて少ない数のサブシステムが実装されていることも、プラグインの作成を容易にしています。


<div id="section_4">
<div id="section_4">


===Plugin Types===
===プラグインタイプ===


Where parts of Mahara are pluggable, an API has been created especially for that purpose. For example, the API for user content types contains methods dealing with the content itself and ownership of the content, while the searching API provides methods detailing what search results are required. We call all of these a different '''type''' of plugin. Here are some examples:
Maharaの部品がプラグイン着脱可能であるため、特にAPIはその目的に合致するため作成されました。例えば、検索APIではどのような検索結果が必要であるか取り扱うメソッドを提供するのに対して、ユーザコンテンツタイプAPIではコンテンツ自体およびコンテンツのオーナーシップを取り扱うメソッドを含みます。私たちはこれら異なる'''タイプ'''のプラグインをコールすることができます。以下、いくつかの例です:


* The '''artefact''' plugin type deals with user content (an item of user content is called an artefact, hence the name).
* '''アーティファクト (artefact) '''プラグインタイプはユーザコンテンツを取り扱います (ユーザコンテンツのアイテムが「アーティファクト」呼ばれることが、この名称の由来です)
* The '''auth''' plugin type has an API for authorising user accounts.
* '''認証 (auth)''' プラグインにはユーザアカウントの正当性を確認するAPIがあります。
* The '''blocktype''' plugin type provides a pluggable way to put new types of block into the system.
* The '''ブロックタイプ (blocktype)''' プラグインタイプでは新しいタイプのブロックをシステムに装着できる方法 (pluggable way) を提供します。


As of Mahara 1.1, the following plugin types are available: artefact, auth, blocktype, grouptype, interaction, notification and search.
Mahara 1.1では次のプラグインを利用できます: アーティファクト (artefact)、認証 (auth)、ブロックタイプ (blocktype)、インタラクション (interaction)、通知 (notification )、検索 (search)


This approach has some nice benefits. For example, in parts of the system where one of the plugin types is being used, we don't have to ask every single plugin in the system whether it supports the API - only plugins of the correct type will be used. Plugin types also allows us to customise the API for the actual requirements. For example, a plugin dealing with search can just implement the search API methods, and doesn't have to say that it doesn't support user content, notifications or anything else for that matter.
このアプローチには、いくつかの素晴らしい点があります。例えば、プラグインの1つがシステムの一部の場合、私たちはシステム内の単一のプラグインすべてにどのAPIをサポートしているのか尋ねる必要はありません - 適切なタイプのプラグインのみが使用されます。プラグインタイプでは実際要件のため、私たちがAPIをカスタマイズすることができます。例えば、検索を扱うプラグインでは単に検索APIメソッドを実装するだけで良く、そのことに関して、ユーザコンテンツ、通知または他の機能を実装しないことに言及する必要はありません。


On disk: Each plugin type has a directory in the htdocs/ folder. Each of these directories contains a lib.php
ディスク上では: それぞれのプラグインタイプは htdocs/ フォルダ内にディレクトリを持ちます。それぞれディレクトリには、lib.phpを含みます。


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


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


Given the previous section, the plugins themselves are simply instances of a plugin type. So for example, for artefact, the Mahara core ships with plugins for blogs, a file manager, resume and profile information. And in notification, Mahara has 'internal' (which logs messages to a user's activity log), email and emaildigest.
前のセクションを前提とした場合、プラグイン自体は単にプラグインタイプのインスタンスと言えます。例えばアーティファクトを例に挙げると、Maharaコアはブログ、ファイルマネージャ、レジュメおよびプロファイル情報のプラグインと共に提供されます。そして、通知において、Maharaは「内部」(ユーザの活動ログにメッセージを記録)、EメールおよびEメールダイジェストを持ちます。


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を実装します。プラグインタイプに応じて、他のクラスが必要になる場合があります。


'''Next: '''[[Developer Area/Mahara Architecture Introduction/Core Components|'''Core Components''']]
'''次へ: '''[[開発者エリア/Maharaアーキテクチャインストラクション/コアコンポーネント|'''コアコンポーネント''']]


</div></div>
</div></div>


===Subpages===
===サブページ===


* [[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を実装します。プラグインタイプに応じて、他のクラスが必要になる場合があります。

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

サブページ