FAQ - Geyser gRPC ストリーム

Q. どのリージョンにノードを設置していますか?

現在、以下のリージョンでノードを運用しています。
  • Frankfurt (FRA)
  • Amsterdam (AMS)
  • London (LON)
  • New York (NY)
  • Tokyo (TY)
  • Singapore (SGP)
  • Sydney (SYD)
ERPCでは、実際のネットワーク経路に基づいてレイテンシを計測し、直線距離ではなく実測値に基づいて最も低遅延なリージョンを自動的に選択します。この仕組みにより、ユーザー個人レベルでのレイテンシ改善だけでなく、ERPC全体としてのネットワーク効率化や攻撃耐性の向上にもつながります。
万が一、ご利用環境で最適なリージョンが自動的に選択されない場合は、ERPC Webダッシュボードにてお問い合わせください。
ERPC Webダッシュボード: https://dashboard.erpc.global/ja

Q. レイテンシが9999msと表示され、最適でないリージョンが選ばれます。どうすればよいですか?

gRPC のリージョン選択では、ERPC が以下のプロキシホストから登録済み IP へ ICMP レイテンシープローブを送信します。記載されているすべての送信元 IP からの受信 ICMP エコー要求を許可してください。ファイアウォール(ufw、クラウドファイアウォール、セキュリティグループなど)でブロックされると、測定値が 9999ms となり、最適でないリージョンが選択される場合があります。同一リージョン内の複数の IP は、それぞれ別のプローブホストです。すべての IP を許可する必要があります。
リージョンICMP 送信元 IP
🇳🇱 Amsterdam82.21.43.34, 151.244.92.36
🇺🇸 New York151.243.244.5
🇩🇪 Frankfurt151.241.178.20, 151.241.178.34, 151.241.178.21
🇬🇧 London151.241.65.4
🇯🇵 Tokyo143.20.238.66
🇸🇬 Singapore151.245.186.2
🛰️ Far Point143.20.238.73

Q. IPをホワイトリストしたのに接続できません。何を確認すべきですか?

ERPC の gRPC / Shreds エンドポイントは、IP ホワイトリストで保護された plain HTTP の port 80 を使用します。HTTPS/TLS の port 443 は使用しません。
他プロバイダのクライアント例を流用すると、:443 や HTTPS が既定になっていることがあります。ドメインだけ ERPC のものに置き換えると、port と TLS 設定が残ったままになり、接続できない原因になります。
以下のエンドポイントは例です。実際にはダッシュボードに表示される自分のエンドポイントに差し替えてください。HTTP 形式で使うか、クライアントが host と port を求める場合は port 80 を明示してください。
通常 gRPC
  • NG: grpc-fra1-1.erpc.global:443
  • OK: grpc-fra1-1.erpc.global:80
  • OK URL 形式: http://grpc-fra1-1.erpc.global
Burst gRPC
  • NG: grpc-fra1-burst.erpc.global:443
  • OK: grpc-fra1-burst.erpc.global:80
  • OK URL 形式: http://grpc-fra1-burst.erpc.global
認証は登録済み IP アドレスで行われます。ERPC の gRPC / Shreds エンドポイントでは、特定の商品ページで明示されていない限り、x-token、token、Authorization ヘッダーを追加しないでください。

Q. Geyser gRPC Burst とは何ですか?

Geyser gRPC Burst は、低レイテンシな Solana ストリーム用途向けの ERPC 共用 gRPC プランです。通常の gRPC サービスと同じ Yellowstone/Geyser gRPC インターフェースを提供し、account、transaction、slot、block の購読を利用できます。そのうえで、Burst 専用のリージョンインフラを使用します。
Burst は現在、Frankfurt、Amsterdam、New York で稼働しています。登録 IP に対する実測レイテンシに基づき、利用可能な Burst リージョンの中から最適なものを自動選択します。

Q. Burst gRPC ではどの IP を許可リストに追加すべきですか?

