SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール

Ruby製HTTPクライアント用gemの「Faraday」を使おう

これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール 第11回

  • このエントリーをはてなブックマークに追加

 前回まで、ファイルアップローダーの代表的なgemであるCarrierWave/Refile/Shrineと、Rails 5.2から導入されたActiveStorageの基本的な使い方を紹介しました。今回は、HTTPクライアントライブラリであるFaradayを紹介します。

  • このエントリーをはてなブックマークに追加

Faradayの役割

 Faradayは、Rubyで書かれたHTTPクライアントライブラリで、RubyGemsとして提供されています。利用シーンとしては、Railsプロジェクトから外部のAPIなどにアクセスする例などが一般的でしょう。

 なお、RubyにはHTTPクライアントライブラリとして標準で添付されているNet::HTTPがあり、require 'net/http'でインクルードすれば利用でき、Faradayを使わなくても実装することができます。

 ただし、Net::HTTPを使うとパラメーターや設定などが複雑になってしまうところを、Faradayを使うことでよりシンプルに、HTTPクライアントとしてアクセスする部分を実装できるメリットがあります。

 また、Faradayは内部的にはデフォルトでNet::HTTPを使用しています。その意味ではNet::HTTPのラッパーともいえるでしょう。

Faradayの基本的な使い方

 ここからはFaradayの基本的な使い方について解説します。

Faradayの初期化

 Faradayを初期化するには、Faraday.newを宣言します。通常、1つのAPIのエンドポイントのURLは変わらないので、初期化時に以下のようにURLを指定します。

connection = Faraday.new(url: 'http://example.com')

 初期化時には特にアクセスが発生するわけではなく、あくまでも接続のための準備の段階です。

 このあと、connection.[HTTPリクエストメソッド]〜のように呼び出すことで実際に指定したURLへのアクセスが発生します。例えばgetメソッドならconnection.getと呼び出します。

 なお、Faraday.new(〜) do 〜 endのようにしてブロックの中で初期化オプションを指定することができます。オプションには以下があります。

初期化オプションの一覧
オプション 設定例 意味
request  :url_encoded POST時にパラメーターを強制的にURLエンコードする。
response  :logger 標準出力にリクエスト/レスポンスを出力する。
adapter Faraday.default_adapter リクエスト時に使用するアダプターを指定する。ここではFaradayのデフォルトであるNet::HTTPが使用される。

 オプションを指定して初期化するサンプルコードは以下です。

connection = Faraday.new(url: 'http://example.com') do |faraday|
  faraday.request :url_encoded
end

HTTPリクエスト

 実際にリクエストするには、connection.[HTTPリクエストメソッド] [URI], [パラメーターのハッシュ]といった形式で呼び出します。例えば「http://example.com/articles」にGETでリクエストする場合は以下のように記述します。

connection = Faraday.new(url: 'http://example.com')
connection.get '/articles'

 リクエストメソッドがPOST、PUT、PATCH、DELETEの場合も基本形は同じで、呼び出すメソッドがそれぞれpost、put、patch、deleteメソッドに対応します。

 パラメーターを指定する場合は、URI指定に続いてハッシュを記述します。例えば「http://example.com/articles?page=1&count=10」にGETする場合は以下のように記述します。

connection = Faraday.new(url: 'http://example.com')
connection.get '/articles', page: 1, count: 10

 その他のリクエストメソッドの場合でも同様に指定することができます。また、GETメソッドを呼び出している箇所を以下のようにブロックとして記述することもできます。

connection.get do |request|
  request.url '/articles', page: 1, count: 10
end

 ブロックにした場合は、ブロックに渡した変数からURLメソッドを呼び出す必要があります。

HTTPレスポンス

 リクエスト後にサーバーから受け取ったレスポンスボディは、以下のように取得できます。

connection = Faraday.new(url: 'http://example.com')
response = connection.get '/articles'
p response.body

 レスポンスには以下のメソッドが用意されています。

レスポンスの対応
メソッド 意味 
status HTTPステータス
body レスポンスボディ
response_headers レスポンスヘッダー

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
サンプルRailsアプリケーションの作成

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 竹馬 力(チクバ ツトム)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11462 2019/04/03 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング