MAGAZINE

ルーターマガジン

Ruby

新旧RubyバージョンにおけるHTTPクライアントの選択肢

2025.03.31
Pocket

はじめに

弊社では古くから運用しているプロジェクトなどでRuby2.4のような古いバージョンを利用しているプログラムがいくつか存在しています。そのようなレガシー環境では、最新のライブラリを使えない、あるいはパフォーマンスやセキュリティの面で課題がある場合があります。 弊社のメイン事業であるデータアグリゲーション(Webスクレイピング)やRubyで外部APIとの通信のために利用するHTTPクライアント関連のライブラリではこの課題が顕著にあらわれます。 本記事では、 Ruby 2.4 (レガシー) と Ruby 3.3 (現在の社内標準)の HTTPクライアントの違い を比較し、それぞれの環境での最適な選択肢を紹介します。


Ruby 2.4 vs Ruby 3.3 の HTTP 周りの違い

ライブラリ Ruby 2.4 Ruby 3.3
Net::HTTP 標準ライブラリだが古い パフォーマンス改善、API拡張あり
HTTP.rb http-2.2 までしか動作しない http-5.x 対応(HTTP/2 & 非同期対応)
Faraday faraday-1.x までしか動作しない faraday-2.x で非同期対応
httpx 非対応 HTTP/2 & HTTP/3 対応(最速)

Ruby 3.3 では非同期処理や HTTP/2・HTTP/3 の対応が進んでおり、最新のWeb環境に適応しやすくなっています。一方で、Ruby 2.4 では古いライブラリの維持が必要となり、セキュリティリスクやメンテナンスの負担が増加します。


各ライブラリの比較

1. Net::HTTP(標準ライブラリ)

Ruby 2.4 の場合

  • 標準ライブラリなので追加インストール不要
  • SSL/TLSのバージョンが古く、HTTPS通信でエラーが発生しやすい
  • HTTP/2には未対応
require 'net/http'
require 'uri'

uri = URI.parse("https://example.com")
response = Net::HTTP.get_response(uri)
puts response.body if response.is_a?(Net::HTTPSuccess)

Ruby 3.3 の場合(改善点)

  • スレッドセーフな HTTP/2 サポート追加
  • 非同期リクエストをサポート
  • Net::HTTP#write_timeout などの新機能追加
require 'net/http'

uri = URI("https://example.com")
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
  request = Net::HTTP::Get.new(uri)
  response = http.request(request)
  puts response.body
end

2. HTTP.rb

Ruby 2.4 の場合

  • http-2.2 までしか動作しない
  • HTTP/2 非対応 & 非同期リクエスト不可
gem install http -v '~> 2.2'
require 'http'
response = HTTP.get("https://example.com")
puts response.to_s

Ruby 3.3 の場合(改善点)

  • http-5.x では HTTP/2 に対応
  • 非同期リクエスト可能
gem install http
require 'http'
response = HTTP.get("https://example.com")
puts response.to_s

3. Faraday

Ruby 2.4 の場合

  • faraday-1.x までしか動作しない
  • 非同期リクエストは不可
gem install faraday -v '~> 1.9'
require 'faraday'
conn = Faraday.new(url: 'https://example.com')
response = conn.get('/')</nputs response.body

Ruby 3.3 の場合(改善点)

  • faraday-2.x で非同期リクエスト対応
  • HTTP/2対応のアダプターが利用可能
gem install faraday
require 'faraday'
conn = Faraday.new(url: 'https://example.com') do |faraday|
  faraday.adapter :net_http_persistent
end
response = conn.get('/')
puts response.body

4. httpx(最新 & 最速)

Ruby 2.4:

  • 非対応

Ruby 3.3:

  • HTTP/2 & HTTP/3 対応
  • 非同期処理も可能
gem install httpx
require 'httpx'
response = HTTPX.get("https://example.com")
puts response.body

まとめ:どの環境で何を選ぶべきか?

Ruby 2.4

  • Net::HTTP(標準ライブラリ)が基本選択肢。
  • HTTP.rb(http-2.2)Faraday(faraday-1.x) も利用可能だが、機能が制限される。
  • HTTP/2 や非同期処理は未対応 のため、セキュリティやパフォーマンス面で不利。
  • 可能なら Ruby バージョンアップを検討すべき

Ruby 3.3

  • Net::HTTP はHTTP/2・非同期処理対応で使いやすさ向上。
  • HTTP.rb(http-5.x) はシンプルなAPIで使いやすく、非同期処理やHTTP/2にも対応。
  • Faraday(faraday-2.x) は拡張性が高く、API クライアント向けに最適。
  • httpx は HTTP/3 や非同期処理対応で、パフォーマンスを重視するなら最適。

Ruby 3.3 では httpx または Faraday-2.x の利用が推奨される。一方、Ruby 2.4 のようなレガシー環境では標準ライブラリの Net::HTTP の利用を維持しつつ、Rubyバージョンアップを検討するのが良さそうです。

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから