このページでは

Qtにおけるプロセス間通信

Qt では、アプリケーション内でプロセス間通信 (IPC) を実装するためのいくつかの方法が用意されています。Qt の IPC 機能には、以下のものが含まれます。

  • プロセスの同期とリソースの共有
  • ローカルまたはネットワークを介したバイトレベルのデータ交換
  • プロセス間またはシステム間で複製されたQtオブジェクトの共有
  • 構造化メッセージやリモートプロシージャコール(RPC)の受け渡し
  • IoT および産業用システム向けの M2M 業界標準プロトコルの使用

IPCメカニズムの多くはネットワーク接続されたデバイス向けであり、TCP、UDP、HTTPなどのネットワークプロトコルを使用します。ネットワークと接続性の概要では、ネットワークに関するトピックについてより詳しく説明しています。

Qtは、JSON、XML、Protobuf、CBORなどの構造化データ形式をサポートしています。構造化データの詳細については、「データ処理とI/O」の概要ページを参照してください。

プロセスの同期とリソースの共有

ローカルリソースを共有するプロセスや、アクションとデータを同期させるシステムでは、システムセマフォや共有メモリを使用できます。これらの機能は Qt Core モジュールの一部です。

Qtは、QSystemSemaphore を含むプロセス間同期のためのクラスを提供しています。QSemaphore と同様に、同じシステム上の複数のプロセスからアクセス可能です。これはキーによってグローバルに識別され、QtではQNativeIpcKey クラスによって表されます。さらに、OSによっては、Qtがメモリ共有のための複数の異なるバックエンドをサポートしている場合があります。

詳細な説明については、以下のページを参照してください:

共有メモリ

クロスプラットフォームの共有メモリクラスであるQSharedMemory は、オペレーティングシステムの共有メモリ実装へのアクセスを提供します。これにより、複数のスレッドやプロセスによる共有メモリセグメントへの安全なアクセスが可能になります。さらに、QSystemSemaphore は、システムによって共有されるリソースへのアクセスを制御し、プロセス間の通信を可能にします。

子プロセスの作成

QProcess クラスは、外部プログラムを子プロセスとして起動し、それらと通信することができます。このクラスは、子プロセスの状態を監視および制御するためのAPIを提供します。QProcess は、QIODevice を継承することで、子プロセスの入出力チャネルへのアクセスを提供します。

リモートプロセス間またはシステム間でQtオブジェクトを共有する

Qt Remote Objects モジュールは、デバイスやプロセスが Qt オブジェクトを共有できるようにするリモートオブジェクトメカニズムを提供します。これは、仲介役となるNode を使用してReplicaオブジェクトと同期されるSourceオブジェクトを利用します。これらの Replica は本質的にプロキシであり、Source オブジェクトのプロパティ、シグナル、およびスロットをミラーリングすることで、リモートプロセスがネットワークトランスポートを直接意識することなくオブジェクトとやり取りできるようにします。

リモートプロシージャコール(RPC)によるメッセージの送信

リモートプロシージャコール(RPC)は、基盤となるネットワーク通信を抽象化する高レベルなメカニズムです。RPC を使用すると、クライアントは、リモートサーバー上で実行される関数を、あたかもローカル関数を呼び出すかのように呼び出すことができます。多くのプログラミング言語が RPC 技術をサポートしており、複数のプログラミング言語を使用する複雑なシステムでの実装を簡素化します。

この Qt GRPC モジュールは、gRPCプロトコルを使用してリモートプロシージャコール(RPC)を実装しています。gRPCは、シリアル化された形式でメッセージを送信するための広く採用されているフレームワークであり、効率的なネットワーク通信のためにHTTP/2を使用するのが最も一般的です。 gRPCは、モジュール化されたマイクロサービスや、チャットやストリーミングプラットフォームなどの低遅延アプリケーションにおける通信に最適です。

M2M業界標準プロトコルの利用

