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

はじめに

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の連携機能を実装してみてください。