3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Delphi】WebBroker の概要

Last updated at Posted at 2025-08-28

はじめに

WebBroker は Delphi / C++Builder 等に含まれる Web サーバーアプリケーションを作るためのフレームワークです。

See also:

WebBroker

WebBroker を使って様々なタイプの Web サーバーアプリケーションを作る事ができます。

初出は Delphi 3 で、Delphi 5 からは Professional 版以上へ標準添付されるようになりました。

バージョン Standard Professional Client/Server
Delphi 3 × ×
Delphi 3.1 ×
Delphi 4 × △ (別売)

Delphi 13 Florence だと [ファイル | 新規作成 | その他][新規作成] ダイアログを開き、[Delphi プロジェクト > Web > Web サーバーアプリケーション] と辿って [Web サーバーアプリケーション] をクリックすると Web サーバーアプリケーションを作成するウィザードが開きます。

image.png

古い Delphi だと [新規作成] ダイアログの [新規作成] タブの中に [Web サーバーアプリケーション] があります。スクロールして探さないといけないかもしれません。

image.png

TWebModule

TWebModule は特殊なデータモジュールです。この Web モジュールに書かれたコードは各 Web サーバーアプリケーションで使い回すことができます。

image.png

コードは基本的に Web モジュールに集約する事になります。

既存のデータモジュールを TWebModule のように使いたい場合には、データモジュールに TWebDispatcher を追加します (TWebModule も TWebDispatcher も TCustomWebDispatcher からの派生です)。

See also:

Web クライアントからのリクエストの処理

リクエストを処理するには [Web モジュール] を右クリックして [アクションの設定...] から [アクションの編集] ダイアログ (コレクションエディタ) を表示します。

image.png

[オブジェクトインスペクタ] で、TWebModule の [Actions] プロパティをダブルクリックするか、右側の [...] ボタンを押す事でも [アクションの編集] ダイアログを開けます。
image.png

ここに Http 要求メッセージに対する応答に対応するアクション項目 (TWebActionItem) を追加します。TWebActionItem に設定すべきプロパティは次の通りです:

プロパティ 説明
Default True に設定すると、他の Web アクションによって処理されないリクエストメッセージを処理する Web アクションにする事ができます。
MethodType Web アクションが処理するリクエストメッセージの種類 (HTTP メソッド) を指定します。
Name Web アクションの名前です。
PathInfo Web アクションが処理するリクエストメッセージの URIのパス部分を示します。

Web アクションの OnAction イベントハンドラで実際の応答を処理します。例えば、Default プロパティが True に設定された Web アクションで応答するイベントハンドラは次のようになります。

procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  Response.StatusCode := 500;
  Response.ContentType := 'application/json';
  Response.Content :='''
  {
    "code" : 500,
    "name" : "Bad Request"
  }
  ''';
  Response.SendResponse;
end;

Request パラメータにリクエストの情報が格納されており、

  • Request.QueryFields
  • Request.ContentFields
  • Request.CookieFields

等でリクエストパラメータを取得する事ができます。

Response パラメータに応答するコンテンツを設定して、SendResponse() メソッドで送信します。明示的に SendResponse() を呼び出さなくとも、イベントハンドラを抜けた時にレスポンスが送信されていなければ自動で送信されるようです。

コンテンツはテキストの場合 Response.Content (string 型) へ、バイナリは Response.ContentStream (TStream 型) へ格納します。ContentStream に設定されたストリームは Response オブジェクトが破棄される際に自動で解放されるため、手動で解放する必要はありません。

Handled パラメータを False に設定すると、現在のイベントハンドラでリクエストを処理せずに他の (条件に一致する) Web アクションへ処理を回します。デフォルトで True が設定されています。

See also:

コンテンツプロデューサー

コンテンツプロデューサーはコードとコンテンツを分離するのに使われます。コンテンツプロデューサーはレスポンスのコンテンツが HTML である場合に使われます。

procedure WebModule1.WebModule1DefaultHandlerAction(Sender: TObject; Request: TWebRequest;
   Response: TWebResponse; var Handled: Boolean);