Burst は、レイテンシーに基づくリージョン選択に、上記と同じリージョン別 ICMP プローブ送信元を使用します。以下のアドレスは Burst クライアントエンドポイントの IP であり、ICMP プローブの送信元ではありません。アウトバウンドファイアウォールが選択されたエンドポイントへの接続を制限している場合にのみ許可してください。
RegionBurst DomainIP Address
🇩🇪 Frankfurtgrpc-fra1-burst.erpc.global64.130.41.234
🇳🇱 Amsterdamgrpc-ams1-burst.erpc.global64.130.55.180
🇺🇸 New Yorkgrpc-ny6-burst.erpc.global64.130.59.217
上記の ICMP プローブ送信元がブロックされていると、ERPC Dashboard に 9999ms と表示され、Burst が最適でないリージョンを選択する場合があります。Burst エンドポイントのアドレスをブロックすると、レイテンシー測定ではなくクライアント接続に影響します。

Q. Burst は Direct Shreds / ShredStream と同じですか?

いいえ。Burst は標準 gRPC インターフェースで利用する full Yellowstone/Geyser gRPC です。gRPC クライアントから block、slot、transaction、account のストリームを利用したい場合に適しています。
Direct Shreds / ShredStream は、raw shred data を扱う UDP ベースの別プロダクトです。できるだけ早い pre-block data path を優先する場合に適しています。両者はインターフェースと用途が異なります。

Q. WebSocketしか使ったことがないのですが、gRPCを使えますか?サンプルはありますか?

SLVを使えばすぐにgRPCをテスト・開発スタートできます。
トークン不要で試せる共有エンドポイントであれば、次のコマンドで確認できます。
bash
slv check grpc --endpoint <YOUR_ENDPOINT> --token none
詳しくはgRPC クイックスタートガイドをご覧ください。

Q. 2つのIPを登録したいです。

1つのサブスクリプションにつき1つのエンドポイントをご利用いただけます。2つのIPを利用したい場合は、2つのサブスクリプションをご購読ください。

Q. フィルター制限はありますか?

共有 Geyser gRPC には、1 本のストリームがほかの ERPC 利用者に必要な配信能力を使い切らないための公正利用保護があります。現在の Shared プランでは、絞り込んだブロック要求も含め、空でない blocks map はすべて拒否されます。account filter の各項目には account、owner、または対応する cuckoo filter が必要で、memcmp や dataSize だけでは利用できる購読条件になりません。
使えない購読条件を外し、アプリケーションに必要なデータだけを購読してください。トランザクションの購読または blocksMeta が目的に合う場合がありますが、完全なブロックと同じものではありません。正当な利用量が Shared の利用条件またはリソース許容量を超える場合は Dedicated Geyser gRPC が適しています。誤ったパラメータを有効にしたり、受信処理の遅れを直したりするものではありません。

Q. 再接続する前に gRPC エラーをどのように記録すればよいですか?

再接続で上書きされる前に最初のエラーを残してください。接続開始時と終了時の追加情報から gRPC のステータスとメッセージ、x-erpc-error-code、x-erpc-error-reason、x-erpc-doc-url を記録します。ERPC が一時停止を返した場合は、x-erpc-retry-after-seconds と x-erpc-retry-at(Unix 秒)も記録してください。
エラーは ERPC [STREAM_GUARD_SLOW_READER]: ... のように表示されることがあります。表示されたエラー全体またはコードを FAQ 検索に貼り付けてください。詳しい説明は ERPC gRPC FAQ にあります。接続が早期に終わる場合は、終了時の追加情報が届くと決めつけないでください。

Q. 受信が遅い、またはストリームが切断されたとき、ResourceExhausted (8) の STREAM_GUARD_SLOW_READER は何を意味しますか?

ERPC は、送信が一定時間進まない、または配信の遅れを検出しました。配信の遅れだけでは原因を特定できません。ネットワーク損失、実効帯域、ホストの性能、アプリケーションの受信処理が追いついているかを確認してください。購読データを絞り、受信処理から重い作業を分けて処理待ち用の有界キューへ渡します。有界キューはメモリ使用量を抑えますが、受信処理が継続的に遅い状態を解消するものではありません。ERPC が再試行できる時刻や残り時間を返した場合は、それまで待機してください。

Q. ResourceExhausted (8) の STREAM_GUARD_EGRESS_BUDGET は何を意味しますか?

IP 単位の合計トラフィックが Shared の許容量を超えたため、関連するストリームが同時に閉じる場合があります。帯域とデータ量を見直し、不要な並列ストリームを減らしてください。一時停止は通常 10 分です。ただし、すでに長い停止がある場合もあるため、ERPC が返した残り時間に従ってください。この停止によって、別の繰り返し制限の段階が進むことはありません。