マシン・トゥ・マシン(M2M)業界プロトコルは、センサーや自動化システムなど、厳しいリソース制約下にあるシステムに特化したものです。多くの場合、製造、医療、環境モニタリングなどの業界やユースケースに固有のものです。これらのシステムは、多くの場合、低消費電力であり、処理能力も限られています。

この Qt MQTT このモジュールは、QtアプリケーションにMQTT機能を提供します。MQTTは、パブリッシュ・アンド・サブスクライブパターンを用いてシステム内で情報を送信するプロトコルです。MQTTシステムでは、ブローカーが クライアントとの送受信を管理します。 クライアントは、パブリッシャー、サブスクライバー、あるいはその両方の役割を担うことができます。MQTTは、産業用システムや製造システムなど、帯域幅が狭く遅延が大きい環境において有効です。

この Qt CoAP モジュールは、QtアプリケーションにConstrained Application Protocol(CoAP)を提供します。CoAPは、UDPとRESTfulの原則を用いて、制約のあるシステム内で情報を送信するプロトコルです。CoAPは、コンパクトなデータグラムメッセージと低いオーバーヘッドを活用するように特別に設計されています。

この Qt OPC UA このモジュールは、QtアプリケーションにOPC UAを提供します。産業用システム向けに、クライアントとサーバー間のIPCメカニズムを採用しています。OPC UAは複雑なシステム向けに設計されており、セキュリティ対策が組み込まれています。

MQTT、CoAP、およびOPC UAを用いてハイブリッドシステムを実装できます。例えば、クラウド通信をMQTTで、メインシステムをOPC UAで実装し、個々のセンサーやデバイスをCoAPを使用して接続することができます。

特定業界やその開発エコシステムにおいて、あるプロトコルが広く採用されている場合があります。システムアーキテクチャやメッセージの構成も異なります。例えば、MQTTは主にTCPを使用するのに対し、CoAPはUDPを使用します。その結果、MQTTではTLSを、CoAPではDTLSを使用して安全な転送を行うことができます。

D-Busプロトコルの使用

Qt D-Bus モジュールは、Qt D-Busプロトコルを用いたIPCを実装するために使用できるUnix専用のライブラリです。これはQtのシグナルとスロットのメカニズムをIPCレベルまで拡張し、あるプロセスから発信されたシグナルを別のプロセスのスロットに接続することを可能にします。

アプリケーションでのセッションの使用

Linux/X11、Windows、および macOS において、Qt はセッション管理のサポートを提供しています。セッションを使用すると、イベントをプロセスに伝播させることができます。例えば、シャットダウンが発生した際に通知を行う場合などです。これにより、プロセスやアプリケーションは、開いているドキュメントの保存など、必要な操作を実行できるようになります。詳細については、「セッション管理」のページを参照してください。

IPCに関するセキュリティ上の考慮事項

データはプロセス間やシステム間で転送されるため、プライバシーやセキュリティの問題を考慮する必要があります。攻撃者がネットワーク内のデータを傍受したり、外部プロセスがシステム内のデータを監視したりする可能性があります。

実装可能なセキュリティ対策には、次のようなものがあります。

  • データの送受信時には暗号化を使用してください。「Secure Sockets Layer (SSL) クラス」を参照してください。
  • 強力な認証および認可メカニズムを使用してください。 Qt Network Authorizationを参照してください。
  • 信頼できないデータを検証し、適切に処理してください。「信頼できないデータの取り扱い」を参照してください。
  • 不正利用を防ぐために、レート制限を設定し、トラフィックを監視してください。
  • 監視攻撃やリプレイ攻撃から保護するために、ソルトやノンセの手法を取り入れてください。
  • セキュリティの脆弱性を修正するために、環境を更新してください。

「Qt のセキュリティ」ページでは、Qt のセキュリティポリシーと対策について解説しています。Qt モジュールはさまざまなプロトコルを実装している可能性があるため、セキュリティに関して追加の考慮事項がある場合があります。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.