begin
   PageProducer1.HTMLFile := 'index.html';
   Response.Content := PageProducer1.Content;
end;
プロデューサー 説明
TPageProducer TDataSetPageProducer は、入力テンプレートを基に HTML コマンドの文字列を生成します。
TQueryTableProducer TQueryTableProducer は、クエリの結果セットを表形式で表示するための HTML コマンド シーケンスを作成します (BDE)。
TSQLQueryTableProducer TSQLQueryTableProducer は、クエリの結果セットを表形式で表示するための HTML コマンド シーケンスを作成します (DBX)。
TDataSetTableProducer TDataSetTableProducer は、データセット内のレコードを表形式で表示するための HTML コマンド シーケンスを作成します。
TDataSetPageProducer TDataSetPageProducer は、入力テンプレートを基に HTML コマンドの文字列を生成します。

TStringBuilder や TFile、正規表現や複数行文字列などがある現在では、コンテンツプロデューサーを利用するメリットは薄れてきているかもしれません。

procedure WebModule1.WebModule1DefaultHandlerAction(Sender: TObject; Request: TWebRequest;
   Response: TWebResponse; var Handled: Boolean);
begin
  Response.Content := TFile.ReadAllText('index.html');
end;

例えば HTML ファイルをコンテンツとして返すコードはこのように書けます。

See also:

Web ファイルディスパッチャ

Web ファイルディスパッチャ TWebFileDispatcher は、静的なコンテンツのためのディスパッチャです。Web モジュールに貼り付けて使います。Delphi XE 以降で利用可能です。

image.png

プロパティ 説明
DefaultFile (仮想) フォルダそのものにアクセスされた時に見せるファイル (コンテンツ) のファイル名です
RootDirectory ファイルの置かれている実フォルダです
VirtualPath ファイルを見せる仮想フォルダです

例えばプロパティが次のような値になっていた場合、

プロパティ
DefaultFile index.html
RootDirectory .\files
VirtualPath /files

http://localhost/files/ にアクセスすると、<Web アプリケーションのパス>\files\ にある index.html が表示されます。

  • 実フォルダにあるサブフォルダの表示/非表示は WebDirectories プロパティで制御できます
  • ファイル拡張子と MIME タイプの関連付けは WebFileExtensions プロパティで制御できます
  • BeforeDispatch イベントと AfterDispatch イベントを使って閲覧数を記録したり、ファイルに細工を施したりする事もできますが、同時アクセスの可能性を考慮する必要があります

Web モジュールの DefaultHandlerEnabled=False に設定してやれば、静的なコンテンツ (のみを) を扱う Web サーバーを簡単に作ることができます。

image.png

DefaultHandler でエラートラップしなくても、存在しないコンテンツを開こうとすると 404 Not Found が表示されます。

Web ステンシル (WebStencils)

Web ステンシル (WebStencils) は Delphi 12.2 Athens で追加された WebBroker 関連技術です。

コンポーネント 説明
TWebStencilsProcessor WebStencils 表記を埋め込んだ HTML ファイルを受け取り、@ タグを処理した後、それをプレーン HTML に変換します。
TWebStencilsEngine リクエスト URL を処理対象の HTML ファイルにマッピングするクラスです。

かなり高度な機能を持っていますので、リンク先の記事やドキュメントを読む事をオススメします。

TPageProducer の代替として利用可能です。

See also:

Web サーバーアプリケーションの種類

Delphi 13 Florence では、次に挙げるタイプの Web サーバーアプリケーションを作成する事が可能です。

image.png

  • Apache ダイナミックリンクモジュール
  • スタンドアロンコンソールアプリケーション
  • スタンドアロン GUI アプリケーション
  • ISAPI ダイナミックリンクライブラリ
  • CGI スタンドアロン実行可能ファイル
  • FastCGI スタンドアロン実行可能ファイル

以下、(廃止されたものも含めた) 作成可能な Web サーバーアプリケーションの概要です。

説明の都合上、順番が前後します。

See also:

■ スタンドアロンコンソール アプリケーション

対応プラットフォーム∶ Windows, Linux (x64) 1

