Sugarソースコードの歩き方

出典: SugarForum.jp

Sugarは現在、ver.4までの旧体制から、ver.5からの新体制への転換期にあります。そのため、初めてソースコードを見ると開発の意図がつかめない場合も少なくありません。そんなときは、新しい部分と古い部分をよりわける嗅覚が大事です。ver.5では Sugar StudioModule Builder に代表されるように、ユーザレベルでのカスタマイズが重視されます。また、開発スタイルもver.5に準じた方が、フレームワークとして成熟してきた分、整理されたものになります。最初から含まれるモジュールは、旧バージョンからあるものばかりなので、当然古いコードが多く含まれています。中には、堂々と一度もコールされない関数が残っていたりしますので、ご注意を。

includeディレクトリの中身を見ていると、ListView2だとかEditView2といった具合に、「2」がついたファイルやクラスが見つかります。これらのほとんどは、Studioに対応し、レイアウト定義の使用を前提に書き換えられたクラス群です。「2」のついていない方は、互換性のために残されている古いクラスです。(カスタマイズの柔軟性をとってあえて古いクラスを使う場合もあります)


目次

ソースコードの辿り方

Sugarでは、

  • index.php
  • Entry.php
  • SugarApplication.php
  • SugarController.php
  • SugarView.php
  • 画面出力

といった処理の流れはどの場面でも共通です。Ajaxによる呼出の場合も基本は変わりません。

この流れの要所要所で、モジュールの中身(Sugarクラスやレイアウト定義)が呼び出されることになります。ドキュメントがない場合や、動作がおかしい場合、この流れを遡ってコードを見ていけば、状況が把握できるはずです。旧体制のコードに惑わされないようがんばりましょう:-)


単数形と複数形

Sugarでは、定義ファイルやクラス名について、単数形と複数形を厳密に分けています。

  • 複数形 : モジュール名称、テーブルの名称など
  • 単数形 : Sugarクラスの名称

※Casesモジュールなどは、'case'がPHPの予約語にあたるため、クラス名をわざわざ'aCase'などとしています。

その他、関係を表記する時も単複を使い分けます。

  • 多対多関係 : <複数形>_<複数形>
  • 一対多関係 : <単数形>_<複数形>
  • 一対一関係 : <単数形>_<単数形>

なお、Module Builderで自動生成されるモジュールは、これらの原則に従わないようです。自動生成されたモジュールを足がかりに開発を進めようと考えている場合は、注意が必要です。


データベースのテーブル

Sugarを読み解くのに、データベースのテーブルは重要です。100近いテーブルが生成されますが、

  • オブジェクトテーブル : オブジェクトのデータが保存されているテーブル
  • リレーションテーブル : 多対多関係が表現されたテーブル
  • カスタムフィールドテーブル : カスタムフィールドのデータが保存されているテーブル
  • 監査テーブル : 監査情報(変更履歴)が記録されたテーブル
  • システムテーブル : それ以外のシステムの運用に必要なテーブル

に分けて見ると全体が把握しやすくなります。(ここで挙げた名称は一般的ではありません。仮のものとします) オブジェクトテーブルの見分け方は簡単です。モジュール名をすべて小文字にしたものが該当します。リレーションテーブルは SugarRoot/metadata/ フォルダ内に配置されたメタデータと対応します。モジュール名がハイフンでつながれたテーブルが該当します。カスタムフィールド・監査テーブルはそれぞれきまった接尾辞が付きます。そして、それ以外がシステムテーブルです。

  • オブジェクトテーブルの例: accounts, contacts, users, ...etc.
  • リレーションテーブルの例: accounts_contacts
  • カスタムフィールドテーブルの例: contacts_cstm
  • 監査テーブルの例: contacts_adts
  • システムテーブルの例: relations, field_meta_data,

カスタムフィールドテーブル

カスタムフィールドテーブルは、Sugarをインストールした直後には存在しません。Studioでカスタムフィールドを追加するとSugarが自動的に作成します。

システムテーブル

システムテーブルの中で、重要なものがいくつかあります。

  • relations : verdefsで定義されたテーブル間の関係はここに保持されます。開発者が直接このテーブルを触る必要はなく、sugarが内容を自動生成します。テーブルをうまくjoinできないときは、このテーブルに正しくレコードが追加されているか確認します。
  • field_meta_data : カスタムフィールドの定義です。カスタムフィールドはverdefsファイルを持たないため、このテーブルが参照されます。このテーブルに記録された定義を元に、カスタムフィールドテーブルが生成されます。

おさえておきたいこと

など。


最終更新 17:38, 2008年1月23日 (水)。   このページは 5,992 回アクセスされました。