Skip to main content

OutSystemsのアーキテクチャ

OutSystems

生成したアプリケーションのアーキテクチャ

OutSystemsは、包括的なビジュアルモデルから標準的なWebアプリケーションやモバイルハイブリッドアプリケーションを生成してデプロイできる、独自のデプロイエンジンを備えています。

このアプローチにより、開発者はアプリケーションをモデリングして特定のビジネス要件に最適な形にすることに集中することができます。OutSystemsでは、最適化されたコード生成技術によって継続的に機能、セキュリティ、パフォーマンスを更新しつつ、他のサービスや技術とのローコードによる連携もサポートします。

ベンダーロックインのない標準アーキテクチャにより、OutSystemsのサブスクリプションを停止した場合でも、お客様のIPや投資は保護されます。

アプリケーションは、専有のコンポーネントやランタイムエンジン、インタプリタを必要としません。完全にオープンで、標準化・最適化・文書化されたサーバーコンポーネントおよびクライアントコンポーネントとして生成され、標準的なWebサーバーにデプロイ可能です。 

進化するアーキテクチャ

OutSystemsのコンパイラは、常に進化しています。パフォーマンスを高めるためのベストプラクティスを採用し、アプリケーションのセキュリティを継続的に更新しています。

また、生成するアプリケーションのターゲットアーキテクチャも、絶えず改良が重ねられています。OutSystemsプラットフォームはモジュール型で設計されているため、新しいアーキテクチャの生成も容易です。これにより以下の点を実現します。

  • 使用しているテクノロジーのサポートをベンダーが中止しても、アプリケーションに影響は及びません。

  • 度重なるテクノロジーシフトや基盤フレームワークの変革を気にせず開発を行えます。

  • 新しいテクノロジーやフレームワークがもたらす非機能面での様々な進歩の恩恵を、アプリケーションが受けることができます。

OutSystemは、生成時の言語やアーキテクチャを問わず、高度な品質、パフォーマンス、セキュリティを誇るアプリケーションを提供するための取り組みを日々続けています。ユーザーはこうした抽象化に加え、OutSystemsの熟練エンジニアやアーキテクトが採用しているすべてのベストプラクティスの恩恵を受けることができます。その結果、エンドユーザーがより高品質で高性能なアプリケーションを利用できるようになります。

高水準のアプリケーションアーキテクチャ

OutSystemsで作成したアプリケーションには、自動生成、ランタイム、カスタムバックエンド拡張という3種類のコンポーネントがあります。

以下の図は、アプリケーションが複数の基礎コンポーネントに分かれている様子を示しています。

自動生成コンポーネント 

これらのコンポーネントは、コンパイルやパブリッシュのためにアプリケーションを提出すると、自動的に作成されます。自動生成コンポーネントには、以下のものが含まれます。

  • ユーザーインターフェイスコンポーネントは、設計したモバイル画面やWeb画面、ブロックをサポートしている必要があります。これらは、標準のHTML5とCSS3をベースにしたJavaScriptです。

  • REST APIとSOAP Webサービスは直接生成され、バックエンドのエンドポイントとして公開されます。対応する定義ファイル(.json Swaggerまたは.wsdlファイル)も生成されます。さらに、モバイルアプリケーションのバックエンドサービスとして、プラットフォームでREST APIが自動的に作成されます。

  • ビジネスルール、バックグラウンドのジョブロジック、APIをサポートするバックエンド/サーバーロジックは、最適化されたサーバーコードとして生成されます。他の参照先アプリケーションへのプロキシは、バックエンドロジックにアセンブリとして含まれています。この抽象化により、サービスの変更が実装されてもサービスを再利用するアプリケーションは影響を受けません。

ランタイムライブラリ

どのアプリケーションにも、基本的なレンダリング機能や、OutSystemsプラットフォームの様々なサービスへのアクセスといった基本機能をサポートするためのコンポーネントが含まれています

  • 汎用プラットフォームライブラリ: Service Studioで使用可能なOutSystemsのビルトイン関数など、生成したすべてのアプリケーションで使用するクライアント/サーバー側のクラスおよびメソッドのほか、データベース接続管理ユーティリティ、Excelワークブック管理、サイトプロパティ管理、Ajaxサーバー側ユーティリティ、またはタイマー関連ユーティリティ。

  • モバイルおよびWebライブラリ:  ユーザーインターフェイスの構築に使用される各UIベースウィジェット向けのモジュール化機能を持つWeb/JavaScriptコントロール(Inputに関連するすべての機能を実装した、スクリプトインジェクション対策済みのコンポーネントなど)。 

カスタムバックエンド拡張

Integration Studioにアセンブルされたこれらのカスタムコンポーネントにより、OutSystemsを拡張し、アプリケーションにカスタムコードを含めることが可能になります

こうしたコンポーネントは、コンポーネントを参照するあらゆるアプリケーションのコンテキストで使用され、コードはアプリケーションがデプロイされているフロントエンドサーバーで実行されます。

これらには、拡張機能の追加リソース、および直接コンパイルするかIntegration Studio経由で組み込むことで実装したアセンブリが含まれています。

フルスタックの最適化

アプリケーションモデルをパブリッシュ(Service Studioを利用したパブリッシュや、環境間でのアプリケーションのステージングなど)するたびに、アプリケーションのソースコードが(再)生成、コンパイル、パッケージ化、デプロイされます。

OutSystemsは、変更されたエンティティ(テーブル)に基づき、データベーススキーマの更新に使用する差分DDLスクリプト一式を自動的に生成して適用します。

これにより、常に一貫して同一のアプリケーションモデルを生成し、ターゲット環境にデプロイすることができます。すべての変更は非破壊的であり、ターゲット環境の現在の状態に基づいて決定されるため、随時、任意のアプリケーションバージョンに戻したり、ロールバックしたりすることが可能です。

