OutSystems – 開発標準検討時の参考情報など

（2022年3月14日 更新）
#### 当記事の目的
近年、開発スピードの高速化・変化への対応（攻めのIT）、開発/保守作業の効率化・コスト低減（守りのIT）の実践に有効な「ローコード開発」への取り組みが注目されています。そのような状況において、OutSystemsは「小規模開発から複雑な大規模システム開発までをカバーした統合開発プラットフォーム」として世界中で活用されています。

通常のエンタープライズ開発では、開発標準を定めて開発するケースが多いと思います。OutSystemsを利用したローコード開発でも、お客様、SIer様毎に開発規約を定めて運用されるケースは多いです。しかし、初めてOutSystemsを利用する場合、どのような点を考慮すればよいのか不明であったり、参考になる情報を知りたいというケースも多いと思います。

そのような場合、OutSystemsのトレーニング（オンライン、オンサイト）を受講する、開発標準の策定にパートナー様やOutSystems社の導入支援サービスを利用する、などの対応が考えられます。しかし一番始めの手がかりとして、既存の情報を参照したいというケースもあると思います。そこで、当ドキュメントでは一般公開されている情報をベースに、情報のリンクと補足コメントを提供し、「OutSystemsを利用したアプリケーション開発の標準化」検討に役立てていただくことを目的としています。

#### １．コーディング規約について
コーディング規約については、以下のドキュメントで言及されています。但し、かなり一般的・常識的な内容となっています（逆に、一般的なルールに従っていただければ、特に問題ないとも言えます）。

**OutSystemsプラットフォームのベストプラクティス**
https://success.outsystems.com/ja-jp/Documentation/Best_Practices/Development/OutSystems_Platform_Best_Practices

それ以外の点に関しては、会社やプロジェクトベースで、固有のルールを設定していただくことになります。（※上記リンクの冒頭部分に「コメントでは英語を使用する」と記載がありますが、日本での利用を前提に開発するのであれば、コメントやラベルなどは日本語を利用していただいて問題ありません。）

その他考慮すべき点としては、変数や属性名に特定のキーワードを利用することで、データ型を自動設定できる点があります。そのような名前付けのルールに関しては、以下トレーニングの内容を参照していただけます。

**【動画】リアクティブWeb開発者への道 > データのモデリング > データベースエンティティ（日本語字幕あり）**
https://www.outsystems.com/ja-jp/training/lesson/1910/database-entities?LearningPathId=18

また、モジュールの名称に関しては、以下のオンライン動画が公開されています。この命名規約に従うことが必須というわけではないため、採用すべきかどうかは個別に判断していただければ良いと思います。

**【動画】アーキテクチャフレームワークを使用したアプリ設計 - モジュールの命名 （日本語字幕あり）**
https://www.outsystems.com/ja-jp/training/lesson/1223/module-naming

#### ２．開発プロセスについて
OutSystemsとしては、独自の開発プロセス・開発方法論を特に提供しているわけではないため、既存の開発プロセスに当てはめて（もしくは、カスタマイズして）、OutSystemsをご利用いただけます。

OutSystemsを利用した開発プロジェクトは、ウォーターフォール型、アジャイル開発型、どちらのケースも存在しますが、要件定義フェーズは、通常のプロセス・成果物と（一般的に）大きく変わらないと言えます。基本設計フェーズでは、OutSystemsの利用を前提に設計書を作成するケースが多いと思いますが、必要なドキュメントの種類・内容については、従来に近い形をとられるケース、OutSystems用にカスタマイズされるケースなど、個別に判断をいただいている状況です。

一方、ローコード開発の特徴として、詳細設計レベルのモデル定義により、プログラムが自動生成される点があります。このため、詳細設計以降のフェーズでは、作成必要なドキュメントの種類を減らしたり、単体テストの効率化が可能という違いが出てきます。このようなOutSystemsを利用したローコード開発については、以下の項に記載のトレーニングやドキュメント等を参考に、まず理解していただく必要があると考えます。

