sgcHTML vs UniGUI、TMS WEB Core、IntraWeb: Delphiウェブフレームワークの選び方

· コンポーネント

Delphiチームがビジネスアプリケーションをブラウザで公開しようとする際、最初に出てくる疑問はいつも同じです。どのウェブフレームワークを使うべきか、ということです。2026年現在、Delphi ネイティブの選択肢は5つあります: IntraWeb、UniGUI、TMS WEB Core、TMS XData、そして sgcHTML です。それぞれが異なるアプローチで問題を解決しており、それぞれが異なる状況で強みを発揮します。この記事では各フレームワークを率直に評価した上で、sgcHTML が明確な優位性を持つ場面について説明します。

IntraWeb — Delphi 初のウェブフレームワーク

IntraWeb は 2001 年から存在しています。そのモデルはシンプルです。VCL フォームをサーバーサイドで HTML としてレンダリングします。Delphi フォームを知っていれば、IntraWeb のページを構築できます。状態はサーバーに保持され、ブラウザは基本的に表示用の薄いレイヤーとして機能します。同時接続ユーザー数が少ない社内ツールであれば、このアプローチは今でも有効です。

IntraWeb が苦手とするのはテーマ設定とモダンなレイアウトです。生成される HTML と CSS は Bootstrap や flexbox 以前のものです。レスポンシブでモバイル対応のページを実現するには、相当量の CSS オーバーライド作業が必要です。生成されるマークアップは冗長で、モダンなデザインシステムとの統合が難しいです。IntraWeb は完全にステートフルであり、各ユーザーがアクセス中はサーバーサイドのセッションオブジェクトを保持するため、水平スケーリングには限界があります。

UniGUI — 成熟した機能豊富なステートフルフレームワーク

UniGUI は Delphi ウェブフレームワークの中で最も機能が充実しています。コンポーネントのパレットは非常に豊富で(グリッド、チャート、ツリー、マップ、ファイルアップロード、リッチテキストエディタ、タッチサポートなど)、テーマシステムも成熟しています。内部では Sencha ExtJS という強力な JavaScript コンポーネントライブラリを使用しており、ネイティブデスクトップに近い洗練されたインターフェースを生成します。

トレードオフは複雑さとステートフルなアーキテクチャです。UniGUI のセッションはサーバー上にフルコンポーネントの状態を保持します。同時接続ユーザーが多い場合、相当なメモリと慎重なセッション管理が必要です。ExtJS レイヤーは強力ですが Bootstrap ではないため、Bootstrap を知っている新入社員はそれぞれの語彙を学び直す必要があります。ライセンスは開発者単位とサーバー単位で課金され、クラウドデプロイではサーバー単位のライセンスコストが重要になります。

TMS WEB Core — JavaScript にコンパイルされるクライアントサイド Pascal

TMS WEB Core はまったく逆のアプローチを取ります。Object Pascal アプリケーションを WebAssembly 対応のコンパイラを使って JavaScript にコンパイルします。その結果はブラウザ上で完全に動作し、Delphi フォームのイベントが JavaScript イベントとして発火します。UI には Bootstrap または Material Design を使用し、TMS WEB Core には成長中のビジュアルコンポーネントセットが付属しています。

これは genuinely 巧みな技術であり、特定のユースケース、とりわけオフライン機能や非常に低いサーバー負荷を必要とするスタンドアロンのブラウザアプリケーションには有効です。制限はデプロイモデルにあります。コンパイルされた出力は静的な JavaScript ファイルとアセットのセットであり、ビルド、バージョン管理、配信が必要です。機能を追加するには、クライアントバンドルを再ビルドして再デプロイする必要があります。以前はサーバー上で安全に動作していたビジネスロジックがブラウザ上で実行されるため、機密性の高い計算についてはセキュリティ上の懸念が生じます。既存の Delphi サーバーサイドコンポーネント(TsgcWebSocketClient や FireDAC 接続など)との統合にはアーキテクチャ上の作業が必要です。コンパイルされた JavaScript はネイティブの Delphi ユニットを直接呼び出すことができないためです。