Q. ResourceExhausted (8) の STREAM_GUARD_PENALTY_ACTIVE は何を意味しますか?

以前の受信遅延または帯域超過による一時停止がまだ有効です。最初の ERPC エラーを残して原因を直し、ERPC が返した再試行できる時刻や残り時間まで待ってください。早く再接続して確認しないでください。最初は警告です。同じ問題が最初の 1 時間に繰り返されると、停止時間は 1 分、5 分、30 分、24 時間と長くなります。60 秒未満の切断は同じ問題として扱われます。実際に返された再試行時刻または残り時間に従ってください。

Q. PermissionDenied (7) の STREAM_GUARD_SHAPE_BLOCKS は何を意味しますか?

現在の Shared プランでは、要求を絞っても空でない blocks map はすべて拒否されます。blocks map を外してください。トランザクションの購読または blocksMeta が目的に合う場合がありますが、完全なブロックと同等ではありません。完全なブロックが必要な場合は Dedicated Geyser gRPC を利用してください。Shared で選択的なブロックが利用できることを意味するものではありません。

Q. PermissionDenied (7) の STREAM_GUARD_SHAPE_ACCOUNTS_ALL は何を意味しますか?

アカウント用フィルターの各項目は、account、owner、または対応する cuckoo filter でデータを指定する必要があります。memcmp と dataSize だけでは十分ではありません。利用できる条件にアカウントのリクエストを絞るか、すべてのアカウント更新が必要なら Dedicated Geyser gRPC を利用してください。

Q. ResourceExhausted (8) の STREAM_GUARD_SHAPE_REJECT_PENALTY は何を意味しますか?

拒否された、または誤った購読を繰り返したため一時停止になりました。元のリクエストを修正し、最初の ERPC エラーを残して、ERPC が返した再試行できる時刻や残り時間まで待ってください。接続が早く閉じると一般的な通信エラーのように見えるため、再接続で隠れる前に最初の ERPC エラーを保存します。

Q. ResourceExhausted (8) の STREAM_ADMISSION_LIMIT_REACHED は何を意味しますか?

現在の同時接続数の利用枠がいっぱいです。未使用または重複したストリームを閉じ、その接続に使える枠を確認して、接続数に空きができてから再試行してください。このエラーだけで、一時停止が有効だという意味にはなりません。

Q. PermissionDenied (7) の STREAM_ADMISSION_IP_NOT_ADMITTED は何を意味しますか?

IP 登録の猶予期間が終わった場合を含め、ERPC が接続を許可できませんでした。実際の送信元 IP と登録済み IP を比較し、現在アクセスが有効かを確認してください。登録変更後は反映を待ってから接続をもう一度試してください。時間をおいても状態が続く場合はサポートへ連絡してください。

Q. Unavailable (14) の STREAM_ADMISSION_SOURCE_UNAVAILABLE は何を意味しますか?

その時点で ERPC が接続元を確認できませんでした。間隔を空けて再試行してください。続く場合は、最初のエラーと追加情報を添えてサポートへ連絡します。このエラーだけで、お客様のネットワークやサーバーに原因があるとはいえません。

Q. Unavailable (14) の STREAM_ADMISSION_SNAPSHOT_UNAVAILABLE は何を意味しますか?

その時点で ERPC がアクセスを確認できませんでした。間隔を空けて再試行し、続く場合はサポートへ連絡してください。繰り返し登録し直すこと、購読条件を広げること、Dedicated Geyser gRPC を購入することでは、この一時的な確認エラーは直りません。

Q. InvalidArgument (3) の ERPC_GRPC_INVALID_ARGUMENT は何を意味しますか?

