@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/windows-ipc-decision-table/#article>
    schema:about <https://comcomponent.com/knowledge/ipc/>, <https://comcomponent.com/knowledge/named-pipe/> ;
    schema:mentions <https://comcomponent.com/knowledge/local-tcp/>, <https://comcomponent.com/knowledge/grpc/>, <https://comcomponent.com/knowledge/memory-mapped-file/>, <https://comcomponent.com/knowledge/com/>, <https://comcomponent.com/knowledge/file-based-integration/>, <https://comcomponent.com/knowledge/message-framing/>, <https://comcomponent.com/knowledge/bitness-bridge/>, <https://comcomponent.com/knowledge/control-data-plane-separation/>, <https://comcomponent.com/knowledge/pipe-name-squatting/>, <https://comcomponent.com/knowledge/pipe-security/>, <https://comcomponent.com/knowledge/request-response-ipc/>, <https://comcomponent.com/knowledge/cross-machine-ipc-need/>, <https://comcomponent.com/knowledge/high-throughput-data-transfer/>, <https://comcomponent.com/knowledge/growing-protocol-complexity/>, <https://comcomponent.com/knowledge/small-scale-tool-ipc/>, <https://comcomponent.com/knowledge/loosely-coupled-batch-integration/>, <https://comcomponent.com/knowledge/windows-service/> .

<https://comcomponent.com/knowledge/ipc/> a skos:Concept ;
    skos:prefLabel "プロセス間通信(IPC)"@ja ;
    skos:definition "別プロセスとデータや合図をやり取りする仕組みの総称。"@ja ;
    skos:altLabel "Inter-Process Communication" .

<https://comcomponent.com/knowledge/named-pipe/> a skos:Concept ;
    skos:prefLabel "名前付きパイプ"@ja ;
    skos:definition "Windowsのプロセス間通信手段のひとつ。リモートからの利用はアプリ自身のポートではなくSMB(TCP 445)を経由する。"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/request-response-ipc/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/small-scale-tool-ipc/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/pipe-security/> ;
    ks:mitigates <https://comcomponent.com/knowledge/pipe-name-squatting/> .

<https://comcomponent.com/knowledge/request-response-ipc/> a skos:Concept ;
    skos:prefLabel "同一マシン内の要求応答通信"@ja ;
    skos:definition "コマンドを送って結果を受け取る、同一マシン内で完結する対話的な通信の形態。"@ja .

<https://comcomponent.com/knowledge/local-tcp/> a skos:Concept ;
    skos:prefLabel "ローカルTCP"@ja ;
    skos:definition "localhostに対するTCP接続によるプロセス間通信で、言語・ランタイム・OSをまたいで通信できる汎用的なIPC手段。"@ja ;
    skos:altLabel "localhostへのTCP接続"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/cross-machine-ipc-need/> ;
    ks:requires <https://comcomponent.com/knowledge/message-framing/> .

<https://comcomponent.com/knowledge/cross-machine-ipc-need/> a skos:Concept ;
    skos:prefLabel "マシンをまたぐ通信の必要性"@ja ;
    skos:definition "同一マシン内に閉じず、別マシンや別OSのプロセスとも通信できる必要がある要件。"@ja .

<https://comcomponent.com/knowledge/grpc/> a skos:Concept ;
    skos:prefLabel "gRPC"@ja ;
    skos:definition "HTTP/2ベースの高性能なRPCフレームワーク。WCFサーバーのmodern化先の1つ。"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/cross-machine-ipc-need/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/growing-protocol-complexity/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/small-scale-tool-ipc/> .

<https://comcomponent.com/knowledge/message-framing/> a skos:Concept ;
    skos:prefLabel "フレーミング(メッセージ境界の決定)"@ja ;
    skos:definition "バイトの並びのどこからどこまでが1メッセージかを決める仕組み。TCPでは自前設計が必須になる。"@ja .

<https://comcomponent.com/knowledge/growing-protocol-complexity/> a skos:Concept ;
    skos:prefLabel "サービス・メッセージ増加による自前プロトコル維持負担"@ja ;
    skos:definition "サービスやメッセージの種類が増え、自前プロトコルのswitch文とドキュメントの維持が負担になってきた状態。"@ja .

<https://comcomponent.com/knowledge/small-scale-tool-ipc/> a skos:Concept ;
    skos:prefLabel "小規模なツール間通信(コマンド数個)"@ja ;
    skos:definition "コマンドが2〜3種類しかない程度の、小規模なツール間の通信。"@ja .

