🐷

UnixソケットとD-bus

に公開

とても良い質問です!
UnixソケットD-Bus は、どちらも「プロセス間通信(IPC:Inter-Process Communication)」の手段ですが、目的と使い方が異なります。

以下で、わかりやすく・実務感も交えて解説します👇


✅ Unixソケットとは?

一言で:

同じマシン上のプログラム同士が、ファイルを通じて通信するための仕組み(ローカル用のソケット)

特徴:

  • ネットワーク通信っぽく扱えるが、ファイルを経由
  • 通常は /tmp/run にある .sock ファイル
  • HTTPサーバー(nginx, Docker, systemd)などでもよく使われる

例:

/var/run/docker.sock

Docker CLIはこのファイル経由で、Dockerデーモンに命令を出します。

実務での使用例:

  • Webサーバーとアプリ間通信(Nginx ↔ uWSGI)
  • Docker CLIとデーモン間
  • systemdの制御ソケット

✅ D-Bus(Desktop Bus)とは?

一言で:

アプリケーションやサービス同士が、メッセージをやりとりするための「バス通信」システム

特徴:

  • イベント駆動型のメッセージ通信
  • GNOMEやKDEなどデスクトップ環境の裏側で大量に使われている
  • サービスの起動、状態通知、電源管理、ネットワーク制御など

よくある用途:

  • 「Wi-Fiがつながった」→ 通知センターに知らせる
  • 「音量が変更された」→ サウンドデーモンに伝える
  • systemctl --user コマンドも裏で D-Bus を利用

D-Bus の通信は内部的に Unixソケットを使っている

つまり:

D-Bus = Unixソケット + メッセージ規格 + バス的なルーティング機構


✅ ざっくり比較表

項目 Unixソケット D-Bus
用途 ローカル通信(汎用) アプリ間の高レベルな通信API
通信方式 ソケットファイル バス方式(Publish/Subscribe型)
使い方 低レベル(送受信コマンド要実装) 高レベル(APIを呼ぶだけでOK)
使用例 Docker, Nginx, systemd GNOME通知、Bluetooth、電源管理など
中身 生のバイト送受信 JSON風メッセージ+オブジェクト指向

🧠 結論

質問 回答
Unixソケットって何? ローカル専用のネットワーク通信みたいなもの(ファイル経由でプロセス同士が会話)
D-Busって何? アプリ同士が便利にやりとりするための「おしゃべりバス」(裏でUnixソケットを使う)
なぜ使う? ローカル通信で高速・安全・効率的なやりとりができるから

「実際の通信の中身ってどんな感じ?」「コードで見てみたい」などあれば、シンプルなサンプルも作れますよ。興味ありますか?

Discussion