プログラミング初心者がRuby on RailsでTwitter認証を簡単に実装する方法

Ruby on RailsのアプリケーションにTwitter認証を実装する方法をまとめます。

SEOやウェブマーケティングでは、Twitterのデータはとても重要です。

SEOでは被リンク獲得するためにSNS、特にTwitterの活用が欠かせません。また、Twitterのフォロワーを多く獲得する上でも、Twitter上での人々の活動データを分析することは重要です。

TwitterのAPIを使えば、分析が色々と捗るのですが、APIを使うためには、Twitterの認証が必要になります。

認証というと難しく聞こえますが、プログラミング初心者やウェブマーケティング担当でちょっとだけプログラミングをかじったことのある人でもできるように分かりやすくまとめておきます。

TwitterのApplication Managemenに登録

まず、TwitterのApplication Managementにアプリケーションを登録します。
https://apps.twitter.com/

アプリケーションを作成したら、settingsというメニューよりアプリケーションのURLやCallback URLを設定します。

ウェブサイトは
https://example.herokuapp.com/

Callback URLは
https://example.herokuapp.com/auth/twitter

などと設定します。

認証に使うので、「Allow this application to be used to Sign in with Twitter」にチェックを入れます。

Gemの設定

Gemfileにomniauthを使うための記述を追加します。Omniauthは、TwitterやFacebookの認証を簡単に扱うためのgemです。

Gemfile

gem 'omniauth'
gem 'omniauth-twitter'

API keyとAPI secretの設定

Twitterの認証処理用にミドルウェアを追加すると便利なようです。
ミドルウェアとは、サーバーとアプリケーションの中間で、データの加工を行うプログラムです。

config/initializers/omniauth.rb

​
Rails.application.config.middleware.use OmniAuth::Builder do
	provider :twitter, ENV[‘TWITTER_KEY'], ENV['TWITTER_SECRET']
end

参考
http://gihyo.jp/dev/serial/01/ruby/0025
https://railsguides.jp/rails_on_rack.html

TwitterのApplication ManagementのKeys and access tokensよりAPI keyとAPI secretをコピーして.envに貼り付けておきます。

.env

API_KEY = "****************************"
API_SECRET = "****************************"

アプリケーションから.envの設定を読み込めるようにsecrets.ymlに記述しておきます。

config/secrets.yml

twitter: &twitter
  twitter_api_key: <%= ENV["API_KEY"] %>
  twitter_api_secret: <%= ENV["API_SECRET"] %>

development:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
  <<: *twitter

test:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
  <<: *twitter

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
  <<: *twitter

.envファイルはgithubなどにアップすると危ないため、.gitignoreでアップしないように設定しておきます。

.gitignore

/.env

※.gitignoreに追記する

代わりに環境変数の設定を行います。heorkuの場合は下記で設定できます。

heroku config:set API_KEY="****************************"
heroku config:set API_SECRET="****************************"

参考
http://chomast.com/study/web/heroku-environment-variables.html

Twitter認証情報をモデルに紐付ける

Twitter認証情報をモデルに紐付ける場合は、モデルのファイルに記入します。

例えば、Userモデルに紐付ける場合、

model/user.rb

​class User < ActiveRecord::Base
	​def find_or_create_from_auth(auth,id)
		user = User.find(id)
		provider = auth[:provider]
		uid = auth[:uid]
		nickname = auth[:info][:nickname]
		name = auth[:info][:name]
		image_url = auth[:info][:image]
		description = auth[:info][:description]
		user.update_attributes(id: id, provider: provider, uid: uid, nickname: nickname, name: name, description: description)
	end
end

find_or_create_from_authはDBにデータがいれば持ってきて、なければ作るという処理です。このfind_or_create_from_authを使って、セッションを持たせる処理を作ることができます。

controllers/sessions_controller.rb

class SessionsController < ApplicationController

  def create
    user = User.find_by(id: current_user.id)
    t_user = user.find_or_create_from_auth(request.env['omniauth.auth'], user.id)
    
    session[:user_id] = t_user.uid
    redirect_to root_path
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_path
  end

end

ルーティングの設定

認証を作成/削除するためのルーティングをroutes.rbに記述します。
config/routes.rb

get '/auth/twitter/callback', to: 'sessions#create'
get '/logout', to: 'sessions#destroy'

​​​

認証画面の作成

あとは、Twitter認証の画面を作成するだけです。認証画面に下記のようなログイン/ログアウトのルーティングを振り分けるリンクを設定します。

top.html.erb

<% if session[:user_id]==nil %>
  <%= link_to "Twitterログイン", "/auth/twitter"%>
<% else %>
  <%= link_to "Twitterログアウト", "/auth/logout"%>
<% end %>

簡単ですよね。ぜひ、Twitter認証をサクッとクリアして、有意義なTwitterの分析ライフを送って、SEOやウェブを使ったグロース施策に役立ててください。

プログラミングをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。

LINE無料相談

SEO、サイト改善、SNS活用など、デジタルマーケティングに関して相談に乗っています!お気軽にLINEで聞いてみてください。
line無料相談

シェアする

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

フォローする