ユーザーインターフェイス

コンパイラが一連のルールと最適化を適用するため、アプリケーションは本来のパフォーマンスで正しく動作し、スケーラビリティや信頼性の問題を回避できます。

ルールや最適化はアプリケーションのすべてのレイヤーに適用されるため、データベースアクセスからWebページサイズまでのパフォーマンスが確実に最適化されます。これには、以下のようなものが含まれます。 

  • ページを圧縮する: アプリケーションが使用する帯域幅を最小限にし、ユーザーのリクエストを迅速に処理するため、すべてのページを自動的に圧縮してサイズを縮小します。

  • Webページの部分描画が可能: ビルトインのAjaxサポートを利用して、アプリケーションページを部分描画することが可能です。これにより、サーバーに送信する情報量を減らし、ページの一部のみを返すことができます。結果として帯域幅の消費が少なくなり、応答性やユーザーエクスペリエンスが向上します。

  • Ajaxリクエストを常にキューに入れておく: 生成したコードがAjaxリクエストを常にキューに入れておくことで、特定のユーザーが複数のリクエストを同時にサーバーに送信してWebアプリケーションサーバーを輻輳させることを防ぎます。

  • 重複するAjaxリクエストをドロップする: 生成したコードが、WebアプリケーションサーバーへのAjaxリクエストの送信を確実に1回のみにすることで、サーバー負荷の増大を防ぎます。たとえば、AutoCompleteパターンの複数のリクエストがブラウザのキューにある場合、最後のリクエストのみがサーバーに送信されます。

  • ビューステートに必要なフィールドのみを送信できるようグラフを分析する: 書き込みや読み込みの行われたスコープ変数や、アクセスが皆無のスコープ変数を検証する高度なグラフアルゴリズムを使用することで、OutSystemsコンパイラが必須フィールドのみをビューステートに送るためのコードを生成し、ページサイズを高度に最適化します。

ビジネスロジック

OutSystemsでは、コードを記述することなく複雑なビジネスロジックをモデリングすることが可能です。コードの代わりに使用するのが、条件、サイクル、ネストされた呼び出し、割り当て、クエリ、および既製または拡張されたビジュアル構成要素といったシンプルなビジュアル要素です。

こうした構成要素とサービスにより、作業を大幅に削減しつつ、アプリケーションをエンタープライズレベルのシステムにすることができます。これは、トランザクション処理、監査、例外処理、Excelファイル処理、連携認証、ユーザー/プロファイル管理などの機能を、視覚的な要素としてそのままサービスとして利用できるためです。

さらに、OutSystemsは完全な参照チェックおよび自己修復エンジン(TrueChange)を利用することで、すべてのアプリケーションコンポーネントでエラーのない一貫した変更を実現します。たとえばビジネスルールが変更されるたびに、このエンジンはそのロジックを使用するすべての関連するビジネスサービス、データ、およびユーザーインターフェイス要素を自動的に更新します。

バッチ処理の調整

OutSystemsでは、非同期で実行されるビジネスロジックをモデル化できます。複数の非同期バッチ処理が可能であるため、不適切にプログラムされた定期アクティビティにより高い負荷が発生した場合でも、アプリケーションユーザーへのサービス提供に必要な処理能力が占有されないよう、処理を自動的に調整します。

データベース

従来の複雑なSQL文に依存することなく、サードパーティのデータベースに基づいた永続的なデータリポジトリを作成、モデル化、連携することができます。

あらゆるリファクタリング操作において、OutSystemsがデータベースの作成、チューニング、およびアプリケーションとの整合性を処理します。

データベースのパフォーマンス面でも、アプリケーションは最適化されています。具体的には以下のようなものがあります。 

  • 接続をプールする: データベースコマンドの実行パフォーマンスが向上し、データベース接続の確立までの待ち時間が短縮されます。また、接続プーリングにより、アプリケーションにアクセスするユーザーごとに接続を1つ確立することで発生するOS、ネットワーク、およびデータベースリソースの過負荷を回避します。

  • 必要な場合のみ接続をオープンにしておく:  接続は、使用されなくなると自動的にリリースされます。これにより、データベースリソースの消費が削減され、スケーラビリティが向上します。

  • リリース前に必ずトランザクションをコミットまたはロールバックする: 開発者が何をモデル化したかにかかわらず、最終的には常にコミットまたはロールバックによってリリースします。これにより、アプリケーションが孤立トランザクションやロック状態のテーブルを残して不要なリソースを消費することを防ぎます。

  • 必要な場合のみクエリをメモリにコピーする: 実際には大量のデータを処理できるものの、アプリケーションのメモリ消費量が最小限になります。

  • 必要な場合のみクエリフィールドを取得する: 高度なグラフアルゴリズムにより、ビジネスロジックとユーザーインターフェイス内のフィールドの使用状況を検証し、クエリがデータベースから必要なフィールドだけを取得するようにします。これにより、開発者がコード化した内容にかかわらず、データベースへの負荷を最小限に抑え、データ転送遅延を最小限に抑えます。

  • クエリは一定期間のみ保持する:  上記の最適化をすべて行っても実行に時間がかかりすぎるクエリについては、OutSystemsがタイムアウトに基づいて自動的に破棄します。これにより、データベースが重いクエリの影響を受けないようにし、アプリケーションを最適なレベルで実行できるようにします。

  • テーブルで主キーと外部キーの自動インデックス処理をする: これにより、最も一般的なデータベースクエリが最適化されます。さらに高度なクエリによってテーブルへのインデックス追加が必要になった場合は、データエンティティをモデリングする際に視覚的に作成することができます。