リクエストに誤った入力値、設定項目、値の型、アカウント指定、または購読条件の組み合わせが含まれています。再試行前にリクエストを修正してください。誤ったリクエストを繰り返すと、同じ問題を繰り返した場合の一時停止につながることがあります。Dedicated Geyser gRPC でも誤った入力値が有効になるわけではありません。
エラーメッセージでは、エラーコードの直後に (reason: <token>) の形で理由コードが付き、同じ値がレスポンスヘッダー x-erpc-error-reason にも入ります。下の表で該当するコードを探し、直す箇所を確認してください。上限がある場合は、その数値がエラーメッセージに書かれています。
理由コード意味直す箇所
too_many_filters1 回のリクエストに含められる数を超える名前付きフィルターまたはデータスライスが指定されています。この種類の名前付きフィルター(またはデータスライス)を 1 リクエストあたり減らしてください。
empty_filterアドレスを持たないフィルターがあります。空のフィルターは「すべて」を意味します。すべてのフィルターに 1 つ以上のアドレスを指定してください(アカウント購読はアカウントまたはオーナー、トランザクション購読はアカウントのリスト)。共有 gRPC は空のフィルターを受け付けません。
too_many_addresses1 つのフィルター項目に指定されたアドレスが多すぎます。1 つのフィルター項目のアドレスを減らしてください。フィルターを分けるか、リストを絞り込みます。
address_not_allowed共有 gRPC で許可されていないアドレスがフィルターに指定されています。流量の多いそのアドレスをフィルターから外してください。
filter_name_too_longフィルター名が長すぎます。フィルター名(マップのキー)を短くしてください。
invalid_commitmentコミットメントレベルが正しくありません。processed、confirmed、finalized のいずれかを指定してください。
invalid_addressフィルターに正しくないアドレスが含まれています。すべてのアドレスを有効な base58 の Solana アドレスにしてください(空文字、空白、長さの誤りは不可)。
invalid_signatureトランザクションシグネチャの値が正しくありません。有効な base58 のトランザクションシグネチャを指定してください。
invalid_account_data_filterアカウントのデータフィルターが正しくありません。memcmp、datasize、トークンアカウントのデータフィルターを修正し、数はメッセージに書かれた上限以内にしてください。
invalid_data_sliceデータスライスが正しくありません。データスライスをオフセット順に並べ、重ならないようにしてください。
blocks_include_not_allowedblocks 購読のオプションは共有 gRPC では使えません。blocks は指定せず、トランザクション購読または blocks_meta 購読を使ってください。
invalid_token_accounts_modeトークンアカウントのモードが正しくありません。ALL(0)または BALANCE_CHANGED(1)を指定してください。
invalid_argument上のいずれにも当てはまりません。再試行前に、リクエストのフィルターとパラメーターを確認してください。

Q. 別の非ゼロ gRPC ステータスの ERPC_GRPC_REQUEST_FAILED は何を意味しますか?

有効な gRPC ステータスを伴ってリクエストが失敗しており、そのステータスが次の対応を決めます。履歴の範囲が誤っている OutOfRange (11) はリクエストを修正し、Unavailable (14) のように一時的に使えないステータスでは間隔を空けて再試行します。すべての非ゼロのステータスを一時的なものと決めつけたり、リクエストを変えずに再試行したりしないでください。

Q. どのリージョンがおすすめですか?

常に一つの正解となるリージョンはありません。Solana はグローバルに動作しており、ブロックを生成するリーダーの役割は、スロットを追ってバリデータの間を巡っていきます。バリデータ数とステーク量が多いリージョンほどリーダースロットの出現頻度が高く、トランザクションの着地で有利になります。ただし、それに比例して競合トラフィックも増えるため、戦略によっては相対的に空いているリージョンの方が成果を出しやすい場合もあります。
安定したリーダースロット供給を重視するならフランクフルトや北米東海岸などのバリデータ集中エリア、特定ターゲットへの最短経路を重視するなら近接リージョン、という使い分けが基本です。まず Validators Solutions で Solana ネットワークの公開分布を把握し、そのうえで ERPC Leader Slot API と実測値を使って、単一リージョン、二拠点構成、またはグローバル展開のどれが適切か判断してください。
Solana メインネット分散度レポート

Q. 少なくとも ~400ms のレイテンシが必要です。

