Android x Twilio #2 Twilio クライアントアプリ用のサーバーを Ruby on Rails で作って heroku にデプロイしてみよう

2013.04.30

はじめに

先日クイックスタートの日本語版ページが公開されました。ここを読めば基本的な使いかたはわかると思いますが、クイックスタートでは Twilio クライアントアプリ用のサーバーを PHP で作っているので、今回は Ruby on Rails で作ってみたいと思います!
今回は公式ライブラリである twilio-ruby を使って実装してみましょう。

Ruby on Rails アプリの作成

ひな形を作る

まず Ruby on Rails アプリのひな形を作成しましょう。詳しい解説はこちらを参考してください。

mkdir hello-twilio && cd hello-twilio
bundle init
vim Gemfile # gem 'rails' のコメントアウトを外す
bundle install --path vendor/bundle --without production
bundle exec rails new . --skip-bundle

これでひな形が出来ました!次に Gemfile に twilio-ruby を追加します。

Gemfile

source 'https://rubygems.org'

gem 'rails', '3.2.13'
gem 'twilio-ruby'
gem 'jquery-rails'

group :development, :test do
  gem 'sqlite3'
end
 
group :production do
  gem 'pg'
  gem 'therubyracer-heroku'
  gem 'thin'
end

group :assets do
  gem 'uglifier', '>= 1.0.3'
end

編集が終わったら bundle install を忘れずに。

実装

ここまでで事前準備が終わったので、あとは実装です!今回クイックスタートで書かれている Capability Token の生成TwiML を返す API を作ります。

1. Capability Token を生成する API

まずは Capability Token を生成する API を作りましょう。使いかたはとっても簡単です。まずは Twilio::Util::Capability インスタンスを生成します。引数には Twilio アカウントの SID と認証トークンを渡します。 allow_client_outgoing には Twilio アプリの SID をセットし generate メソッドでアプリ用のトークンを生成します。Twilio アプリの SID の取得方法はこちらを参照してください。

twilio_app03

token_controller.rb

# coding:utf-8
class TokenController < ApplicationController
  # GET "/tokens"
  def index
    # アカウントのSIDと認証トークン
    account_sid = 'アカウントのSID'
    auth_token = 'アカウントの認証トークン'
    # set up
    capability = Twilio::Util::Capability.new account_sid, auth_token
    # TwilioアプリのSID
    capability.allow_client_outgoing 'TwilioアプリのSID'
    # クライアント名
    capability.allow_client_incoming 'android'
    # Capability Tokenの生成
    @token = capability.generate
    render :text => @token
  end
end

2. TwiML を返す API

次に TwiML を返す API を作りましょう。twili-ruby は builder をサポートしているので簡単に TwiML を生成できます。

hello_controller.rb

# coding:utf-8
class HelloController < ApplicationController
  # GET "/hello"
  def index
    # TwiMLを生成
    response = Twilio::TwiML::Response.new do |r|
      r.Say 'こんにちは、クラスメソッド株式会社です。', :voice => 'woman'
    end
    # XMLで出力
    render :xml => response.text
  end
end

3. API としてアクセスできるようにする

ここまでで API の実装が終わったので、最後に routes.rb でルーティングして終わりです。それぞれ index メソッドにしているので get で呼ばれるようにします。

routes.rb

HelloTwilio::Application.routes.draw do
  resources :token, only: [:index]
  resources :hello, only: [:index]
end

以下のコマンドで確認しておきましょう。

bundle exec rake routes

heroku にデプロイする

さて、作ったアプリを heroku にデプロイしてみましょう。前提条件として、利用には heroku のアカウント作成と heroku toolbelt をインストールする必要があります。 heroku へのデプロイは git push heroku master するだけなのでとっても簡単です!

heroku login # アカウント登録後のみ実行する
git init
heroku create hello-twilio # 任意の名前にする
git push heroku master

これで完成です!ブラウザで Capability Token を生成する API を叩いてみましょう。

twilio_ruby01

次に TwiML を返す API を叩いてみます。

twilio_ruby02

ちゃんと返してくれますね!

まとめ

以上、簡単な内容にはなりましたが QuickStart で作っている API を Ruby on Rails に置き換えてみました。ちなみに Android 用で書いてますが iOS や Webアプリにもそのまま使えると思います。
次回以降は今回作成したアプリを拡張する形で進めていきたいと思います。