Actions

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

From Mahara Wiki

(23 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
作成中です - [[User:Mits|mits]] ([[User talk:Mits|talk]])
 
作成中です - [[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 16:
 
==ハッカビリティ==
 
==ハッカビリティ==
  
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 39: Line 40:
 
Mahara 1.1では次のタイプのプラグインが利用可能です: アーティファクト、認証、ブロックタイプ、グループタイプ、インタラクション、通知および検索。
 
Mahara 1.1では次のタイプのプラグインが利用可能です: アーティファクト、認証、ブロックタイプ、グループタイプ、インタラクション、通知および検索。
  
このアプローチにはいくつかの素晴らしい利点があります。例えばシステムの一部としてプラグインの1つが使用された場合、私たちはそれぞれのプラグインにAPIをサポートするかどうか尋ねる必要はありません - 正しいタイプのプラグインのみが使用されます。実際の必要条件のため、私たちはプラグインタイプでAPIをカスタマイズすることができます。例えば検索を扱うプラグインは検索APIメソッドを実装するだけであり、ユーザコンテンツ、通知または他の関連する内容をサポートしないと伝える必要はありません。
+
このアプローチにはいくつかの素晴らしい利点があります。例えばシステムの一部としてプラグインの1つが使用された場合、私たちはそれぞれのプラグインにAPIをサポートするかどうか尋ねる必要はありません - 正しいタイプのプラグインのみが使用されます。実際の必要条件のため、私たちはプラグインタイプでAPIをカスタマイズできます。例えば検索を扱うプラグインは検索APIメソッドを実装するだけであり、ユーザコンテンツ、通知または他の関連する内容をサポートしないと伝える必要はありません。
  
 
ディスク上では: プラグインタイプは「htdocs/」フォルダ内にそれぞれディレクトリを持ちます。これらすべてのディレクトリにはlib.phpが含まれます。
 
ディスク上では: プラグインタイプは「htdocs/」フォルダ内にそれぞれディレクトリを持ちます。これらすべてのディレクトリにはlib.phpが含まれます。
Line 51: Line 52:
 
それぞれのプラグインでは少なくとも1つのクラス定義を含むlib.phpファイルを提供する必要があります。このクラスはプラグインによるcronジョブおよびイベントの登録を許可します。また、そのプラグインタイプのさらに特別な機能を引き込むこともできます。例えばアーティファクトプラグインではメインメニューに新しいメニューアイテムを追加できます。
 
それぞれのプラグインでは少なくとも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.
+
'''コード内 In code:''' それぞれのプラグインのlib.phpにはプラグインを拡張するプラグインクラスが含まれます。例えば、PluginArtefactBlogはPluginArtefactを拡張します。これにより適切なAPIが実装されます。他のクラスはプラグインタイプによっては必要な場合があります。Other classes may be necessary depending on the plugin type.
  
 
'''次へ: '''[[開発者エリア/Maharaアーキテクチャイントロダクション/コアコンポーネント|'''コアコンポーネント''']]
 
'''次へ: '''[[開発者エリア/Maharaアーキテクチャイントロダクション/コアコンポーネント|'''コアコンポーネント''']]

Revision as of 20:08, 18 June 2019

作成中です - mits (talk)

このドキュメントは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が含まれます。

プラグイン Plugins

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

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

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

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

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

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

サブページ