2 つのライブラリ、2 つの異なる仕事
ほぼすべての Delphi 開発者は、どこかで Indy を使ったことがあります。IDE に標準同梱され、1990 年代後半から存在し、Delphi のネットワーキングコードの 1 世代は TIdHTTP、TIdTCPClient、TIdSMTP 等の上に構築されています。sgcWebSockets はずっと新しい商用ライブラリで、Indy が最初に設計されて以降に登場したプロトコル — WebSocket、HTTP/2、HTTP/3 / QUIC、MQTT 5、AMQP 1.0、SSE、WAMP、WebRTC、MCP — に加え、数多くの REST API 統合に焦点を当てています。
Embarcadero フォーラムや Stack Overflow で最もよくある質問は、「Indy が無料なのに、なぜ sgcWebSockets にお金を払うのか?」のバリエーションです。短い答えは、両者は異なる問題を解決しており、多くの実プロジェクトでは両方を使うことになる、というものです。この記事では、どちらが(あるいはどの組み合わせが)アプリケーションに合うかを判断できるよう、2026 年時点での実践的な違いを解説します。
それぞれのライブラリが実際に行うこと
Indy は、HTTP/1.1、FTP、SMTP、POP3、IMAP、NNTP、DNS、IRC、Telnet、Whois、加えて TCP サーバーフレームワークといった古典的なインターネットプロトコルの長いリストを備えた、汎用 TCP/UDP ツールキットです。設計はスレッド/接続およびブロッキング I/O です。標準の Indy にはネイティブな WebSocket クライアントもサーバーもありません — 自前で追加する必要があり、複数のコミュニティプロジェクトがまさにそれをまちまちの結果で実装しています。
sgcWebSockets は、最新のクライアント/サーバーシナリオに焦点を絞ったプロトコル豊富なライブラリです。コアの TsgcWebSocketClient / TsgcWebSocketHTTPServer ペアを中心に、HTTP/2、QUIC ベースの HTTP/3、MQTT、AMQP、STOMP、SSE、WAMP、P2P/WebRTC、IoT(CoAP、AWS IoT、Azure IoT)、エンド・ツー・エンド暗号化、30 以上の API ラッパー(OpenAI、Anthropic、Google、AWS、Azure、Binance、Coinbase、Kraken、Telegram、WhatsApp など)のアドオンを備えます。
見落とされがちな重要事項: sgcWebSockets は内部で Indy をトランスポートバックエンドの 1 つとして使用しています。いくつかのコンポーネントの TCP/TLS 配管は、内部では Indy の TIdTCPClient / TIdHTTPServer です。したがって、sgcWebSockets をインストールしても Indy が置き換わるわけではなく、その上に構築されます。Indy が最適でないシナリオ向けに、代替トランスポート(Synapse スタイル、ICS、SChannel)も提供されます。
機能ごとの比較
| 機能 | Indy(標準) | sgcWebSockets |
|---|---|---|
| HTTP/1.1 クライアント | あり(TIdHTTP) | あり(TsgcHTTPComponentClient、Indy または ICS バックエンドが利用可能) |
| HTTP/1.1 サーバー | あり(TIdHTTPServer) | あり(TsgcWebSocketHTTPServer、同一ポートで HTTP と WS を処理) |
| WebSocket クライアント/サーバー | ネイティブサポートなし | RFC 6455 完全対応、permessage-deflate、サブプロトコル、Autobahn テスト済み |
| HTTP/2(h2 + h2c) | なし | あり、独自 HPACK + フレーム層 |
| HTTP/3 / QUIC | なし | あり(msquic ベース) |
| MQTT 3.1.1 および 5.0 | なし | あり、クライアントとブローカー |
| AMQP 1.0 / 0.9.1 | なし | あり |
| STOMP、SSE、WAMP | なし | あり |
| WebRTC / P2P / STUN / TURN | なし | あり |
| CoAP および IoT クラウド(AWS、Azure) | なし | あり |
| OpenAI、Anthropic、Gemini、MCP | なし | あり、専用コンポーネント |
| FTP / SMTP / POP3 / IMAP | あり | なし(用途には Indy を使用) |
| 無料/商用 | 無料、MIT 系 | 商用、Free 版を含む複数エディション |
| Delphi バージョン | D7 以降(フォークによる) | D7 から D13 まで |
| 活発な保守 | コミュニティ(GitHub の IndyProject) | ベンダー、月次リリース |
Indy がいまだに有利な場面
プロジェクトが古典的なインターネットクライアント — HTTP でファイルをダウンロードする、フォームを POST する、SMTP メールを送信する、IMAP でメールを取得する、古い FTP サーバーと通信する — である場合、標準の Indy が正しい答えです。無料で、IDE に同梱され、API が馴染み深く、他に何も必要ありません。Indy がネイティブで提供するプロトコル(NNTP、IRC、Telnet、Whois)の趣味的な TCP サーバーも同様です。これらの用途では、有料ライブラリを追加するのは過剰です。
すでに Indy 型を使用しているコードと相互運用しなければならない場合 — 例えば TIdSSLIOHandlerSocketOpenSSL や TIdHTTPServerCommandHandler を期待するコンポーネント — も Indy の出番です。
sgcWebSockets が適切な場面
モダンな Web スタックが関わるものは、sgcWebSockets を使うと大幅に容易になります。具体的には:
- WebSocket — 全二重メッセージングが第一級の機能です。サーバーは HTTP と WebSocket を同一ポートで処理し、サブプロトコルを管理し、圧縮をサポートし、自動再接続の WatchDog と最初から統合されています。
- HTTP/2 と HTTP/3 — Apple Push Notifications、Google サービス、そして h2 最低必須を強制し始めた多くの REST API に必要です。Indy にはこの分野の答えがありません。
- メッセージングブローカー — MQTT 5、AMQP 1.0、STOMP、WAMP、SSE がすべて、TLS、再接続、認証付きですぐに使えるコンポーネントとして同梱されます。
- リアルタイムマルチメディア — WebRTC、ICE、STUN、TURN、DTLS-SRTP により、ブラウザ互換のオーディオ/ビデオとデータチャネルを実現します。
- AI とクラウド API — OpenAI、Anthropic、Google Gemini、AWS、Azure、Telegram、WhatsApp、Stripe その他数十が、生の REST 呼び出しではなく型付きコンポーネントとしてラップされています。
パフォーマンスとスケーリング
Indy のスレッド/接続モデルは単純で正しいですが、コンテキストスイッチがボトルネックになる前の典型的な Windows サーバーでの実用スループットは、数千の同時接続程度に抑えられます。sgcWebSockets は互換性のために同じ Indy バックエンドを提供しつつ、Windows では IOCP ベースのサーバートランスポートも備えており、プロセスごとに数万の同時 WebSocket 接続でベンチマークされています。純粋な HTTP スループットでは差は小さくなりますが、長寿命接続(WebSocket、MQTT、SSE)ではアーキテクチャの差が効いてきます。
アイドル接続あたりのメモリフットプリントも、ソケットごとに専用 OS スレッドが不要な IOCP トランスポートではより低くなります。Linux では、sgcWebSockets が同梱する Indy フォーク経由の epoll ベースサーバーで同様の状況です。
保守とリリース頻度
Indy は IndyProject の GitHub リポジトリで少数のボランティアによって保守されています。リリースは遅いですが、コードベースは安定しています。重要な修正(TLS 互換性、最新の OpenSSL バインディング)は取り込まれますが、必ずしも迅速ではありません。
sgcWebSockets は eSeGeCe による商用製品で、月次リリース、公開された履歴ファイル、ベンダー直接のサポートがあります。新しい Delphi バージョンは通常初日からサポートされ — Delphi 13 は最初のベータからサポート —、新しいプロトコル改訂(MQTT 5.0.1、HTTP/3 最終版、MCP 仕様更新)は数年ではなく数日で出荷されます。
ライセンスと価格
Indy は無料で、Delphi に同梱されています。sgcWebSockets は商用ですが、非商用利用向けの Free Edition と、プロトコルカバレッジが段階的に広がる有償エディション(Standard、Professional、Enterprise、All-Access)があります。ほとんどの商用プロジェクトは、デプロイ済み顧客が 1 社あれば単一開発者の Professional ライセンスを正当化できます。
シンプルな判断ルール
2026 年の実用的な目安:
- Indy を使う: SMTP/POP3/IMAP/FTP、既存の Indy コードベース内での短寿命 HTTP ダウンロード、Indy がすでにネイティブで扱う古典的なインターネットプロトコル。
- sgcWebSockets を使う: WebSocket、HTTP/2、HTTP/3、MQTT、AMQP、WebRTC、IoT、あるいは AI/REST API が登場した瞬間、または数千接続を超えてスケールするサーバーが必要なとき。
- 両方を同じプロジェクトで使う — 実はこれが最も一般的なパターンです。Indy はメールと FTP 層を担当し、sgcWebSockets はリアルタイムとモダン API 層を処理し、内部では同じ Indy SSL/IO インフラストラクチャを共有します。
まとめ
Indy はどこにも行きません — どの Delphi ツールボックスにもある信頼のハンマーです。しかし、2026 年のインターネットを定義するプロトコル(WebSocket、HTTP/2/3、MQTT、WebRTC、AI API)は Indy が設計された当時にはまったく存在しませんでした。sgcWebSockets はそのギャップを、有用な箇所では Indy の上に構築し、必要な箇所では置き換える、焦点を絞り、活発に保守され、商用サポートされたライブラリで埋めます。モダンなバックエンドを対象とする新規プロジェクトでは、もはや 「Indy か sgcWebSockets か?」 ではなく — 「両者をどう組み合わせるか?」 が問いとなります。