🐷
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