【2019年版】RailsアプリからTwitterに更新内容を自動投稿!RailsとTwitterの連携機能を実装

2019年12月14日 12:37

はじめに

Railsアプリで作ったブログなどで更新内容をTwitterに投稿するといった連携機能を実装する方法を解説します。
実装するにはまずTwitter APIに登録する必要があるのですが、登録方法が年々(主に複雑なほうへと)変化しているようなので、2019年12月現在の登録方法で書いています。

Twitter APIに登録

Twitter Developerにアクセスします。

右上のAppsをクリックします。

右上のCreate an appをクリックします。

注意書きを読みApplyボタンをクリックします。

HobbyistのMaking a botを選択してNextボタンをクリックします。

アカウントの情報が表示されるので、間違いないか確認して下へスクロールします。

英語 日本語 回答
What country do you live in? 居住国は? Japan
What would you like us to call you? ニックネームは? 適当に入力
Want upates about the Twitter API? Twitter APIの更新情報が必要? チェックしない

Nextボタンをクリックします。

Twitter APIをどういう用途で使用するか英語で記述します。できるだけ詳細に書くと審査と承認が下りやすいらしいです。200文字以上入力する必要があります。

すべてNoに変更します。Yesにする場合はその理由を英語で記述する必要があります。

表示されている内容に間違いがなければLooks good!ボタンをクリックします。

利用規約を読み、チェックボックスをオンにしてSubmit Applicationボタンをクリックします。

登録メールアドレスにメールが送られました。

Confirm your emailボタンをクリックします。

Create an appをクリックします。

もう一度Create an appボタンをクリックします。

必須(required)項目を入力します。アプリの説明は英語じゃなくても大丈夫です(たぶん)。
最後にCreateボタンをクリックします。

利用規約を読んで問題なければCreateボタンをクリックします。

Keys and tokensをクリックします。

API key/API secret key/Access token/Access token secretをコピーしておきます。トークンはCreateボタンをクリックすると表示されます。

Railsアプリの実装

まず、rails g scaffoldなどで記事の投稿機能を実装しておきます。
次にGemfileに以下を追加してbundle installを実行します。

gem 'twitter'

記事のコントローラーを以下のように変更します(以下は関係あるところだけ記載しています)。

class ArticlesController < ApplicationController
  before_action :twitter_client, only: [:create]

  def create
    @article = Article.new(article_params)
    if @article.save
      @client.update("#{@article.title} #{article_url(@article.id)}\r")
      redirect_to articles_path
    else
      render 'new'
    end
  end

  private
    def twitter_client
      @client = Twitter::REST::Client.new do |config|
        config.consumer_key        = Rails.application.credentials.twitter[:api_key]
        config.consumer_secret     = Rails.application.credentials.twitter[:api_secret_key]
        config.access_token        = Rails.application.credentials.twitter[:access_token]
        config.access_token_secret = Rails.application.credentials.twitter[:access_token_secret]
      end
    end
end

ざっくりと以下の流れになっています。

  1. createメソッドを実行する前にtwitter_clientメソッドを実行。
  2. twitter_clientメソッドでCredentialsから取得した認証情報を設定しTwitterクライアントを作成。
  3. createメソッドでTwitterクライアントを使用してTwitterに更新内容をツイート。

まとめ

Twitter APIの登録が少し面倒ですが、登録さえしてしまえばRailsの実装は簡単なので、RailsとTwitterの連携機能を実装してみてください。

関連記事

【Rails】Railsアプリのデバッグ《マルチデバイス篇》
# はじめに 近年のWebアプリはレスポンシブ対応が当たり前になっています。最低でもPCとスマートフォンに対応したデザイン、ときにはその中間のタブレットに対応したデザインなんかも作成する必要があります。 Webアプリの開発はPCを使って行う [...]
2021年5月23日 13:02
【Rails】Railsアプリのデバッグ《Better Errors篇》
# はじめに Railsアプリの開発中になんらかのエラーが発生すると、デフォルトでは以下のような画面が表示されます(画像をクリックすると拡大します)。 <a class="gallery" data-group="gallery" href [...]
2021年5月22日 19:42
【Rails】Railsアプリのデバッグ《byebug篇》
# はじめに Ruby on Railsに限りませんが、アプリの開発中にはエラーは付き物です。なにかしらのエラーが発生したときに、エラーの原因を特定しエラー箇所を修正することをデバッグと言います。Railsではデバッグの手助けとなる機能があらかじ [...]
2021年5月22日 15:30
【Rails】レンダリング(renderメソッド)でアンカー指定を行う
# はじめに 通常、Railsでアンカー付きのリクエストを発生させるには`redirect_to`を使います。 ```rb redirect_to root_path(anchor: 'target') ``` では、`rende [...]
2021年5月20日 10:47
【Rails】Bundler 2.2.x以降は開発者が適切なプラットフォームを追加する必要がある
# 事象 昔作ったRailsアプリを久しぶりに修正しデプロイしようとしたところ、以下のエラーが出力されました。 ```bash # 実行コマンド Running $HOME/.rbenv/bin/rbenv exec bundle ch [...]
2021年5月18日 16:18