プロセス間通信(IPC)
type: Concept
definition: 別プロセスとデータや合図をやり取りする仕組みの総称。
alternative label: Inter-Process Communication

名前付きパイプ
type: Concept
definition: Windowsのプロセス間通信手段のひとつ。リモートからの利用はアプリ自身のポートではなくSMB(TCP 445)を経由する。
recommended for: 同一マシン内の要求応答通信
recommended for: 小規模なツール間通信(コマンド数個)
configured by: PipeSecurity(名前付きパイプのACL)
mitigates: パイプ名の占有(スクワッティング)

同一マシン内の要求応答通信
type: Concept
definition: コマンドを送って結果を受け取る、同一マシン内で完結する対話的な通信の形態。

ローカルTCP
type: Concept
definition: localhostに対するTCP接続によるプロセス間通信で、言語・ランタイム・OSをまたいで通信できる汎用的なIPC手段。
alternative label: localhostへのTCP接続
recommended for: マシンをまたぐ通信の必要性
requires: フレーミング(メッセージ境界の決定)

マシンをまたぐ通信の必要性
type: Concept
definition: 同一マシン内に閉じず、別マシンや別OSのプロセスとも通信できる必要がある要件。

gRPC
type: Concept
definition: HTTP/2ベースの高性能なRPCフレームワーク。WCFサーバーのmodern化先の1つ。
recommended for: マシンをまたぐ通信の必要性
recommended for: サービス・メッセージ増加による自前プロトコル維持負担
not recommended for: 小規模なツール間通信(コマンド数個)

フレーミング(メッセージ境界の決定)
type: Concept
definition: バイトの並びのどこからどこまでが1メッセージかを決める仕組み。TCPでは自前設計が必須になる。

サービス・メッセージ増加による自前プロトコル維持負担
type: Concept
definition: サービスやメッセージの種類が増え、自前プロトコルのswitch文とドキュメントの維持が負担になってきた状態。

小規模なツール間通信(コマンド数個)
type: Concept
definition: コマンドが2〜3種類しかない程度の、小規模なツール間の通信。

ファイルマッピング(メモリマップトファイル)
type: Concept
definition: ファイルの内容をプロセスやシステムのアドレス空間にマップする仕組み。ディスク上のファイルに裏打ちされる形と、CreateFileMappingにINVALID_HANDLE_VALUEを渡してページファイルに裏打ちされる形(名前付き共有メモリ)がある。Windowsのキャッシュマネージャー自身の実装基盤でもある。
alternative label: File Mapping
alternative label: メモリマップトファイル
recommended for: 大容量・高頻度データ転送

大容量・高頻度データ転送
type: Concept
definition: 画像フレームや波形データのように、大きくて頻繁に転送されるデータのやり取り。

制御面とデータ面の分離(2チャネル構成)
type: Concept
definition: 開始・停止・設定変更などの制御メッセージと、実データの転送とで別のIPCチャネルを使い分ける設計。
alternative label: data plane / control plane

COM(コンポーネントオブジェクトモデル)
type: Concept
definition: 公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。
alternative label: Component Object Model
recommended for: 32bit/64bitブリッジ
not recommended for: プロセス間通信(IPC)

32bit/64bitブリッジ
type: Concept
definition: 32bitプロセスから64bit専用のDLLやSDKの機能を、別プロセスに切り出して呼び出す構成。

PipeSecurity(名前付きパイプのACL)
type: Concept
definition: 名前付きパイプへの接続を許可するアカウント・グループを明示的に設定する.NETのアクセス制御機構。

パイプ名の占有(スクワッティング)
type: Concept
definition: 悪意あるプロセスが先に同じ名前で名前付きパイプのサーバーを立てて待ち受け、クライアントの接続を奪う攻撃。

ファイル連携
type: Concept
definition: 一方のプロセスが出力フォルダーにファイルを置き、もう一方が拾って処理する疎結合な連携方式。
alternative label: ファイルベースの連携
not recommended for: 同一マシン内の要求応答通信
recommended for: 疎結合・非同期のバッチ連携

