【第1回】Architecture Canvasの基礎と命名規約|OutSystems Architecture Specialist 合格対策

ArchitectureSpecialist(O11)

1. Architecture Canvasとは何か?

Architecture Canvasは、アプリケーションアーキテクチャを体系的かつ迅速に設計するための3層(以前は4層)のフレームワークです。その主な目的は以下の3点に集約されます。

  1. 正しい抽象化:再利用可能なサービスやコンポーネントを適切に抽出する。
  2. ライフサイクルの独立性:各モジュールが他の影響を受けずに独立して進化・デプロイできるようにする。
  3. 変更影響の最小化:一箇所の変更がシステム全体に波及する「スノーボール効果」を防ぐ。

📝 OS11における重要な変更点

OutSystems 11以降では、画面参照が「弱い依存関係」となったため、かつて存在したOrchestration(オーケストレーション)レイヤーは非推奨となり、現在は3つの主要なレイヤーで構成されています。

2. 3つのレイヤーの役割を深く知る

Architecture Canvasは、上から「End-User」「Core」「Foundation」の3層に分かれています。それぞれの層には配置すべき要素が厳格に定められています。

① End-Userレイヤー(ユーザーインターフェース層)

ユーザーとの直接的なインターフェース(UI)やプロセスをサポートする層です。

項目 内容
主な要素 画面(Screens)、特定のユースケースに特化したビジネスプロセス、UIステータスを保持するためのエンティティなど
重要ルール このレイヤーは他のモジュールにサービスを提供してはいけない。他のEnd-Userモジュールから参照されると、ライフサイクルの独立性が損なわれる

② Coreレイヤー(コアビジネス層)

ビジネス概念(例:患者、注文、製品)に基づいたサービスやビジネスルールを保持する層です。

項目 内容
主な要素 ビジネスエンティティ、CRUDアクションをカプセル化したアクション、ビジネス固有のUIブロック(Core Widgets)
ベストプラクティス 公開するエンティティは「Read Only = Yes」に設定し、データの操作は必ずカプセル化されたアクション経由で行う。これにより、データの整合性と監査(オーディット)の強制が可能になる

③ Foundationレイヤー(基盤層)

外部システムへの接続や、ビジネスに依存しない(Business Agnostic)非機能的な要件を扱う最下層です。

項目 内容
主な要素 外部APIをラップする統合サービス(Integration Services)、汎用ライブラリ、共通UIパターン、テーマ(Look & Feel)
注意点 このレイヤーにはビジネスロジックやビジネス固有のエンティティを配置してはいけない

3. パターンの正規化:命名規約(サフィックス)の活用

モジュールの性質を一目で判断し、チーム間のコミュニケーションを円滑にするために、命名規約(サフィックス)の採用が強く推奨されます。これは、Discoveryツールなどの検証ツールがレイヤーを自動分類するための基準にもなります。

レイヤー サフィックス 解説
Foundation _is Integration Service:外部システムとの接続をラップし、OutSystems内で扱いやすい形に正規化します。
_lib Library:ビジネスに依存しない汎用的なユーティリティやプラグインです。
_th Theme:アプリケーションの共通のルック&フィール(CSS、ロゴ、レイアウト)を定義します。
_pat Pattern:再利用可能なUIパターン(カレンダー、アコーディオンなど)を保持します。
Core _CS Core Service:ビジネスエンティティとその操作アクションをカプセル化します。
_BL Business Logic:複数のコアサービスを組み合わせて複雑なビジネスルールやオーケストレーションを実現します。
_sync Synchronization:モバイルのローカルストレージとサーバー間のデータ同期ロジックを分離します。
_Eng Engine:計算量が多く非常に技術的なビジネスルール(保険シミュレータなど)を分離します。

📝 モバイル専用モジュールの場合

サフィックスの前に M を付けます。(例:_MTH_MCS

4. モジュール間の依存関係を検証する3つのルール

設計がArchitecture Canvasに従っているかを判断するために、以下の3つの検証ルールを遵守しなければなりません。

🚫 ルール1:上方参照禁止(No Upward References)

下位レイヤーのモジュールが上位レイヤーを参照してはいけません。これが破られると、デプロイ時に不要なモジュールまで芋づる式に引き連れる「巨大なクラスター」が発生します。

🚫 ルール2:End-User間サイド参照禁止(No Side References)

画面遷移(弱い参照)を除き、End-Userモジュール同士で要素を直接参照してはいけません。再利用したい要素がある場合は、Coreレイヤーへ昇格させるべきです。

🚫 ルール3:循環参照禁止(No Cycles)

CoreやFoundationレイヤー内であっても、モジュールAがBを参照し、BがAを参照するような構成は避けるべきです。これは概念の抽象化が不十分であることを示しています。

第1回のまとめ

✅ この回のポイント

Architecture Canvasは単なる図ではなく、「変更に強く、メンテナンスしやすいシステム」を作るための地図です。正しいレイヤーへの配置と、命名規約による「パターンの正規化」を徹底することで、開発スピードと品質を両立させることができます。

復習問題:実力チェック!

▶ 問1:顧客の住所情報を管理するエンティティと、その登録・更新ロジックを実装するモジュールに最適なサフィックスはどれですか?
A. _is  B. _CS  C. _th  D. _BL

正解:B(_CS)

_CS(Core Service)はビジネスコンセプトをカプセル化するコアサービスに使用します。顧客データとその操作ロジックはビジネスエンティティそのものであるため、Core Serviceが最適です。

▶ 問2:OutSystems 11において、以前のキャンバスから削除(非推奨化)されたレイヤーはどれですか?
A. Coreレイヤー  B. Foundationレイヤー  C. Orchestrationレイヤー  D. End-Userレイヤー

正解:C(Orchestrationレイヤー)

OS11では画面遷移が「弱い参照」となったため、複数のUIを統合するOrchestrationレイヤーは不要となり、非推奨となりました。

▶ 問3:外部のSAPシステムからデータを取得し、データ構造を標準化する機能を担当するモジュールはどのレイヤーに配置すべきですか?
A. End-Userレイヤー  B. Coreレイヤー  C. Foundationレイヤー  D. どのレイヤーでも良い

正解:C(Foundationレイヤー)

外部システム連携やデータの正規化はFoundationレイヤー(_is:Integration Service)の役割です。ビジネスロジックを持たない純粋な接続レイヤーとして設計します。

▶ 問4:モジュール間で「循環参照」が発生している場合、設計上の何に問題があることを示唆していますか?
A. ライセンスの消費が多すぎる  B. コンセプトの抽象化が正しく行われていない  C. CSSの適用が間違っている  D. モジュールの名前が長すぎる

正解:B(コンセプトの抽象化が正しく行われていない)

循環参照はコンセプトの分離が不適切であることを示します。共通する概念を下位レイヤーのモジュールとして切り出すことで解消できます。

▶ 問5:Coreレイヤーにフロントエンドの「画面(Screens)」を配置してはいけない最大の理由は何ですか?
A. 動作が重くなるから  B. セキュリティホールになる可能性があり、再利用性を妨げるから  C. 命名規約に反するから  D. エンティティが壊れるから

正解:B(セキュリティホールになる可能性があり、再利用性を妨げるから)

コアモジュールは純粋なサービスであるべきで、テスト用の画面などが本番環境に残るとセキュリティリスクになります。また、画面を持つことで再利用性も低下します。

コメント

タイトルとURLをコピーしました