<https://comcomponent.com/knowledge/memory-mapped-file/> a skos:Concept ;
    skos:prefLabel "ファイルマッピング(メモリマップトファイル)"@ja ;
    skos:definition "ファイルの内容をプロセスやシステムのアドレス空間にマップする仕組み。ディスク上のファイルに裏打ちされる形と、CreateFileMappingにINVALID_HANDLE_VALUEを渡してページファイルに裏打ちされる形(名前付き共有メモリ)がある。Windowsのキャッシュマネージャー自身の実装基盤でもある。"@ja ;
    skos:altLabel "File Mapping" ;
    skos:altLabel "メモリマップトファイル"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/high-throughput-data-transfer/> .

<https://comcomponent.com/knowledge/high-throughput-data-transfer/> a skos:Concept ;
    skos:prefLabel "大容量・高頻度データ転送"@ja ;
    skos:definition "画像フレームや波形データのように、大きくて頻繁に転送されるデータのやり取り。"@ja .

<https://comcomponent.com/knowledge/control-data-plane-separation/> a skos:Concept ;
    skos:prefLabel "制御面とデータ面の分離(2チャネル構成)"@ja ;
    skos:definition "開始・停止・設定変更などの制御メッセージと、実データの転送とで別のIPCチャネルを使い分ける設計。"@ja ;
    skos:altLabel "data plane / control plane" .

<https://comcomponent.com/knowledge/com/> a skos:Concept ;
    skos:prefLabel "COM(コンポーネントオブジェクトモデル)"@ja ;
    skos:definition "公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。"@ja ;
    skos:altLabel "Component Object Model" ;
    ks:recommendedFor <https://comcomponent.com/knowledge/bitness-bridge/> ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/ipc/> .

<https://comcomponent.com/knowledge/bitness-bridge/> a skos:Concept ;
    skos:prefLabel "32bit/64bitブリッジ"@ja ;
    skos:definition "32bitプロセスから64bit専用のDLLやSDKの機能を、別プロセスに切り出して呼び出す構成。"@ja .

<https://comcomponent.com/knowledge/pipe-security/> a skos:Concept ;
    skos:prefLabel "PipeSecurity(名前付きパイプのACL)"@ja ;
    skos:definition "名前付きパイプへの接続を許可するアカウント・グループを明示的に設定する.NETのアクセス制御機構。"@ja .

<https://comcomponent.com/knowledge/pipe-name-squatting/> a skos:Concept ;
    skos:prefLabel "パイプ名の占有(スクワッティング)"@ja ;
    skos:definition "悪意あるプロセスが先に同じ名前で名前付きパイプのサーバーを立てて待ち受け、クライアントの接続を奪う攻撃。"@ja .

<https://comcomponent.com/knowledge/file-based-integration/> a skos:Concept ;
    skos:prefLabel "ファイル連携"@ja ;
    skos:definition "一方のプロセスが出力フォルダーにファイルを置き、もう一方が拾って処理する疎結合な連携方式。"@ja ;
    skos:altLabel "ファイルベースの連携"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/request-response-ipc/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/loosely-coupled-batch-integration/> .

<https://comcomponent.com/knowledge/loosely-coupled-batch-integration/> a skos:Concept ;
    skos:prefLabel "疎結合・非同期のバッチ連携"@ja ;
    skos:definition "双方が同時に起動している必要がなく、証跡を残しながら非同期に処理を受け渡す連携形態。"@ja .