TMS XData — REST バックエンドであり、ウェブ UI フレームワークではない

TMS XData はウェブ UI フレームワークと比較されることが多いため言及する価値がありますが、実際には違います。XData は OpenAPI 3.0 と JSON を使用して Delphi サービスクラスから REST API を生成します。フロントエンドは別途構築する必要があります。TMS WEB Core、React、Angular、または HTTP を話す任意のものです。XData はその機能において優れています。ただし、ブラウザインターフェースが必要な場合、別のフロントエンド技術の必要性をなくすものではありません。

sgcHTML — 標準 Bootstrap 5 上のサーバーサイドコンポーネント

sgcHTML は上記すべてとは異なるポジションを取っています。出力が標準 Bootstrap 5 HTMLであるサーバーサイドコンポーネントライブラリです。コンポーネント自体は Delphi クラスです(TsgcHTMLComponent_ChartTsgcHTMLComponent_DataTable など)。プロパティで設定し、HTML 文字列を読み取ります。その文字列は HTTP レスポンスに組み込まれます。ブラウザは Bootstrap を使用してレンダリングします。htmx(14 KB のライブラリ、ビルドステップなし)がインタラクティビティを処理します。クリックやフォームの送信は Delphi ハンドラーに返され、ハンドラーは HTML フラグメントで応答し、htmx がページの該当セクションを入れ替えます。

アーキテクチャはステートレスです。各リクエストは必要なものを構築し、HTML を返して終了します。サーバー上に維持すべきセッションごとのコンポーネントツリーはありません。水平スケーリングは簡単です。同じ .exe の 2 つのインスタンスの前にロードバランサーを置くだけです。

並べて比較

機能 IntraWeb UniGUI TMS WEB Core sgcHTML
アーキテクチャ ステートフルなサーバーサイドフォーム ステートフルな ExtJS セッション クライアントサイド Pascal→JS ステートレスなサーバーサイド HTML
出力マークアップ 独自 HTML + CSS ExtJS JSON/HTML 標準 Bootstrap 標準 Bootstrap 5
インタラクティビティ フルページリロードまたは AJAX ExtJS AJAX ブラウザ上で動作 htmx フラグメント + WebSocket
リアルタイム WebSocket プッシュ なし(アドオン) 限定的 JS WebSocket API 経由 あり — ファーストクラス(sgcWebSockets)
スケーラビリティ セッション状態による制限 セッション状態による制限 ステートレス(静的ファイル) ステートレス、水平スケール
記述する JavaScript なし 最小限 なし(Pascal からコンパイル) なし
npm / Node.js 必須 不要 不要 必要(ビルドステップ) 不要
シングルバイナリデプロイ 不可(JS バンドル + アセット)
DataSet バインディング あり あり JS ブリッジ経由 あり(直接 TDataSet/TDataSource)
UI コンポーネント数 ~40 80+ 50+ 60+
モバイル/レスポンシブ 部分的 あり(ExtJS Touch) あり(Bootstrap) あり(Bootstrap 5)
.NET エディション なし なし なし あり(.NET 6+)

sgcHTML が明確な優位性を持つ場面

リアルタイムダッシュボード。sgcHTML は sgcWebSockets 上に構築されているため、HTML ページを配信する同じサーバーが WebSocket 接続も処理します。株価の更新、新しいセンサー読み取り値、または完了した生産ランを、単一の Broadcast 呼び出しで接続されているすべてのブラウザタブに HTML フラグメントとしてプッシュできます。ポーリングなし、別途のプッシュインフラなし、追加ライセンスなしです。IntraWeb と UniGUI はどちらも WebSocket サポートが限られており、追加の統合作業が必要です。TMS WEB Core はブラウザのネイティブ WebSocket API を使用できますが、受信メッセージを処理するためのクライアントサイド JavaScript ロジックが必要です。

