Ruby製HTTPクライアント用gemの「Faraday」を使おう
これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール 第11回
ダウンロード サンプルファイル (82.4 KB)
サンプルRailsアプリケーションの作成
ここからは実際にFaradayを使った簡単なサンプルRailsアプリケーションを作成します。作成するアプリケーションは、QiitaのAPIを使ってRailsタグがついている記事を取得し、一覧するものです。
Railsアプリケーションのインストール
実装するにあたり、Ruby/PostgreSQLインストール手順、Railsアプリケーションを作成するまでの手順は省略します。開発環境は以下の通りです。
- macOS High Sierra
- Ruby 2.6.1
- Ruby on Rails 5.2.2
- PostgreSQL 10.3
なお、開発環境構築手順は過去のCodeZine連載「サンプルコードで学ぶRuby on Rails 5実践入門」の以下記事をご参考ください。Ruby/Railsのバージョンは古いものの、同じ手順で環境構築できます。
なお、Railsアプリケーション開発までのコマンドのみ列挙しておきます。
mkdir faraday_sample cd faraday_sample bundle init bundle --path vendor/bundle -j4 bundle exec rails new . -d postgresql
Faradayのインストール
以下のようにGemfileにFaradayを追記します。
…(中略)… gem 'faraday' …(中略)…
以下のコマンドを実行し、gemをインストールします。
bin/bundle
執筆時点ではバージョン0.15.4がインストールされました。
記事一覧を取得するモデルの実装
Qiita記事を取得するAPIの詳細については割愛しますが、以下の公式サイトの記事を参考に記事検索のクエリを組み立てます。
Faradayを使ってQiitaのAPIにアクセスし、Railsタグが付与されている記事を取得するモデルを以下のように実装します。
require 'json'
class QiitaItem
def self.get
url = 'https://qiita.com'
connection = Faraday.new(url: url) # (1)
response = connection.get do |req| # (2)
req.url '/api/v2/items', page: 1, per_page: 100, query: 'tag:Rails updated:>2019-02 stocks:>3' # (3)
end
json = JSON.parse(response.body) # (4)
json.sort_by { |i| i['likes_count']}.reverse.map do |item| # (5)
{ title: item['title'], url: item['url'], likes_count: item['likes_count'] }
end.take(20)
end
end
(1)の部分では、Faradayの基本的な使い方で紹介した通り、初期化しています。(2)のブロックでは、GETリクエストを生成しています。このように、ブロックとして実装することもできます。(2)のブロック内にある(3)では、GETリクエストを送るURIを「/api/v2/items」に指定し、GETパラメーターを指定しています。
各パラメーターの意味は以下の通りです。
| パラメーター | 値 | 意味 |
|---|---|---|
| page | 1 | 記事検索結果のページ数。ここでは1ページ目を指定。 |
| per_page | 100 | 1ページあたりの記事数。ここでは1ページにつき100記事を指定。 |
| query | 'tag:Rails updated:>2019-02 stocks:>3' | 記事検索の条件。複数条件はスペース区切りでAND条件となる。ここではRailsのタグが付与されていて更新日が2019/2/1以降でストック数が3以上のものを指定。 |
(4)では、QiitaのAPIから返ってきたJSONをパースしています。(5)のブロックでは、記事を一旦いいね数の降順でソートして記事タイトル/URL/いいね数のハッシュ形式にしたものを新しい配列をmapメソッドで生成しています。最後のtake(20)は、いいね数の上位20件を取得しています。
Qiitaの記事検索APIから返却されるJSONのキーの対応は以下の通りです。
| キー | 意味 |
|---|---|
| title | 記事タイトル |
| url | 記事URL |
| likes_count | いいね数 |
なお、より実践的には、Qiitaがメンテナンス中や障害発生時の場合に対応するためにHTTPステータスの確認や例外処理などを入れる必要がありますが、ここでは簡略化のために省略している点に注意してください。
ここまで実装し終えたら、railsコンソール上で意図の通り動作するかを確認しておきます。
bin/rails c
▼
Running via Spring preloader in process 84989
Loading development environment (Rails 5.2.2)
irb(main):001:0> ret = QiitaItem.get
…(中略)…
irb(main):002:0> ret.first
=> {:title=>"もっと気軽にアウトプットできる技術ブログサービス「Qrunch(クランチ)」をリリースした【個人開発】", :url=>"https://qiita.com/c0domisu/items/95a561d163d26bbfe274", :likes_count=>1987}
irb(main):003:0> ret.count
=> 20
irb(main):004:0>
表示部分の実装
続いて表示部分を実装していきます。まずはトップページのルーティングを以下のように記述します。
Rails.application.routes.draw do root to: 'home#index' end
続いてトップページ用のコントローラーで先程実装したモデルを呼び出してビューにわたす処理を以下のように記述します。
class HomeController < ApplicationController
def index
@items = QiitaItem.get
end
end
最後に、トップページに対応するビューで取得した記事一覧を表示する処理を以下のように記述します。
<h1>Rails記事一覧</h1> <ol> <% @items.each do |item| %> <li><%= link_to item[:title], item[:url], target: '_blank' %>(<%= item[:likes_count] %>いいね)</li> <% end %> </ol>
動作確認
これで一通りの実装が完了したので、動作確認を行います。以下のコマンドでpumaサーバーを実行します。
bin/rails s
「http://localhost:3000」にアクセスします。正常に動作していれば以下のように表示されます。
なお、実行結果は記事執筆時点でのものです。実際に実行してみると、Railsに関係する良記事が確認できるはずです。
まとめ
ここまで、HTTPクライアントライブラリであるFaradayの基本的な使い方を確認するとともに、実際にQiitaのAPIにアクセスしてRailsに関する記事を取得するサンプルアプリケーションを実装しました。
このように、Faradayを使うことでシンプルにHTTPクライアントを実装することができます。
この記事は参考になりましたか?
既に会員の方はを行ってください。
- これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール連載記事一覧
-
- Ruby製HTTPクライアント用gemの「Faraday」を使おう
- Railsアプリケーションにファイルを簡単にアップロードするgem「Shrine」と「Ac...
- Railsアプリケーションにファイルを簡単にアップロードするgem「CarrierWave...
- この記事の著者
-
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本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