~400ms以内のレイテンシを確保するために重要なポイントは以下の通りです。
  • ping値の現実的理解: Ping値は理想環境での数値であり、実際のストリーム通信では約5倍のレイテンシとなります。例えば、大陸間のpingが100msの場合、実際のレイテンシは約500ms程度です。そのため、~400msのレイテンシを目指す場合、必ず同じリージョン内でインフラを構築する必要があります。
    • Ping値の一般的な目安:
      • 同一ネットワーク内:約0.1ms
      • プライベート接続(PNI):約0.2ms
      • 同一データセンター:約0.3ms
      • 同一都市:約1ms
      • 隣国:約5〜10ms
      • 大陸間:約100〜300ms
  • 平均レイテンシに惑わされない: Solanaのバリデータは世界中に分散しており、「エポック」という周期ごとにランダムにリーダースケジュールが組まれ、リーダーバリデータが変わります。平均レイテンシを目安に~400msを目指すのは現実的ではなく、自分のリージョンのバリデータスケジュールを正確に把握し、近い時間帯のスロットを特定する必要があります。常に最短のレイテンシを求める場合、すべてのリージョンにインフラを構築する必要があります。同じリージョン内であれば、ストリーム通信でも数十msのネットワークレイテンシでデータ取得が可能であり、送信も数msで実行できます。
  • リーダースケジュールの追跡: 地域内のリーダーバリデータスケジュールを継続的に監視するには、ERPC の Leader Slot API(getLeaderSlots) を利用するのが最適です。 この API では、今後のリーダー情報、ステーク量、各バリデータの地理的位置、参考用 ping 値をリアルタイムで取得でき、最小レイテンシのトレードスロットを正確に特定できます。 公開マップ型データや標準 RPC API はネットワーク全体の把握には有用ですが、実行タイミングの判断には更新頻度・精度が不足します。Leader Slot API は、ルーティングやトレード判断に必要な粒度を補います。
Validators Solutions - Solana ネットワークデータ
Solana ネットワークデータ: Validators Solutions

Q. どのようにすればゼロブロック(ゼロスロット)トレーディングを実現できますか?

ゼロブロック(ゼロスロット)トレーディングを実現するには、より高度な戦略が必要です。主なポイントは以下の通りです。
  • チャンスゾーンの特定: Solana のバリデータは世界中に分散しており、すべてのスロットで最適なレイテンシを実現することは物理的に不可能です。そのため、自身のインフラが存在する地域のリーダーバリデータスケジュールを継続的に監視し、最も有利なチャンスゾーンを特定することが重要です。複数リージョンにインフラを展開することも有効です。たとえばフランクフルトはバリデータ密度が高く、リーダーに選出される頻度が多いため、トレード機会も多くなります。
    ERPC の Leader Slot API(getLeaderSlots) を利用することで、公開マップ型データや標準 RPC API よりも高精度にリーダースケジュール、ステーク量、バリデータの地理情報、参考用 ping 値をリアルタイムで取得できます。これにより、チャンスゾーンをより正確に予測し、ゼロレイテンシに近いトレードを実行することが可能になります。
  • 専有ノードの導入: 競合と比べて優位性がない場合は、専有ノードの導入を検討してください。共用ノードは他のユーザーの影響を受けレイテンシが増大するため推奨しません。また、自分のアプリケーションと専有ノードを同じネットワーク内に設置することで、ネットワークコストを最小限に抑えることが可能です。

Q. 特定のエンドポイントを利用したいです。

低レイテンシ環境を確保するために、必ず最も近いノードが自動的に選択されます。特定のエンドポイントを指定したい場合は、そのエンドポイントに最も近い場所にサーバーを借りてテストすることを推奨します。

Q. 401 エラーが起きるのですが?

低レイテンシ環境を提供するためにIP制限を設けています。サブスクリプションがない、または登録されていないIPからのアクセスは401エラーとなります。
登録されているIPとアクセス元のIPが一致しているか再度ご確認ください。

Q. 429エラーが起きるのですが?

プランごとのコネクション制限に達した場合にこのエラーが表示されます。
このエラーが表示されたらプランのアップグレードをご検討ください。特にプレミアムより多くのコネクションが必要な場合は、専有gRPCノードが適しています。

Q. なぜ専有エンドポイントは速いのですか?

共有エンドポイントは複数のお客様でリソースを分け合って利用しているため、トラフィック量が増えるにつれてレイテンシ(遅延)が発生しやすくなります。サーバーのリソースには物理的な限界があり、処理できる仕事量が決まっています。多くのリクエストが同時に集中すると、処理を順番に行う必要があるため、レスポンス速度が低下します。
私たちは共有エンドポイントでも様々な対策を講じてパフォーマンスを最適化していますが、専有エンドポイントでは、あなただけがそのリソースを専有できるため、他のユーザーの影響を一切受けません。その結果、常に安定した高速なレスポンスが得られます。
さらに専有エンドポイントでは、HTTPなどTLSを利用しない通信オプションを提供しています。TLSハンドシェイク(約20ms)の処理を省略することで、HTTPSと比較してさらに通信速度が向上します。