#### ３．設計・開発全般
アプリケーション設計（基本/詳細、外部/内部）を行う上で、前提として理解すべきOutSystemsの実装要素は、以下のオンラインコース、もしくはオンサイトの研修コースで確認できます。

**リアクティブWeb開発者への道（日本語字幕あり）**
https://www.outsystems.com/ja-jp/training/paths/18/becoming-a-reactive-web-developer/

**モバイル開発者への道（日本語字幕あり）**
https://www.outsystems.com/ja-jp/training/paths/1/becoming-a-mobile-developer/

開発標準策定の観点では、必要に応じて、以下の情報も押さえておいた方がよいと考えられます。

#### 3.1 UI関連

**UIを設計する**
https://success.outsystems.com/ja-jp/Documentation/11/Developing_an_Application/Design_UI
⇒ 独自のUIテンプレートを作成したい場合、既存テンプレート拡張、独自テンプレート作成どちらも可能です。UI周りコンポーネントについて、基本構成を記載しています。より詳細については、以下のオンラインコースが提供されています。

**【動画】スタイルガイドのアーキテクチャ (日本語字幕あり）**
https://www.outsystems.com/ja-jp/training/courses/71/style-guide-architectures/
⇒ 内容的には古いですが、基本的な考え方自体は現在でも有効です。

#### 3.2 ロジック関連

**外部データベースと連携する**
https://success.outsystems.com/ja-jp/Documentation/11/Extensibility_and_Integration/Integrate_with_an_External_Database

**独自コードでロジックを拡張する**
https://success.outsystems.com/ja-jp/Documentation/11/Extensibility_and_Integration/Extend_Logic_with_Your_Own_Code
⇒ C#コードを記述して、アプリケーションを拡張する方法について。

**【動画】Asynchronous Processes in OutSystems （※ 英語による説明 - 日本語字幕は今後対応予定）**
https://www.outsystems.com/training/courses/176/asynchronous-processes-in-outsystems/
⇒ 非同期処理・バッチ処理の実装、起動に関する基本的な考え方について。

#### 3.3 ノウハウなど

以下のページでは、アプリケーション開発のベストプラクティス、特定のユースケースを対象としたノウハウを公開しています。このような情報も参考にしていただけます。

**OutSystemsオンラインヘルプ - ベストプラクティス**
https://success.outsystems.com/ja-jp/Documentation/Best_Practices

**OutSystemsオンラインヘルプ – ノウハウ集**
https://success.outsystems.com/ja-jp/Documentation/How-to_Guides

ノウハウの観点では、@jyunji_watanabe さんがOutSystemsについて継続的に発信されている以下の情報も有用であると思います。

**Qiita**
https://qiita.com/jyunji_watanabe

**技術ブログ**
https://blog.house-soft.info/archives/category/outsystems11

#### ４．テスト関連
OutSystemsを利用した開発では、ソースコードが自動生成されるため（コード品質が担保されるため）、単体テスト工程は削減可能な部分が大きいと考えられます。一方で、共通モジュールや重要なビジネスロジックなど、テストケースを定義して回帰実行したい場合、以下のような情報を参考にしていただけます。

**単体テストおよびAPIテストの自動化**
https://success.outsystems.com/ja-jp/Documentation/How-to_Guides/DevOps/How_to_Automate_Unit_Testing_and_API_Testing

また、画面から行う機能テストや性能テストに関しては、Webアプリケーションに対する通常のテストの考え方と同様になります。例えば、Seleniumを使用したUIテストの実施に関しては、以下の情報を公開しています。

**Seleniumを使用したUIテスト**
https://success.outsystems.com/ja-jp/Documentation/How-to_Guides/DevOps/How_to_do_UI_testing_with_Selenium

CI/CD環境のテストケース実行に関しては、以下のドキュメントを参考にしていただけます。

**OutSystemsによる継続的デリバリーパイプラインの構築**
https://success.outsystems.com/ja-jp/Documentation/How-to_Guides/DevOps/How_to_build_an_OutSystems_continuous_delivery_pipeline

#### ５．モジュール設計・アーキテクチャについて
アプリケーションの初期リリースでは、それほど問題にならないのですが、アプリケーション数が増え、追加開発・バグフィックスが発生し、開発チーム数が増大するに従って、適切なモジュール設計が非常に重要となります。

OutSystemsで開発する「アプリケーション」は１つ以上の「モジュール（以前はeSpaceと呼んでいました）」から構成されます。アプリケーションを継続的に開発・メンテナンスしていく観点では、このアプリケーションとモジュールの構成が重要になってきます。

**アプリケーションの構成**
https://success.outsystems.com/ja-jp/Support/Enterprise_Customers/Maintenance_and_Operations/Designing_the_Architecture_of_Your_OutSystems_Applications/Application_composition

OutSystemsで開発したアプリケーションの環境間デプロイ（移送）、開発チームの権限・可視性設定はこの「アプリケーション」単位で行います。そこで、アプリケーション間の依存関係（および、含まれるモジュール間の依存関係）を適切に設定することが、全社規模の開発・メンテナンスを円滑に進める上では重要です。環境間のデプロイはLifeTimeというツールを利用しますので、前提として以下の情報を理解しておく必要があります。

**アプリケーションをデプロイする**
https://success.outsystems.com/ja-jp/Documentation/11/Managing_the_Applications_Lifecycle/Deploy_Applications/Deploy_an_Application

**ITユーザーの権限モデルを理解する**
https://success.outsystems.com/ja-jp/Documentation/11/Managing_the_Applications_Lifecycle/Manage_IT_Users/Understand_the_Permission_Model_for_IT_Users

#### 5.1 疎結合なモジュール設計・リファクタリングについて
あるアプリケーションの変更が別のアプリケーションのリリースサイクルに影響しないようにし、チーム間の並行開発を円滑にする上では、アプリケーション・モジュール間の依存関係を適切に設計することが必要です。このような適切なモジュール設計について、OutSystemsは「アーキテクチャ・キャンバス」という考え方を推奨しています。

**Architecture Canvasをアプリケーションに適用する**
https://success.outsystems.com/ja-jp/Support/Enterprise_Customers/Maintenance_and_Operations/Designing_the_Architecture_of_Your_OutSystems_Applications/Application_composition/Applying_the_Architecture_Canvas_to_applications

**【動画】アーキテクチャフレームワークを使用したアプリ設計 （日本語字幕あり）**
https://www.outsystems.com/ja-jp/training/courses/67/designing-apps-using-an-architecture-framework/?LearningPathId=17
⇒ 適切なモジュール設計について、一連の内容を説明したオンラインコースです。

**アプリケーションアーキテクチャを検証する**
https://success.outsystems.com/ja-jp/Support/Enterprise_Customers/Maintenance_and_Operations/Designing_the_Architecture_of_Your_OutSystems_Applications/Validating_your_application_architecture
⇒ 疎結合なモジュール設計を行う上で従うべき３つの原則について。

**適切なアプリケーションの構成のための4つのルール**
https://success.outsystems.com/ja-jp/Support/Enterprise_Customers/Maintenance_and_Operations/Designing_the_Architecture_of_Your_OutSystems_Applications/Application_composition/The_4_Rules_for_Correct_Application_Composition
⇒ 適切なアプリケーション・モジュール設計（業務、共通、サブシステム・・・）、開発チーム編成を行う上で考慮すべきルールについて。

（初稿：2021年1月27日）
***
    免責事項：
    当記事に記載の内容は、既存ドキュメント等のリンク情報をまとめた記述となっております。
    OutSystems社として特定の設計方針、実装方針、ベストプラクティスを推奨し、
    その効果を保証するものではございません。その点につきましては、ご注意ください。