遠隔手続き呼出し

遠隔手続き呼出し（えんかくてつづきよびだし、、リモートプロシージャコール、略してRPC）とは、プログラムから別のアドレス空間（通常、共有ネットワーク上の別のコンピュータ上）にあるサブルーチンや手続きを実行することを可能にする技術。その際に遠隔相互作用の詳細を明示的にコーディングする必要がない。つまり、プログラマはローカルなサブルーチン呼び出しと基本的に同じコードをリモート呼び出しについても行う。遠隔手続き呼出しを行うソフトウェアがオブジェクト指向プログラミングに基づく場合、遠隔手続き呼出しのことを リモート呼び出し（）あるいは リモートメソッド呼び出し （、）と呼ぶこともある（Java RMIなど）。

遠隔手続き呼出しには例えば、ONC RPCやDCE/RPCといった互いに非互換な様々な技術が存在する。

 起源と歴史 
遠隔手続き呼出し (RPC) の考え方は、少なくともが発表された1976年まで遡る。最初にRPCを商用に実用化したのはゼロックスの「」であり、1981年のことであった。UNIXで最初に広く使われるようになったRPC実装はサン・マイクロシステムズのRPC (ONC RPC) であり、NFSの基盤として使われた。ONC RPCは現在でも広く使われている。

もう一つのUNIXでの初期の実装として、アポロコンピュータの (NCS) がある。NCSは後にOSFの (DCE) でDCE/RPCの基盤として使われた。その約10年後、マイクロソフトがDCE/RPCを同社のRPC (MSRPC) の基盤として採用し、DCOMの実装に使った。同じころ（1990年代中盤）、継承機構を備えた分散オブジェクトに関するRPCパラダイムとして、パロアルト研究所のILUとのCORBAが登場した。

 メッセージパッシング 
RPCクライアントは、実行する手続きと引数とを要求メッセージとして既知のリモートサーバに送信することで、RPCを開始する。同期型のRPCでは、サーバーがRPCを処理している間、クライアント側は応答があるまで待機する（呼び出しはブロックされる）。サーバー上でメッセージが処理され、応答がクライアントに戻ってくると、クライアント上のプロセスは処理を続行する。非同期型のRPCでは、クライアント側からの呼び出し後、クライアントは応答を待たず、次の処理を続行できる。サーバーからの応答はコールバックによって通知される。サーバーあるいはクライアントが低速の場合や、大量のデータを転送する必要がある場合などに、同期RPCでは制限および問題があるが、非同期RPCではそれらを解決することができるAsynchronous RPC - Win32 apps | Microsoft Docs。

RPCプロトコルの実装によって微妙な違いをもった多くのバリエーションがあり、それらの間には互換性がない。

RPCが通常のローカル呼び出しと比べて違う点で重要なのは、予測できないネットワーク上の問題で失敗することがあるという点である。またそのような場合、手続きが実際に実行されたかどうかをクライアントが知ることができないことがある。そういったケースでは、二重に手続きを実行しても影響のない場合は容易に対処できるが、そうでなければ適切な対処は困難である。そのため、注意深く記述された低レベルなサブシステムの制限下で呼び出しコードを実行するという方法がよくとられる。各種操作にタイムアウト時間を設け、タイムアウト時間内に応答（処理）がなされなかった場合は例外をスローする方式になっているAPIもあるバインディングでのタイムアウト値の構成 - WCF | Microsoft Docs。

 標準コンタクト機構 
各種クライアントからサーバへのアクセスを可能とするため、いくつかの標準RPCシステムが開発されてきた。それらの多くはインタフェース記述言語 (IDL) を使って各種プラットフォーム間のRPCを可能としている。

IDLファイルはクライアントとサーバ間のインタフェースのためのコードを生成するのに使われる。最も一般的なツールとしてはRPCGENがある。

 遠隔手続き呼出しの各種技術および規格 
 JavaのJava RMI APIは、標準的UNIX RPCとほぼ同等の機能を提供する。
 XML-RPCは、呼び出しをXMLで符号化し、HTTPを通信プロトコルに使用するRPCプロトコルである。
 マイクロソフトのDCOMは、COMベースの分散型オブジェクト指向RPC技術。.NETの各種RPCによって代替されており、非推奨。
 マイクロソフトの.NET Remotingは、Windowsプラットフォーム上に実装された分散システムでのRPC機能を提供するものである。非推奨のレガシー技術。
 マイクロソフトのWCFは、.NET Remotingの代替となるRPC機構。.NET Framework 3.0で導入されたが、.NET Coreには完全移植されていない。
 JSON-RPCは、符号化にJSONを用いる、2000年代後半に制定された非常にシンプルなRPCプロトコルである。
 GoogleのgRPCは、Protocol BuffersとHTTP/2を用いた2010年代のWeb技術によるRPCである。

 脚注 

 関連項目 
 SOAP (プロトコル)
 Hypertext Transfer Protocol (HTTP)
 Open Database Connectivity (ODBC)
 Webサービス
 Applet
 Servlet
 Samba
 WebDAV
 ピア・ツー・ピア
 JRES - Java Remote Execution Service - 呼び出しにSSL形式のエンコードを、また転送に純粋なHTTPを使用するRPCプロトコル。

 参考文献 
 - Specifies version 1 of ONC RPC
 - Specifies version 2 of ONC RPC
Remote Procedure Calls (RPC) A tutorial on ONC RPC by Dr Dave Marshall of Cardiff University

*
Category:プロセス間通信