疎結合・非同期のバッチ連携
type: Concept
definition: 双方が同時に起動している必要がなく、証跡を残しながら非同期に処理を受け渡す連携形態。

Windowsサービス
type: Concept
definition: ユーザーのサインインと無関係にバックグラウンドで動くWindowsのプロセス。
alternative label: サービス

subject: 名前付きパイプ
predicate: recommendedFor
object: 同一マシン内の要求応答通信
description: 同一マシン内の要求応答(コマンドを送って結果をもらう)通信では名前付きパイプが第一候補として推奨される
evidence: how-to-use-named-pipes-for-network-interprocess-communication
verified at: 2026-08-01
certainty: established

subject: ローカルTCP
predicate: recommendedFor
object: マシンをまたぐ通信の必要性
description: 将来ネットワークを越える可能性が見えているなら最初からローカルTCPかgRPCにする
evidence: interprocess-communications
verified at: 2026-08-01
certainty: established

subject: gRPC
predicate: recommendedFor
object: マシンをまたぐ通信の必要性
description: マシン越えや言語混在が見えている構成ではgRPCも有力な選択肢として推奨される
evidence: interprocess
verified at: 2026-08-01
certainty: established

subject: ローカルTCP
predicate: requires
object: フレーミング(メッセージ境界の決定)
description: TCPはバイトストリームで送った単位で届く保証がないため、length プレフィックスなどのフレーミングをアプリ層で設計する必要がある
evidence: interprocess-communications
verified at: 2026-08-01
certainty: established

subject: gRPC
predicate: uses
object: 名前付きパイプ
description: .NET 8以降のASP.NET Core(Kestrel)でWindows上のプロセス間通信に使う場合に限り、gRPCの通信路として名前付きパイプを直接サポートし、ポートレスでACL統合された構成を作れる。gRPCの通信路は通常TCP(HTTP/2)である
evidence: interprocess-namedpipes
verified at: 2026-08-01
certainty: context-dependent

subject: gRPC
predicate: recommendedFor
object: サービス・メッセージ増加による自前プロトコル維持負担
description: サービスや呼び出しの種類が増え自前プロトコルのswitch文とドキュメント維持が負担になってきたらgRPCの枠組みが効く
evidence: interprocess
verified at: 2026-08-01
certainty: established

subject: 名前付きパイプ
predicate: recommendedFor
object: 小規模なツール間通信(コマンド数個)
description: コマンド数が少ないツール間通信では名前付きパイプ+JSONのほうが総コストが低い
evidence: interprocess-namedpipes
verified at: 2026-08-01
certainty: established

subject: gRPC
predicate: notRecommendedFor
object: 小規模なツール間通信(コマンド数個)
description: コマンドが2〜3種類しかないツール同士にはASP.NET Coreのホスティング基盤を抱えるgRPCはオーバーキルになりがちである
evidence: interprocess-namedpipes
verified at: 2026-08-01
certainty: established

subject: ファイルマッピング(メモリマップトファイル)
predicate: recommendedFor
object: 大容量・高頻度データ転送
description: 画像フレームや波形データのような大容量・高頻度のデータには共有メモリ(メモリマップトファイル)が最速で、この用途にはほぼ一択と言える
evidence: system.io.memorymappedfiles.memorymappedfile
verified at: 2026-08-01
certainty: established

subject: ファイルマッピング(メモリマップトファイル)
predicate: requires
object: 制御面とデータ面の分離(2チャネル構成)
description: 共有メモリは同期を1バイトも提供しないため、開始・停止・設定変更のような制御メッセージのやり取りにも使おうとする場合は、制御面を名前付きパイプなど別チャネルに逃がし、データ面だけを共有メモリに乗せる構成が定石とされる
evidence: system.io.memorymappedfiles.memorymappedfile
verified at: 2026-08-01
certainty: context-dependent

