2020-03-12

Node.jsで仮想通貨の自動取引(bitFlyer編 #2) JSON-RPC 対 Socket.io

RealtimeAPIに接続するにあたってJSON-RPCとSocket.ioを比較する。どちらがおすすめなのだろうか。

Article Image

Realtime APIには2種類の接続方法がある

bitFlyerのRealtime APIにはJSON-RPCSocket.ioの二通りの接続方式がある。Socket.ioにおいてはその名をよく聞くばかりか、私も別のアプリケーション開発で使用した経緯がある。

この2つを初めに見た時に「ならSocket.ioでいいよね」という思考が働いてしまった。おそらく皆そうなのではないか。しかし、どうせ研究ブログを書くのであれば比較記事のほうが需要があるのではと考えた。

「JSON-RPC Socket.io」で検索をかけてみるとbitFlyerのbotを作っている人のブログ記事が殆どで技術系の記事は殆どヒットしない。

つまり、JSON-RPCあまり有名ではないのではないか。実際にGoogle検索の件数を調べると

  • JSON-RPC : 約 8,430,000 件
  • Socket.io : 約 489,000,000 件

圧倒的な差である。bitFlyerのBOTに限って言えばJSON-RPCを選択しているユーザは少なくないようだが、比較して検討している記事は見当たらなかった。だとすれば調べてみる価値があるはずだ。

更新頻度について

基本的にプログラムは生物である。更新が止まったものはすぐに時代の波に飲まれていく世界である。2つのプロトコルがどれぐらいバージョンアップしているかを調べた。

  • JSON-RPC

    1.0が2005にリリース。2010/03に2.0がリリース。公式サイトでは2013/01/04が最終アップデートのようだ。

  • Socket.io

    いつから開発されているかは不明(調べ方がわからない)が2019/09/20に最終アップデートされている。

やはりSocket.ioのほうが頻繁に更新されている模様。ただ安定していれば更新の必要はなくなるためこれだけの指標で善悪は決められない。

JSON-RPCとイーサリアムとの関係

調べているうちにイーサリアムのクライアントGeth(Go Ethereum)のAPI通信にJSON-RPCを使用している事がわかった。

Gethはマイニングやスマートコントラクトの作成などイーサリアムを扱う上で重要なクライアントソフトだ。bitFlyerが採用している理由はここに一つあるのかもしれない。

コード量の差

単純にbitFlyer公式に投稿されているサンプルのコードに対する文字数を比較すると数十文字しか違わない。誤差だ。

よく見るとRealtime APIでは新規注文などのコマンドが無いことに気づいた。

Realtime APIに関しての実装はデータ受信が主なため比較的シンプルなものとなりそうだ。どちらのプロトコルを利用するかによって実装コード自体に大きな違いもないだろう。

どちらを採用すべきか

どちらをとっても大差ないのではというのが個人的回答だ。

やはり汎用性を考慮したらSocket.ioに慣れておくのがベターかと思う。

一方でイーサリアム関連のアプリ開発など仮想通貨業界でJSON-RPCが主流になる可能性が無くもない。ある意味投資としてJSON-RPCを習得しておくのもありだ。

なお、この記事を執筆した時点では実際に使用した感想ではないので注意願いたい。



この記事をシェア


謎の技術研究部 (謎技研)