sgcWebSockets 2026.6 は、このライブラリの歴史の中でも最大級のリリースの一つです。3 つの新しいクライアント(ネイティブ gRPC クライアント、Apache Kafka クライアント、スタンドアロンの OpenAPI 3 サーバー)、モバイルおよびデスクトップアプリを OpenSSL なしで出荷できる 2 つのネイティブな OS の TLS バックエンド、ファイアウォール内の分類専用の ボット検出エンジン、AI エージェント向けの MCP stdio トランスポート、一連のポスト量子暗号プリミティブ、そして WebSocket / HTTP サーバー全体にわたる広範なセキュリティ強化が含まれています。
この記事は、各機能の短い Delphi のスニペットと、その機能が詳しく解説されている専用記事へのリンクを添えた、ハイライトのガイドツアーです。
HTTP/2 上の gRPC クライアント
新しい TsgcGRPCClient は、既存の TsgcHTTP2Client 上に構築されたネイティブ gRPC クライアントで、外部の gRPC ランタイムをデプロイする必要はありません。4 つの RPC パターン(ユナリ、サーバーストリーミング、クライアントストリーミング、双方向ストリーミング)、圧縮と content-type のためのチャネルオプション、デフォルトおよび呼び出しごとのメタデータ、デッドライン、指数バックオフによる自動リトライ、クライアントサイドのロードバランシング(Pick First と Round Robin)、gRPC Health Checking、Server Reflection、インターセプター、OpenTelemetry メトリクスをサポートします。
uses
sgcHTTP2, sgcGRPC_Client, sgcGRPC_Classes, sgcGRPC_Types;
var
HTTP2: TsgcHTTP2Client;
GRPC: TsgcGRPCClient;
oResponse: TsgcGRPCResponse;
begin
HTTP2 := TsgcHTTP2Client.Create(nil);
HTTP2.Host := 'grpc.example.com';
HTTP2.Port := 443;
HTTP2.TLS := True;
GRPC := TsgcGRPCClient.Create(nil);
GRPC.Client := HTTP2;
// metadata is sent on every call (auth, tracing...)
GRPC.DefaultMetadata.Add('authorization', 'Bearer eyJ...');
// unary call: the request is your serialized protobuf message as TBytes
oResponse := GRPC.Call('helloworld.Greeter', 'SayHello', RequestBytes);
if oResponse.StatusCode = grpcOK then
Memo1.Text := oResponse.DataString
else
ShowMessage('gRPC error: ' + oResponse.StatusMessage);
end;
この汎用クライアントに加えて、2026.6 では 8 つの Google Cloud サービス向けの型付き gRPC インターフェースを同梱しています。それぞれに protobuf のリクエスト / レスポンスクラスとサービスアカウント JWT 認証が付属します。Pub/Sub、Speech-to-Text、Translation、Vision、Natural Language、Cloud Storage、BigQuery Storage、Vertex AI です。詳しい解説はこちら: gRPC Client for Delphi。
スタンドアロンの OpenAPI 3 サーバー
TsgcWSAPIServer_OpenAPI は、OpenAPI 3 仕様を実行中の REST サーバーに変えます。仕様を読み込み(または RTTI 属性を介して Delphi クラスから生成し)、それを TsgcWebSocketHTTPServer にアタッチすれば、ルーティング、リクエスト検証、Swagger UI、CORS がそのまま利用できます。検証に失敗すると、RFC 7807 の problem+json が自動的に返されます。
uses
sgcWebSocket, sgcWebSocket_Classes,
sgcWebSocket_Server_API_OpenAPI,
sgcHTTP_OpenAPI_Server;
var
WSServer: TsgcWebSocketHTTPServer;
FOpenAPI: TsgcWSAPIServer_OpenAPI;
begin
WSServer := TsgcWebSocketHTTPServer.Create(nil);
WSServer.Port := 8080;
FOpenAPI := TsgcWSAPIServer_OpenAPI.Create(nil);
FOpenAPI.OnRequest := OnOpenAPIRequest;
FOpenAPI.OnValidationError := OnOpenAPIValidationError;
FOpenAPI.OpenAPIOptions.Endpoint.ServeSpec := True;
FOpenAPI.OpenAPIOptions.Endpoint.ServeSwaggerUI := True;
FOpenAPI.OpenAPIOptions.CORS.Enabled := True;
FOpenAPI.OpenAPIOptions.Validation.ValidateRequest := True;
FOpenAPI.LoadFromFile('petstore.json');
FOpenAPI.Server := WSServer;
WSServer.Active := True;
// Swagger UI: http://localhost:8080/docs
// Raw spec: http://localhost:8080/openapi.json
end;
詳しくはこちら: OpenAPI Server for Delphi。
Apache Kafka クライアント
TsgcWSPClient_Kafka は、Java や librdkafka に依存せず、生の TCP 上でバイナリの Kafka ワイヤープロトコルを話すネイティブな Apache Kafka クライアントです。メッセージのプロデュースとコンシューム、サブスクライブとポーリング、コンシューマーグループ、トピック、オフセットの管理が行えます。
uses
sgcWebSocket, sgcWebSocket_Protocols, sgcKafka_Classes;
var
oClient: TsgcWebSocketClient;
oKafka: TsgcWSPClient_Kafka;
begin
oClient := TsgcWebSocketClient.Create(nil);
oClient.Specifications.RFC6455 := False; // raw TCP, native Kafka protocol
oClient.Host := '127.0.0.1';
oClient.Port := 9092;
oKafka := TsgcWSPClient_Kafka.Create(nil);
oKafka.Client := oClient;
oKafka.KafkaOptions.ClientId := 'my-delphi-app';
oKafka.OnKafkaConnect := OnKafkaConnect;
oKafka.OnKafkaMessage := OnKafkaMessage;
oKafka.OnKafkaProduce := OnKafkaProduce;
oClient.Active := True; // connect to the broker
end;
詳しくはこちら: Apache Kafka Client for Delphi。
Android と Apple のネイティブ TLS、OpenSSL のデプロイ不要
2 つの新しい TLS バックエンドは、OpenSSL の代わりに OS を通じてハンドシェイクを実行します。そのため、アプリは Android で libssl.so / libcrypto.so を、iOS と macOS で .dylib を出荷する必要がありません。どちらも TLSOptions.IOHandler を通じてプラットフォームごとに選択でき、すでに使い慣れた同じ TLSOptions API(カスタム CA、クライアント証明書、ALPN)を再利用します。
Android(iohAndroidTLS)は、JNI 経由でプラットフォームの javax.net.ssl.SSLEngine を通じて TLS を実行し、ホスト名検証付きで Android のシステムトラストストアに対して検証を行い、TLS 1.3 をネゴシエートし、Android 10 以降で ALPN をサポートします。RAD Studio XE8+ が必要です。
uses
sgcWebSocket, sgcWebSocket_Types;
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAndroidTLS;
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;
Apple(iohAppleTLS)は、macOS 10.14+ および iOS 12+ では TLS 1.3 のために Network.framework を自動選択し、古いシステムでは Secure Transport(TLS 1.2)にフォールバックします。SNI とホスト名検証付きでシステムトラストストアを使用し、カスタム検証のための OnAppleTLSVerifyPeer イベントを公開します。RAD Studio XE6+ が必要です。
uses
sgcWebSocket, sgcWebSocket_Types;
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAppleTLS;
WSClient.URL := 'wss://www.esegece.com:2053';
WSClient.Active := True;
詳しくはこちら: Native Android TLS および Native Apple TLS。
ファイアウォールのボット検出
TsgcWebSocketFirewall に、IP ベースのボット検出モジュールが追加されました。既知ボットの CIDR リスト、データセンターの ASN レンジ、フォワード確認逆引き DNS(FCrDNS)、DNSBL ルックアップを用いて、クライアントを検証済みの検索エンジンクローラー、データセンターレンジ、ブロックリスト掲載アドレスのいずれかとして分類します。これは分類専用です。結果は新しい OnBotDetected イベントと GetBotClassification メソッドを通じて公開されるため、ファイアウォールが代わりに接続をブロックするのではなく、その結果をどう扱うかはあなたが決定します。
TsgcBotClassification = (bcUnknown, bcVerifiedCrawler, bcDatacenter,
bcSuspectedBot, bcBlocklisted, bcHuman);
このリリースでは、ファイアウォールに完全な IPv6 ももたらされます。/128 までのブラックリストおよびホワイトリストの CIDR マッチング、GeoLite2 の IPv6 国別ブロック、IPv6 ボットレンジ、ip6.arpa 逆引き DNS / DNSBL です。IPv6 CIDR が 32 ビットの演算で評価され(そのためすべての IPv6 クライアントにマッチしてしまう)長年存在していたバグも修正されました。詳しくはこちら: Bot Detection in the Firewall。
MCP stdio トランスポート
Model Context Protocol のサーバーとクライアントは、新しい TsgcAI_MCP_Server_Stdio ホストを通じて標準入出力上で実行できるようになりました。これにより、お使いの Delphi MCP サーバーを、Claude Code のような AI エージェントがローカルのサブプロセスとして起動できます。ツールは HTTP サーバー上とまったく同じ方法で登録します。
uses
SysUtils, sgcAI_MCP_Server, sgcAI_MCP_Classes, sgcAI_MCP_Types;
var
oServer: TsgcAI_MCP_Server_Stdio;
oTool: TsgcAI_MCP_Tool;
begin
oServer := TsgcAI_MCP_Server_Stdio.Create(nil);
try
oServer.ServerInfo.Name := 'MyDelphiServer';
oServer.ServerInfo.Version := '1.0';
oTool := oServer.MCPServer.Tools.AddTool('add', 'Adds two numbers');
oTool.InputSchema.Properties.AddProperty('a', True, aimcpjtNumber);
oTool.InputSchema.Properties.AddProperty('b', True, aimcpjtNumber);
oServer.MCPServer.OnMCPRequestTool := OnRequestTool;
// read JSON-RPC from stdin, write responses to stdout, blocks until EOF
oServer.Run;
finally
oServer.Free;
end;
end.
詳しくはこちら: MCP stdio Transport for Server and Client。
デフォルトで強化
2026.6 では、サーバー内の一連のサービス拒否(DoS)およびプロトコル適合性の問題を解消し、新しい制限を安全なデフォルト値を持つプロパティとして公開します。
WebSocket サーバーは、MaxMessageSize(デフォルト 64 MB、0 = 無制限)でメッセージのメモリを制限するようになり、サイズ超過のメッセージ、際限のないフラグメンテーション、permessage-deflate の「zip 爆弾」をクローズ 1009 で拒否します。新しい SecurityOptions.EnforceWebSocketVersion と SecurityOptions.ValidateWebSocketKey は RFC 6455 のハンドシェイクを検証し、どちらもデフォルトで有効です。
oServer := TsgcWebSocketServer.Create(nil);
oServer.Port := 80;
// accept messages up to 16 MB, reject anything larger with close 1009
oServer.MaxMessageSize := 16 * 1024 * 1024;
oServer.Active := True;
HTTP サーバーには、MaxRequestBodySize(デフォルト 64 MB)と StrictRequestParsing(デフォルト True、Content-Length と Transfer-Encoding の両方を持つリクエストを拒否)が追加されました。静的ファイル配信におけるパストラバーサルが修正され、HTTP/2 Rapid Reset(CVE-2023-44487)は接続ごとの RST_STREAM および制御フレーム制限で緩和され、DocumentRoot のファイルはメモリに完全に読み込まれる代わりに共有の TFileStream を使ってディスクからストリーミングされるようになりました。そのため、ファイルサイズや接続数にかかわらず、サーバーの RAM 使用量は一定に保たれます。
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.Port := 80;
oServer.MaxRequestBodySize := 16 * 1024 * 1024; // 16 MB, reject larger with 413
oServer.Active := True;
詳しくはこちら: Hardening the WebSocket Server および Hardening the HTTP Server。
ポスト量子および AEAD 暗号
ハイブリッドなポスト量子ハンドシェイクを構築するアプリケーションのために、2026.6 では ML-KEM-768 のカプセル化とデカプセル化(sgcKEM_MLKEM768_Encapsulate / Decapsulate、OpenSSL 3.5+)に加えて、同じ TBytes API の形状を共有する P-256 上の古典的な ECDH-as-KEM(sgcKEM_ECDH_P256_Encapsulate / Decapsulate)を追加しました。これにより、コードを変更することなく古典的 KEM とポスト量子 KEM を切り替えられます。
新しい sgcSSL_AEAD ユニットは、AES-128-GCM、AES-256-GCM、ChaCha20-Poly1305 向けの汎用 AEAD プリミティブ(sgcAEAD_Encrypt / sgcAEAD_Decrypt)を、呼び出し側が指定する 12 バイトのナンスと任意の AAD とともに提供します。sgcAEAD_EncryptPrefixed / sgcAEAD_DecryptPrefixed ラッパーは、Bouncy Castle GCM、JOSE A256GCM、libsodium、および大半の HPKE 形式のプロトコルで使われる自己完結型の「nonce(12) || ciphertext || tag(16)」ブロブを生成・消費します。
uses
sgcSSL_AEAD;
var
vKey, vPlain, vBlob, vOut: TBytes;
begin
// vKey: 32 bytes from KEM Decapsulate + HKDF
vBlob := sgcAEAD_EncryptPrefixed(aeadAES256GCM, vKey, vPlain, nil);
vOut := sgcAEAD_DecryptPrefixed(aeadAES256GCM, vKey, vBlob, nil);
end;
アカウントダウンロード API
eSeGeCe アカウントに新しい REST API が追加され、ログインして、サブスクリプションで利用権のあるファイルを一覧表示・ダウンロードできるようになりました。スクリプトや CI から直接実行できます。OpenAPI 3.0 で記述されており、sgcOpenAPI 上に構築されたすぐに使える Delphi クライアントを同梱しています。
curl -X POST https://www.esegece.com/api/v1/login \
-H "Content-Type: application/json" \
-d '{"username":"YOUR_USERNAME","password":"YOUR_PASSWORD"}'
詳しくはこちら: Automate Your Downloads with the Account API。
このリリースのその他
- セットアップに Include Resources オプションが追加されました。これをオフにすると、コンパイル前に
SGC_RESOURCESが未定義になり、埋め込みの JS リソースが除外されて、アプリケーションのサイズが削減されます。 - MQTT 5.0: Subscription Identifier と Server Reference のプロパティ識別子を修正しました。これらは厳格な 5.0 ピアが拒否する可能性がありました。
- AMQP 1.0: 大きなメッセージは、ネゴシエートされた max-frame-size を超えると複数のフレームに分割されるようになりました。
- STOMP: デフォルト設定で送信間隔が 0 のままになっていた場合に発生するハートビートのフラッドを修正しました。
- Server-Sent Events: フォールバックのリトライ値が、1000 倍されるのではなくミリ秒単位で送信されるようになりました。
- STUN / TURN: 完全な 96 ビットの暗号学的に乱数化されたトランザクション ID に対応し、ChannelData の長さが RFC 5766 に従ってパディングを除外するようになりました。
- 取引所 API: Bybit、Kraken、MEXC のストリームサブスクリプションを修正しました。提供を終了した FXCM クライアントは削除されました。
Options.WriteTimeOutが Linux およびその他の POSIX プラットフォームで動作するようになりました(SO_SNDTIMEO が timeval として渡されます)。これにより、読み取りの遅いクライアントがサーバースレッドを無期限にブロックすることがなくなりました。
アップグレード
2026.6 は、既存の 2026.x プロジェクトに対するドロップインアップグレードです。サーバー強化は安全なデフォルト値で出荷されるため、注意すべき唯一の点は 64 MB のデフォルトの MaxMessageSize / MaxRequestBodySize です。アプリケーションが正当により大きなペイロードをやり取りする場合は、以前の動作に合わせて制限を引き上げて(または無制限にするために 0 に設定して)ください。
有効なサブスクリプションをお持ちのお客様は、新しいビルドをカスタマーエリアから、または esegece.com/products/websockets/download からダウンロードできます。
ご質問、フィードバック、移行のサポートが必要ですか?お問い合わせください。コードを書いた本人から返信が届きます。
