【第2回】アーキテクチャ設計プロセス|OutSystems Architecture Specialist 合格対策

ArchitectureSpecialist(O11)

優れたアーキテクチャは、単に技術的な美しさだけではなく、「ビジネスの目標」と完全に一致している必要があります。OutSystemsでは、ビジネスニーズを正しく理解し、それを保守性の高いモジュール構造へと変換するために、「Disclose(把握)」「Organize(整理)」「Assemble(組み立て)」という3つのステップからなる設計プロセスを提唱しています。

第2回では、この反復的なプロセスを具体的にどう進めるべきか、設計の核心に迫ります。



ステップ1:Disclose(把握・開示)

最初のステップは、ビジネス概念、統合の必要性、そして非機能要件を明らかにすることです。

  • ユーザー要件の特定:ユーザーストーリーを分析し、「誰がアプリケーションを利用するのか」「どのような役割があるのか」「各ユーザーはどのようなアクションを実行するのか」を明確にします。
  • 情報アーキテクチャの把握:既存のドキュメントの分析や、ステークホルダーとの対話を通じて、ビジネスユーザーが認識している情報の構造を確認します。
  • 統合ニーズの洗い出し:外部システム(CRM, ERP, SaaSなど)からどのような情報を取得する必要があるか、通信プロトコル(REST, SOAPなど)やデータ構造を特定します。
  • UXとチャネルの期待値:Webアプリなのかモバイル専用なのか、アクセシビリティ要件はあるか、といったユーザー体験に関する要件を整理します。

📝 ポイント

最初の段階で主要なコンセプトを見落とすと、後で複雑なリファクタリングが必要になり、コストが増大します。



ステップ2:Organize(整理)

ステップ1で洗い出した「コンセプト」を、Architecture Canvasの適切なレイヤーにマッピングします。この段階では、まだ「モジュール」ではなく、あくまで概念としての整理であることに注意してください。

レイヤー 配置する概念
End-Userレイヤー ユーザーインターフェースに関連する概念、画面、および特定のユースケースに特化したプロセス
Coreレイヤー ビジネス上の主要な概念(例:患者、診察、契約)や、それに関連するビジネスルール
Foundationレイヤー 外部システムとの統合ニーズ(API連携)や、監査・認証といったビジネスに依存しない非機能的な要件

📝 イテレーションについて

このステップを行う中で、新たな疑問やコンセプトが見つかることも多く、Discloseステップへ戻って詳細を確認するイテレーションが発生します。



ステップ3:Assemble(組み立て)

整理された概念を、実際に開発・デプロイ可能な「モジュール」へと組み立てていきます。ここでは、以下の4つの原則が意思決定のガイドとなります。

# 原則 内容
1 関連する概念の統合 概念的に密接に関連しているものは、同じモジュールにまとめる。例えば、「病院」と「病棟(Units)」は切り離して管理するメリットが少ないため、一つのモジュールに統合します。
2 ライフサイクルによる分割 たとえ関連があっても、更新頻度や変更のタイミングが異なる概念は、別のモジュールに分割すべきです。これにより、一方の変更が他方のデプロイに影響を与えないようにします。
3 サービスと統合ロジックの分離 再利用可能なビジネスロジックはCoreレイヤーへ、技術的な接続ロジックはFoundationレイヤーへ隔離します。これにより、外部システムの仕様変更からコアビジネスロジックを守ることができます。
4 既知のパターンの適用 ECS(外部コアサービス)パターンなど、OutSystemsで実績のある設計パターンを当てはめて、堅牢な構造を構築します。



まとめ:設計は「一度きりのイベント」ではない

✅ この回のポイント

アーキテクチャの設計は、プロジェクトの最初に一度だけ行って終わりではありません。開発が進み、新たな要件や技術的な詳細が判明するたびに、これら3つのステップを繰り返す「継続的なプロセス」です。このプロセスを繰り返すことで、各モジュールが独立したライフサイクルを持ち、変更による影響が最小限に抑えられた、真に「持続可能な」アプリケーションが完成します。




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

▶ 問1:アーキテクチャ設計プロセスのうち、ユーザーストーリーを特定し、外部APIの通信プロトコルを確認するステップはどれですか?
A. Organize  B. Assemble  C. Disclose  D. Validate

正解:C(Disclose)

Discloseは要件やコンセプトを「明らかにする」フェーズです。ユーザーストーリーの特定や外部APIの確認など、設計に必要な情報を収集するすべての活動がここに含まれます。

▶ 問2:ステップ3の「Assemble」において、関連する2つの概念を別のモジュールに分けるべき最大の判断基準は何ですか?
A. 開発担当者が異なる場合  B. それぞれのライフサイクル(変更頻度やタイミング)が異なる場合  C. モジュールの名前が長くなりすぎる場合  D. 使用する色(テーマ)が異なる場合

正解:B(それぞれのライフサイクルが異なる場合)

ライフサイクルの独立性はArchitecture Canvasの最も重要なゴールの一つです。変更頻度やデプロイのタイミングが異なる概念を同一モジュールに置くと、不要なデプロイが発生しシステムの柔軟性が失われます。

▶ 問3:外部のCRMシステムから顧客情報を取得する際、その「接続ロジック」と「再利用可能なビジネスルール」の正しい配置はどれですか?
A. 両方をCoreレイヤーに配置する  B. 両方をFoundationレイヤーに配置する  C. 接続ロジックをFoundation、ビジネスルールをCoreに分離する  D. 接続ロジックをEnd-User、ビジネスルールをFoundationに配置する

正解:C(接続ロジックをFoundation、ビジネスルールをCoreに分離する)

技術的な統合ロジックはFoundation、ビジネスロジックはCoreに隔離して保護します。これにより、外部システムの仕様変更があってもFoundationレイヤーのみを修正すれば済み、Coreのビジネスロジックへの影響を防ぐことができます。

▶ 問4:設計プロセスにおいて、「Disclose」と「Organize」の関係性として正しい説明はどれですか?
A. Discloseが終わるまでOrganizeを開始してはいけない  B. Organizeを進める過程で新たな概念が見つかり、Discloseに戻るという反復が発生する  C. 一度Assembleまで進んだら、Discloseに戻ることは禁止されている  D. 両者は全く無関係な独立したプロセスである

正解:B(Organizeを進める過程でDiscloseに戻るという反復が発生する)

これら3つのステップは、プロジェクトを通じて何度も繰り返されます。Organizeの最中に新たな概念が発見されれば、Discloseに戻って情報収集を行うことは正しいアプローチです。

▶ 問5:「病院(Hospital)」と「病棟(Units)」のように、常にセットで扱われる密接な概念を一つのモジュールにまとめる原則を何と呼びますか?
A. ライフサイクルによる分割  B. サービス分離  C. 概念的な関連による統合  D. パターンの正規化

正解:C(概念的な関連による統合)

関連性が極めて強い概念は、不必要に分割せず統合して管理の複雑さを避けます。分割することで得られるメリットよりも、モジュール間の依存関係が増えるデメリットの方が大きくなる場合は統合が正解です。

コメント

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