単体のコンソールアプリケーションとして動作する Web サーバーアプリケーションです。

  • Delphi XE 以降で作成可能 (XE では Indy Web Server と呼ばれていました)
  • 自身が Web サーバー兼 Web サーバーアプリケーションとなっています
  • リクエストの度にスレッドが生成されます (スレッド毎に TWebModule が生成されます)
  • 複雑な Web アプリケーションを作るのには向いてないかも...

■ スタンドアロン GUI アプリケーション

対応プラットフォーム∶ Windows, Android (ARM 32bit/64bit) 2, Linux (x64) 1

フォームのある GUI アプリケーションとして動作する Web サーバーアプリケーションです。

  • Delphi XE 以降で作成可能 (XE では Indy Web Server と呼ばれていました)
  • 自身が Web サーバー兼 Web サーバーアプリケーションとなっています
  • リクエストの度にスレッドが生成されます (スレッド毎に TWebModule が生成されます)
  • 複雑な Web アプリケーションを作るのには向いてないかも...
  • VCL で作る事も FireMonkey で作る事も可能です
  • Android ベースの OS でも実行できます
  • Linux 向けに作るには『FMX Linux』を別途インストールする必要があります (GetIt からインストールできます)
  • アプリケーションに REST API サーバー機能を持たせる用途にも使えます 3

See also:

■ CGI スタンドアロン実行可能ファイル

対応プラットフォーム∶ Windows, Linux (x64) 1

CGI (Common Gateway Interface) として動作する Web サーバーアプリケーションです。

  • Kylix』で作る事もできます (Linux x86)
  • CGI として動作させるためには、別途何らかの Web サーバーのインストールが必要です
  • Web サーバーと CGI プログラムは標準入力と標準出力 (と環境変数) を使ってデータをやりとりします
  • リクエストの度にインスタンス (プロセス) が生成されます (サーバーのリソースを食いがち)
  • WebBroker を使わずに CGI アプリケーションを書く事も可能です

See also:

■ FastCGI スタンドアロン実行可能ファイル

対応プラットフォーム∶ Windows, Linux (x64) 1

FastCGI として動作する Web サーバーアプリケーションです。

  • Delphi 13 Florence 以降で作成可能
  • 別途 nginx や Apache HTTP Server のインストールが必要です
  • リクエストの度にスレッドが生成されます (スレッド毎に TWebModule が生成されます)

See also:

■ Apache ダイナミックリンクモジュール

対応プラットフォーム∶ Windows, Linux (x64) 1

Apache HTTP Server』で動作する Web サーバーモジュールです。

  • Delphi 6 以降で作成可能
  • Kylix』で作る事もできます (Linux x86)
  • 別途 Apache HTTP Server のインストールが必要です
  • リクエストの度にスレッドが生成されます (スレッド毎に TWebModule が生成されます)

See also:

■ ISAPI ダイナミックリンクライブラリ

対応プラットフォーム∶ Windows

Internet Information Services (IIS)』や『Personal Web Server (PWS)』 で動作する Web サーバーモジュールです。

  • 別途 IIS のインストールが必要です
  • ISAPI (Internet Server Application Programming Interface) とは IIS 用の API の事です
  • リクエストの度にスレッドが生成されます (スレッド毎に TWebModule が生成されます)
  • Windows 向け Apache には ISAPI 用 DLL を利用可能にするための mod_isapi モジュールが用意されています (Apache で IIS 用の DLL モジュールが使えます)
  • Delphi 3.x では ISAPI 用モジュールをビルドしても IsMultiThread グローバル変数が True に設定されません

See also:

■ NSAPI ダイナミックリンクライブラリ (廃止)

対応プラットフォーム∶ Windows

Windows 向け『Netscape Enterprise Server』や『Netscape Fast Track Server』で動作する Web サーバーモジュールです。

  • Delphi 2010 以前で作成可能です
  • ISAPI 用 DLL を動作させるための IsapiTer.dll (とそのソースコード) が含まれていました
  • 古いバージョンに『NSAPI (Netscape Server API)』対応とあるのは、単に ISAPI <-> NSAPI 変換モジュールが使えるという意味です