subject: 制御面とデータ面の分離(2チャネル構成)
predicate: uses
object: 名前付きパイプ
description: Windows上でこのパターンを組む場合、制御面(開始・停止・設定変更)は名前付きパイプなど低頻度の要求応答チャネルに割り当てる
evidence: system.io.memorymappedfiles.memorymappedfile
verified at: 2026-08-01
certainty: context-dependent

subject: 制御面とデータ面の分離(2チャネル構成)
predicate: uses
object: ファイルマッピング(メモリマップトファイル)
description: Windows上でこのパターンを組む場合、データ面(フレーム・波形などの高頻度データ)は共有メモリ(メモリマップトファイル)に割り当てる
evidence: system.io.memorymappedfiles.memorymappedfile
verified at: 2026-08-01
certainty: context-dependent

subject: COM(コンポーネントオブジェクトモデル)
predicate: recommendedFor
object: 32bit/64bitブリッジ
description: 32bitアプリから64bitのDLLを使うような境界越えでは、COM基盤がマーシャリングを肩代わりするアウトプロセスCOMサーバーが今も実用的な選択肢である
evidence: interprocess-communications
verified at: 2026-08-01
certainty: established

subject: 名前付きパイプ
predicate: recommendedFor
object: 32bit/64bitブリッジ
description: 呼び出し側がC#同士の32/64bitブリッジでは、64bitのヘルパープロセスを名前付きパイプで呼ぶ構成のほうが配布も調査も楽である
evidence: interprocess-communications
verified at: 2026-08-01
certainty: context-dependent

subject: COM(コンポーネントオブジェクトモデル)
predicate: notRecommendedFor
object: プロセス間通信(IPC)
description: COM(アウトプロセス)は新規のアプリ間通信の第一候補にはもうしないが、VBA連携や32/64bitブリッジの文脈では今も現役の道具として温存される
evidence: interprocess-communications
verified at: 2026-08-01
certainty: established

subject: 名前付きパイプ
predicate: configuredBy
object: PipeSecurity(名前付きパイプのACL)
description: 権限境界を越える通信(UACブローカーやサービスとの通信)では既定のCurrentUserOnlyが使えないため、PipeSecurityでACLを明示的に構成する
evidence: system.io.pipes.pipeoptions
verified at: 2026-08-01
certainty: established

subject: 名前付きパイプ
predicate: mayCause
object: パイプ名の占有(スクワッティング)
description: パイプ名は\\.\pipe\配下の全員から見える名前空間にあり、悪意あるプロセスが同名で先にサーバーを立てて待ち受けるスクワッティングが起こり得る
evidence: interprocess
verified at: 2026-08-01
certainty: context-dependent

subject: 名前付きパイプ
predicate: mitigates
object: パイプ名の占有(スクワッティング)
description: サーバー側でPipeOptions.FirstPipeInstanceを指定し同名パイプが既にあれば失敗させる、クライアント側で接続後に所有者アカウントを検証するといった対策で軽減できる
evidence: interprocess
verified at: 2026-08-01
certainty: established

subject: ファイル連携
predicate: notRecommendedFor
object: 同一マシン内の要求応答通信
description: 応答が欲しい対話的な通信や秒間何十回も発生するやり取りにはファイル連携は向かない
evidence: interprocess-communications
verified at: 2026-08-01
certainty: established

subject: ファイル連携
predicate: recommendedFor
object: 疎結合・非同期のバッチ連携
description: 双方が同時起動している必要がなく処理の証跡が残るファイル連携は、疎結合・非同期でよく監査ログを残したい連携で今も有力である
evidence: interprocess-communications
verified at: 2026-08-01
certainty: established

subject: Windowsサービス
predicate: requires
object: PipeSecurity(名前付きパイプのACL)
description: UIアプリとWindowsサービスを名前付きパイプで結ぶ構成を選んだ場合に限り、サービスは別アカウントで動くためPipeSecurityでACLを明示する必要がある。名前付きパイプを使わないサービスにはこの前提はない
evidence: system.io.pipes.pipeoptions
verified at: 2026-08-01
certainty: context-dependent