Q. ご契約後にセール価格は値上げされますか?

ご契約期間中は、契約時のセール価格を据え置きでご提供します。Solana のリアルタイム処理に耐えうる環境は世界的にも希少で、ハードウェアおよびネットワーク需要の高まりとともに販売価格は段階的に引き上げる方針です。スペックの高い構成や需要の集中するリージョンほど在庫の確保が難しくなりますので、現在のキャンペーン価格でロックインしておくことが、長期的にコストを抑えるうえで最も有利な選択肢となります。

Q. クリプト支払いをしたいです

クリプト支払いは、登録済みの請求先住所の国が EU 加盟国の場合に、ERPC Webダッシュボードから利用できます。SOL、USDC、EURC で ERPC クレジットを購入できます。
購入した ERPC クレジットを使って、ERPC の各プランを開始・継続できます。ダッシュボードでクリプト支払いを選択し、ウォレットから送金してください。ダッシュボードが送金を確認し、アカウントへクレジットを反映します。
対応国:アイルランド、イタリア、エストニア、オーストリア、オランダ、キプロス、ギリシャ、クロアチア、スウェーデン、スペイン、スロバキア、スロベニア、チェコ、デンマーク、ドイツ、ハンガリー、フィンランド、フランス、ブルガリア、ベルギー、ポーランド、ポルトガル、マルタ、ラトビア、リトアニア、ルーマニア、ルクセンブルク。
リストにない国では、クレジットカードでのお支払いをご利用ください。

Q. 最高の低レイテンシ環境を実現したい。

専有gRPCノードとベアメタルサーバーの組み合わせをおすすめします。
これらは同じネットワークを共有し、インターネットを介さずプライベートなゼロ距離通信が可能です。実際の環境ではping値で0.1msという低遅延を達成しています。
詳しくはERPC Webダッシュボードにてお問い合わせください。

Q. レイテンシはどのくらいですか?

レイテンシは計測方法やご利用環境によって異なります。具体的な数値よりも、実際のご利用シナリオで必要な性能を満たすかどうかが重要です。
TypeScriptやRustを利用して簡単にレイテンシを測定できるツールを提供しています。

Q. このRPC(gRPC, Shreds)は他より速いですか?

私たちは、価格帯にかかわらず高いパフォーマンスを目指して設計・運用しており、同じ条件での比較はむしろ歓迎しています。実際の結果は、リージョンや共有・専有エンドポイントの違い、ご利用のプロトコル(WebSockets、gRPC、Shreds)、そしてクライアントのプログラミング言語によって変わります。
もし他のサービスより遅い場合は、具体的な条件や比較対象についてERPC Webダッシュボードでお知らせいただけると幸いです。原因を特定し、さらなる速度改善を行います。

Q. どのプランが一番速いですか?

一般的には、最上位のプランが最も高速です。これは、より高性能なCPUや大容量のメモリなど、強力なハードウェア構成を使用しているためです。
さらに強力なサーバーをお求めの場合はカスタマイズも可能ですが、基本的なプランは最適なコストパフォーマンスを追求して設計しています。
私たちはどの価格帯でも世界最高水準のパフォーマンスを提供していると自負しています。同じ価格帯で当社より高速なサービスがあれば、ぜひお知らせください。原因を特定し、改善に努めます。

Q. レイテンシが大きいのですが?

エンドポイントからの距離がレイテンシに大きく影響します。提供されているエンドポイントに近いサーバーからのアクセスを推奨します。最も速い接続を提供できるのはベアメタルサーバーおよびVPSサービスです。

Q. WebSockets, gRPC, Shreds はどれが一番速いの?

多くのお客様からのご意見はほぼ一致しており、速度は次の順序です。
Shreds > gRPC > WebSockets
異なる結果があればご報告ください。

Q. 聞いていたレイテンシと違います

使用するプログラミング言語によってパフォーマンスが異なります。言語ごとの一般的な速度順序は以下の通りです。
Rust > Go > TypeScript (JavaScript) > Python
詳しくは以下の比較ソースをご覧ください。
最速を求めるならRustの利用を強くおすすめします。