See also:

■ Win-CGI スタンドアロン実行可能ファイル (廃止)

対応プラットフォーム∶ Windows

WinCGI として動作する Web サーバーアプリケーションです。

  • Delphi 6 以前で作成可能です
  • WinCGI として動作させるためには、別途何らかの WinCGI 対応 Web サーバー (『O'Reilly & Associates WebSite』等) のインストールが必要です
  • Web サーバーと CGI プログラムはファイルを使ってデータをやりとりします
  • WinCGI は環境変数にアクセスできなかった『(古い) Visual Basic』で CGI を書く用途で考えられたようです
  • WebBroker を使わずに WinCGI アプリケーションを書く事も可能です

See also:

■ Web アプリケーションデバッガ用実行形式 (廃止)

Web アプリケーションのデバッグを行うための実行形式ファイルです。

  • Delphi 6~XE で作成可能です

XE 以降ではスタンドアロンアプリケーションを作成してデバッグできます。

Web アプリケーションデバッガの使い方

  1. Web サーバーアプリケーションを作成するウィザードで [Web アプリケーションデバッガ用実行形式] を選択します
  2. Web モジュールにロジックを記述します
  3. 実行します
  4. IDE の [ツール | Web アプリケーションデバッガ]Borland (/ CodeGear / Embarcadero) Web App Debugger を開きます
  5. [起動] ボタンを押すと、デフォルト URL: にあるテキストがリンクに変化するので、それをクリックしてブラウザを起動します
    image.png
    image.png
  6. ブラウザで次のような画面が開くので、実行されているアプリケーションを選択し、[実行] ボタンを押すとデバッグ実行する事ができます
    image.png

Web App Debugger は簡易的な Web サーバーで、それを介してロジックをデバッグする感じです。応答時間を計測する事もできます。

Professional 版だと [Web アプリケーションデバッガ] が [ツール] メニューにないかもしれません。そのような時は、<インストールフォルダ>\bin にある webappdbg.exe[ツール | ツールの構成] (または [ツール | ツールの設定])で登録してください。

なお、Delphi 2005 はウィザードで [Web アプリケーションデバッガ用実行形式] を選択できるのに webappdbg.exe が存在しません (Professional 版だけ?)。

[Web アプリケーションデバッガ] が正しく動作しないようであれば、<インストールフォルダ>\bin にある ServerInfo.exe を一度管理者権限で実行してみてください。

おわりに

昨今の WebBroker 事情についてでした。WebBroker に関する情報が載った書籍はそれなりにあるのですが、多くは Delphi 6 以前に書かれたものです。

image.png

image.png

それでも、基本的な考え方は同じなので、取っ掛かりのために書籍を購入してみるのもいいかもしれませんね。

See also:

関連書籍

タイトル 著者 ISBN-10
(Amazon)
出版年
Delphi 6 プログラミングバイブル Marco Cantu (著)
篠原 慶 (訳)
光田 秀 (訳)
4844316346 2002/4
Delphi DB & Web プログラミング 松浦 健一郎 (著)
司 ゆき (著)
4797318600 2001/12
Windows プログラマの LINUX 読本
― Kylix と Linux を始める
米沢 千賀子 4797820233 2001/11
Delphi 5 実践データベースプログラミング
― DB コンポーネントと QuickReport の活用
田中 和明 4877830251 2000/06
データベース Linux Java Servlet による
Web サーバー構築編
加藤 大受(著)
田原 孝(著)
Inprise (監)
4756133797 2000/3
Delphi 5 で作る Web アプリケーション入門 西村 めぐみ 4877780270 2000/2
Delphi プログラマのための CGI 入門
― WebBroker でらくらくプログラミング
山本 秀樹 478983591X 1999/8
Delphi で作る高速 CGI 田原 孝 4871936600 1998/12
  1. 10.2 Tokyo 以降。Enterprise 以上の SKU が必要。 2 3 4 5

  2. 11.1 Alexandria 以降。

  3. Windows のお作法だと、そういう用途には COM サーバーを使うのが筋なのでしょうが...

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?