第3回 ソースコードを読む前に知っておきたい基本動作
河村 嘉之
オープンソースCRM株式会社
2008/11/7
ソースコードに見るSugarCRMの動作
SugarCRMでは、WebブラウザからのリクエストをSugarControllerが受け取り、SugarBeanを呼び出して、その結果の情報とリクエストを基にSugarViewにページの生成を依頼しています。
図2 SugarCRMのMVCアーキテクチャ |
ここからはソースコードを追いながら、この動作を少し詳しく見ていきましょう。
SugarCRMは、モジュールやアクションによってデフォルトと異なる処理を加えることができますが、あまり脇道にそれてしまうと分かりにくくなってしまうので、ここではデフォルトの動作を中心に説明します。まだSugarCRMをダウンロードしていない方は、http://www.osscrm.com/demo/download.shtmlからダウンロードしてください。
先ほどのエンドポイントの項目で説明したように、SugarCRMのリクエストの大部分はindex.phpをターゲットに送信されます。そこで、基本動作を理解する最初の一歩として、このファイルを見てみましょう。
SugarCRMのトップディレクトリにあるindex.phpでは、SugarApplication(include/MVC/SugarApplication.php)というオブジェクトを作成し、そのexecuteメソッドを実行しています。SugarApplicationのexecuteメソッドでは、指定されたモジュールに対するコントローラを作成し、そのexecuteメソッドを実行しています。
デフォルトのコントローラであるSugarControllerのexecuteメソッドでは最初にprocessメソッドを呼び、その結果を基に表示するページを生成するprocessViewメソッドを呼び出すか、もしくは別のURLで指定されたページへ遷移します。
processメソッドでは、モジュールに合わせたSugarBeanを作成し、アクションに対応するコントローラのメソッドが呼ばれて、そこから必要に応じてSugarBeanのメソッドを呼び出します。具体的には、pre_<アクション名>、action_<アクション名>、post_<アクション名>というメソッドがコントローラに実装されている場合は、それが順番に呼ばれていきます。
例えばsaveアクションに対しては、pre_save、action_save、post_saveメソッドが呼ばれて、action_saveメソッドの中で対応するSugarBeanの保存メソッドが呼ばれます。これらの処理を実行し、その結果を基に次に表示するページを決定します。
processViewメソッドでは、processメソッドの実行結果からページのタイプに対応したSugarViewを取得し、そのprocessメソッドを実行します。
SugarViewのprocessメソッドでは、ページの定義情報を読み込むなどの表示の下準備をするpreDisplayメソッド、ページを生成するdisplayメソッドが呼ばれていきます。ここでページが生成され、ブラウザにレスポンスとして送られて初めて、ページが表示されます。
MVCモデルを導入したことにより、それぞれのコンポーネントの役割が明確になり、全体としての見通しがよくなりました。共通のロジックも1カ所にまとめられるため、ソースコードの保守性も高くなっています。
また、モジュールやアクションに応じて特別な処理を加えたい場合も、基盤クラスを継承したクラスを作成して、ルールに従った名前のファイルを置くだけで読み込まれるため、効率よく行うことができます。
一方で、依然として旧来のバージョンの仕組みで書かれたモジュールもサポートされています。それに対応する処理も織り交ぜなければいけないため、SugarCRMのソースコードの可読性を下げている面は否めません。
応用の前に動作の骨子を把握しよう
今回は、SugarCRMがどのように動くかを追いながら、ソースコードの構成や基本的な動作について見ました。ソースコード構成や動作原理、名前付けのルールなど基本的なポイントが分かったので、ソースコードの中のどこを追っていくべきかを押さえることができたのではないでしょうか?
SugarCRMでは、モジュールやタイプごとにどのような項目をページに表示するかを、定義情報を基に柔軟に変更することができます。次回は、表示関連の定義について説明しようと思います。
コラム■Sugar 5.0.0h日本語版リリース | |
2008年11月に「Sugar Community Editionバージョン5.0日本語版」向けの最新パッチ、5.0.0hが公開されました。 今回のパッチでは、英語版5.0.0h相当のバグ修正に加え、多言語環境で発生する不具合に対する修正も多数取り込んでいます。こちらのサイト(http://www.osscrm.com/demo/download.shtml)から入手できますので、ぜひダウンロードしてみてください。 日本語版のパッチは、米SugarCRM社から提供されるパッチをベースに、パッチに含まれる不具合の重要度を見ながら、オープンソースCRM社が作成しています。このパッチには、英語以外の言語で発生する不具合の修正も日本側で独自に追加しています。SugarCRMの不具合を見つけた場合は、ぜひ日本語フォーラムにご報告ください(ダウンロードやフォーラムの利用にはユーザー登録が必要です)。
|
3/3 |
|
||||||
|
Linux Square全記事インデックス |
Linux Squareフォーラム 仮想化技術関連記事 |
連載:実践! Xenで実現するサーバ統合 有力な仮想化技術として注目を集めるようになった「Xen」。このXenを活用してサーバ統合を実践していく手順を具体的に紹介します |
|
特集:サーバの仮想化技術とビジネス展開の可能性 jailからUML/VMwareまで 1台のマシンで複数のサーバを動かす「仮想化技術」。VMwareやUMLの登場により、WebサイトだけでなくOS自体を仮想化できるようになった |
|
特集:仮想化技術のアプローチと実装 VMwareから要注目技術Xenまで 1台のサーバで複数の仮想マシンを実行する仮想化技術は、空間コストを引き下げる可能性を持つ。最新の仮想化技術を概観してみよう |
|
特集:仮想OS「User Mode Linux」活用法 技術解説からカーネルカスタマイズまで Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説 |
|
特集:仮想化技術の大本命「Xen」を使ってみよう インストール & Debian環境構築編 高いパフォーマンスで本命の1つとなった仮想マシンモニタ「Xen」。日本語による情報が少ないXenを、実際に動かしてみよう |
|
特集:仮想化技術の大本命「Xen」を使ってみよう Xen対応カスタムカーネル構築編 Xen環境およびその上で動作する仮想マシン用カーネルを自分で構築しよう。これにより、自由にカスタマイズしたカーネルを利用できる |
|
特集:IPv6、UML、セキュリティ機能の統合 全貌を現したLinuxカーネル2.6[第4章] 今回は、これまでに紹介し切れなかった機能を一気に紹介する。これを読めば、カーネル2.6の正式リリースが楽しみになるだろう |
|
Linux Squareプロダクトレビュー VMware Workstation 4 PC/AT互換機エミュレータとして不動の地位を築いたVMware。その新バージョンがリリースされた。新機能を早速試してみよう |
|
古くて新しい「サーバ仮想化技術」の行方 サーバ仮想化を実現するための技術がソフトウェア、ハードウェアの両面で出そろってきた。ハイパーバイザーのさらなる高速化に向けた動きを紹介する |
|
Linux Squareフォーラム全記事インデックス |
- 【 pidof 】コマンド――コマンド名からプロセスIDを探す (2017/7/27)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンド名からプロセスIDを探す「pidof」コマンドです。 - Linuxの「ジョブコントロール」をマスターしよう (2017/7/21)
今回は、コマンドライン環境でのジョブコントロールを試してみましょう。X環境を持たないサーバ管理やリモート接続時に役立つ操作です - 【 pidstat 】コマンド――プロセスのリソース使用量を表示する (2017/7/21)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、プロセスごとのCPUの使用率やI/Oデバイスの使用状況を表示する「pidstat」コマンドです。 - 【 iostat 】コマンド――I/Oデバイスの使用状況を表示する (2017/7/20)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
|
|