カスタマイズオーバーヘッドのない標準マークアップ。出力が Bootstrap 5 HTML であるため、Bootstrap を知っているデザイナーであれば誰でもスタイルを適用できます。テーマは標準 Bootstrap テーマです。無料・有料を含む何百ものテーマが存在し、即座に適用できます。IntraWeb と UniGUI はフレームワーク固有のマークアップを生成するため、別途スタイリングシステムの習得が必要です。

ステートレスで水平スケール可能。各 sgcHTML リクエストは独立しています。サーバー上にユーザーごとのセッションオブジェクトはありません。同じ実行ファイルの 2 つのロードバランシングされたインスタンスがリクエストを相互に処理できます。IntraWeb と UniGUI はセッションを保持する特定のサーバーインスタンスにリクエストをルーティングする必要があるため、クラウドデプロイが複雑になります。

シングル実行ファイルによるデプロイ。Bootstrap CSS、Chart.js および htmx は Delphi バイナリ内の埋め込みリソースです。sgcHTML のデプロイは 1 つの .exe をコピーするだけです。TMS WEB Core は JavaScript バンドルとアセットのセットを生成するため、バージョン管理と別途の配信が必要です。

ビルドチェーン不要。npm も、webpack も、Babel も、Node.js も必要ありません。Delphi プロジェクトをコンパイルして配布するだけです。Node.js ツールチェーンのインストールに IT の承認が必要な規制環境やオンプレミスデプロイでは、これは非常に重要です。

実際のコード比較: データグリッド

違いを具体的に示すために、FireDAC クエリから検索可能なページング付きデータグリッドを sgcHTML でレンダリングする方法を紹介します。

uses
  sgcHTML_Component_DataTable;

var
  oTable: TsgcHTMLComponent_DataTable;
begin
  oTable := TsgcHTMLComponent_DataTable.Create(nil);
  oTable.PageBuilder  := oPage.PageBuilder;
  oTable.Section      := 'data';
  oTable.Title        := 'Customers';
  oTable.ShowSearch   := True;
  oTable.ShowExport   := True;
  oTable.LoadFromDataSet(fdqCustomers, 25); // 25 rows per page
  // Read oTable.HTML and include it in your response
end;

結果は、ソートインジケーター、検索ボックス、エクスポートボタンを備えたレスポンシブで検索可能なページング付き Bootstrap テーブルです。ブラウザは最初のページ表示で追加のサーバーラウンドトリップなしにレンダリングします。フィルタリングとページネーションは htmx を使用してページ全体ではなくテーブルフラグメントのみを入れ替えます。

代替手段を選ぶべき場面

sgcHTML が常に正しい選択というわけではありません。数百のフォームと確立されたテーマシステムを持つ大規模な IntraWeb または UniGUI アプリケーションがすでにある場合、移行することはあまり意味がありません。UniGUI は、Excel に匹敵するまたはそれを超える高度なグリッド機能(固定列、セルエディタ、行グループ化、ピボット)が必要な場合や、パワーユーザー向けバックオフィスツールに ExtJS の洗練さを求める場合に最適な選択です。TMS WEB Core は、サーバーなしでブラウザ上でオフライン動作するアプリケーションが必要な場合や、CDN 経由で静的ファイルとしてシングルページアプリケーションを配布したい場合に適しています。

sgcHTML が最も強い選択肢となるのは以下の場合です。

sgcHTML を試す

60 以上のコンポーネントすべてを含み機能制限のない無料トライアルは esegece.com/products/sgchtml/download からご利用いただけます。ダウンロードには、現実的なシナリオでコンポーネントパレットを実演する 4 つの動作デモアプリケーション(ERP、Admin Console、Live Monitor、Customer Portal)が含まれています。

ご質問や特定の既存プロジェクトとの比較については、お問い合わせください。コードを書いた担当者からご返答いたします。