<https://comcomponent.com/knowledge/windows-service/> a skos:Concept ;
    skos:prefLabel "Windowsサービス"@ja ;
    skos:definition "ユーザーのサインインと無関係にバックグラウンドで動くWindowsのプロセス。"@ja ;
    skos:altLabel "サービス"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/named-pipe/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/request-response-ipc/> ;
    schema:description "同一マシン内の要求応答(コマンドを送って結果をもらう)通信では名前付きパイプが第一候補として推奨される"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/io/how-to-use-named-pipes-for-network-interprocess-communication> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/local-tcp/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/cross-machine-ipc-need/> ;
    schema:description "将来ネットワークを越える可能性が見えているなら最初からローカルTCPかgRPCにする"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/ipc/interprocess-communications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/grpc/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/cross-machine-ipc-need/> ;
    schema:description "マシン越えや言語混在が見えている構成ではgRPCも有力な選択肢として推奨される"@ja ;
    ks:evidence <https://learn.microsoft.com/aspnet/core/grpc/interprocess> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/local-tcp/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/message-framing/> ;
    schema:description "TCPはバイトストリームで送った単位で届く保証がないため、length プレフィックスなどのフレーミングをアプリ層で設計する必要がある"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/ipc/interprocess-communications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/grpc/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/named-pipe/> ;
    schema:description ".NET 8以降のASP.NET Core(Kestrel)でWindows上のプロセス間通信に使う場合に限り、gRPCの通信路として名前付きパイプを直接サポートし、ポートレスでACL統合された構成を作れる。gRPCの通信路は通常TCP(HTTP/2)である"@ja ;
    ks:evidence <https://learn.microsoft.com/aspnet/core/grpc/interprocess-namedpipes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/grpc/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/growing-protocol-complexity/> ;
    schema:description "サービスや呼び出しの種類が増え自前プロトコルのswitch文とドキュメント維持が負担になってきたらgRPCの枠組みが効く"@ja ;
    ks:evidence <https://learn.microsoft.com/aspnet/core/grpc/interprocess> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/named-pipe/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/small-scale-tool-ipc/> ;
    schema:description "コマンド数が少ないツール間通信では名前付きパイプ+JSONのほうが総コストが低い"@ja ;
    ks:evidence <https://learn.microsoft.com/aspnet/core/grpc/interprocess-namedpipes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/grpc/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/small-scale-tool-ipc/> ;
    schema:description "コマンドが2〜3種類しかないツール同士にはASP.NET Coreのホスティング基盤を抱えるgRPCはオーバーキルになりがちである"@ja ;
    ks:evidence <https://learn.microsoft.com/aspnet/core/grpc/interprocess-namedpipes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/memory-mapped-file/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/high-throughput-data-transfer/> ;
    schema:description "画像フレームや波形データのような大容量・高頻度のデータには共有メモリ(メモリマップトファイル)が最速で、この用途にはほぼ一択と言える"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.io.memorymappedfiles.memorymappedfile> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/memory-mapped-file/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/control-data-plane-separation/> ;
    schema:description "共有メモリは同期を1バイトも提供しないため、開始・停止・設定変更のような制御メッセージのやり取りにも使おうとする場合は、制御面を名前付きパイプなど別チャネルに逃がし、データ面だけを共有メモリに乗せる構成が定石とされる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.io.memorymappedfiles.memorymappedfile> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/control-data-plane-separation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/named-pipe/> ;
    schema:description "Windows上でこのパターンを組む場合、制御面(開始・停止・設定変更)は名前付きパイプなど低頻度の要求応答チャネルに割り当てる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.io.memorymappedfiles.memorymappedfile> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/control-data-plane-separation/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/memory-mapped-file/> ;
    schema:description "Windows上でこのパターンを組む場合、データ面(フレーム・波形などの高頻度データ)は共有メモリ(メモリマップトファイル)に割り当てる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.io.memorymappedfiles.memorymappedfile> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/bitness-bridge/> ;
    schema:description "32bitアプリから64bitのDLLを使うような境界越えでは、COM基盤がマーシャリングを肩代わりするアウトプロセスCOMサーバーが今も実用的な選択肢である"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/ipc/interprocess-communications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/named-pipe/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/bitness-bridge/> ;
    schema:description "呼び出し側がC#同士の32/64bitブリッジでは、64bitのヘルパープロセスを名前付きパイプで呼ぶ構成のほうが配布も調査も楽である"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/ipc/interprocess-communications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/com/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/ipc/> ;
    schema:description "COM(アウトプロセス)は新規のアプリ間通信の第一候補にはもうしないが、VBA連携や32/64bitブリッジの文脈では今も現役の道具として温存される"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/ipc/interprocess-communications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/named-pipe/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/pipe-security/> ;
    schema:description "権限境界を越える通信(UACブローカーやサービスとの通信)では既定のCurrentUserOnlyが使えないため、PipeSecurityでACLを明示的に構成する"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.io.pipes.pipeoptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/named-pipe/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/pipe-name-squatting/> ;
    schema:description "パイプ名は\\\\.\\pipe\\配下の全員から見える名前空間にあり、悪意あるプロセスが同名で先にサーバーを立てて待ち受けるスクワッティングが起こり得る"@ja ;
    ks:evidence <https://learn.microsoft.com/aspnet/core/grpc/interprocess> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/named-pipe/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/pipe-name-squatting/> ;
    schema:description "サーバー側でPipeOptions.FirstPipeInstanceを指定し同名パイプが既にあれば失敗させる、クライアント側で接続後に所有者アカウントを検証するといった対策で軽減できる"@ja ;
    ks:evidence <https://learn.microsoft.com/aspnet/core/grpc/interprocess> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/file-based-integration/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/request-response-ipc/> ;
    schema:description "応答が欲しい対話的な通信や秒間何十回も発生するやり取りにはファイル連携は向かない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/ipc/interprocess-communications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/file-based-integration/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/loosely-coupled-batch-integration/> ;
    schema:description "双方が同時起動している必要がなく処理の証跡が残るファイル連携は、疎結合・非同期でよく監査ログを残したい連携で今も有力である"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/ipc/interprocess-communications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-service/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/pipe-security/> ;
    schema:description "UIアプリとWindowsサービスを名前付きパイプで結ぶ構成を選んだ場合に限り、サービスは別アカウントで動くためPipeSecurityでACLを明示する必要がある。名前付きパイプを使わないサービスにはこの前提はない"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.io.pipes.pipeoptions> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .
