はじめに
どうもKRAYの芳賀です。
今日はツイッターサービスをスピーディーかつ無料で作るお話です。
僕は日頃趣味でツイッターサービスを作っているのですが、アイデアを着想したその日のうちにプロトタイプを作って動かすことができるくらいにノウハウが溜まってきました。
仕事が終わってからのプライベートな時間だけでも、1週間から1か月もあれば1つサービスがリリースできる感覚がつかめたので、必要最低限の機能を備えたサービスを短時間で作れないだろうか?と時間を計測しつつ実践してみたところ、なんと1時間で完成できたので、その手順を紹介します。
開発の流れ
まずは開発の流れを説明します。
- ツイッターアカウントの用意
まずツイッターのアカウントが必要になるので、まだ持っていなければ取得しましょう。サービス用に改めて取得してもいいですね。 - サーバの用意
作成したウェブアプリを設置するサーバを準備します。PHPであれば一般的なレンタルサーバでも良いでしょうし、それ以外の言語ならサポートされているサーバを借りるなり作るなりしましょう。 - ツイッターサービスの登録
ツイッターにサービス登録をします。登録しないとユーザーがツイッターのデータにアクセスできません。 - プログラミング
言うまでもありませんが、あなたの素晴らしいアイデアをプログラミングします。 - 公開
ローカルで開発を終えたプログラムをサーバに設置する作業です。
今回は、スピーディーかつ無料でいきたいので、生産性の高さに定評のあるRuby on Rails の現時点での最新バージョン2.3.8を使い、かつ無料で使えるRailsアプリのホスティングサービスHerokuに設置します。
どんなサービスを作るのか?
ツイッターのAPIを使えば、自分のタイムラインを取得したり、つぶやきを投稿したり、DMを送ったり、様々なことが可能です。ツイッターのソーシャル性やユーザーの特性を掴んだサービスを是非作りたいところです。
だがしかし、今回は、あの偉大なる「Hello World」をツイッターにつぶやく、というサービスを作るに止めます。1時間しかありませんので。。
プロジェクトの作成
コマンドラインで、Railsコマンドを使いサービス用のプロジェクトを作成します。
% rails twitter_helloworld create create app/controllers create app/helpers create app/models create app/views/layouts (中略...) create log/server.log create log/production.log create log/development.log create log/test.log
このように、Railsは基本的にソースコードのファイルをコマンドから生成するので、自分の手でチマチマ作るということがないこともあり、開発スピードは格段に速いです。
プロジェクトのディレクトリに移動して、Gitのリポジトリを初期化します。
% cd twitter_helloworld % git init
バージョン管理したくないファイルを無視ファイルに定義します。.gitignoreというファイルを以下の内容でプロジェクトのルートディレクトリに作成します。
.DS_Store log/*.log tmp/**/* db/*.sqlite3 db/schema.rb
Herokuに登録
Heroku(http://heroku.com/)は、無料で利用できるRubyのホスティングサービスです。
Ruby版PaaSの”Heroku”で無料Railsホスティング環境を手に入れよう
http://kuranuki.sonicgarden.jp/2009/05/rubypaasherokurails.html
こちらの記事を参考に、
- herokuの会員登録
- herokuコマンドのインストール
が終わっている前提で話しを進めます。
Herokuにプロジェクトを登録します。
Herokuはコマンドラインからheroku create コマンドで、プロジェクトを登録できます。
% heroku create twitter-helloworld
twitter-helloworldは適宜変更してください。すでに利用されているプロジェクト名は使えません。
成功すれば、http://twitter-helloworld.heroku.com/ にアクセスすると
のような画面になっているはずです。
ツイッターアプリ登録
さて、偉大なHelloWorldサービスをツイッターに登録しましょう。
http://dev.twitter.com/apps/new
ポイントになるのは・・
* アプリケーションの種類:ブラウザアプリケーション
* コールバックURL:http://twitter-helloworld.heroku.com/oauth_callback
* Default Access type:Read & Write
とすることです。
コールバックURLは、自分のサービスURLに「/oauth_callback」を追加したものを設定してください。
登録が済んだら、「Consumer key」と「Consumer secret」をメモっておきます。
開発
いよいよRailsによる開発です。
ツイッター認証
twitter-auth(http://github.com/mbleigh/twitter-auth)というプラグインをインストールします。
このプラグインはツイッターOAuth認証に関する煩瑣な作業を一手に引き受けてくれるので、インストールさえしてしまえば、ほとんど何もしなくてもツイッター認証を使ってログインできるようになります。
1時間で完成できるのは、このプラグインのおかげといっても過言ではありません。
% script/plugin install git://github.com/mbleigh/twitter-auth.git % script/generate twitter_auth create db/migrate create db/migrate/20100721111347_twitter_auth_migration.rb create app/models/user.rb create config/twitter_auth.yml
次に設定ファイルの書き換え、config/twitter_auth.yml というファイルを書き換えます。
consumer_keyとconsumer_secretを先ほどツイッターのアプリ登録で入手したものにしておいてください。
偉大なるHelloWorldボタンの実装
ボタンを押すと「偉大なるHelloWorld」というつぶやきができる機能を実装してみます。
「script/generate controller」というコマンドは、ウェブアプリケーションのコントローラーとビューのコードを生成します。
% script/generate controller messages index exists app/controllers/ exists app/helpers/ create app/views/messages create test/functional/ create test/unit/helpers/ create app/controllers/messages_controller.rb create test/functional/messages_controller_test.rb create app/helpers/messages_helper.rb create test/unit/helpers/messages_helper_test.rb create app/views/messages/index.html.erb
作成したコントローラーとURLのパスをルーティング設定で紐付けします。config/routes.rbを編集してください。
ActionController::Routing::Routes.draw do |map| # ここから追加 map.resources :messages,:only => [:index, :create] map.root :controller => 'messages', :action => 'index' # ここまで追加 end
このアプリケーションに設定されたURLパスを確認してみます。
% rake routes (in /Users/XXXXXX/Desktop/twitter_helloworld) login /login {:action=>"new", :controller=>"sessions"} logout /logout {:action=>"destroy", :controller=>"sessions"} new_session GET /session/new(.:format) {:action=>"new", :controller=>"sessions"} edit_session GET /session/edit(.:format) {:action=>"edit", :controller=>"sessions"} session GET /session(.:format) {:action=>"show", :controller=>"sessions"} PUT /session(.:format) {:action=>"update", :controller=>"sessions"} DELETE /session(.:format) {:action=>"destroy", :controller=>"sessions"} POST /session(.:format) {:action=>"create", :controller=>"sessions"} oauth_callback /oauth_callback {:action=>"oauth_callback", :controller=>"sessions"} messages GET /messages(.:format) {:action=>"index", :controller=>"messages"} POST /messages(.:format) {:action=>"create", :controller=>"messages"} root / {:action=>"index", :controller=>"messages"}
「/」にアクセスすると、messagesコントローラーのindexアクションにディスパッチされるようになりました。
加えて、「/login」や「/logout」というパスが存在していますね。これらはtwitter-authプラグインが自動生成してくれているパスで、「/login」にアクセスするだけで、ツイッターのOAuth認証を実行できるようになっています。便利ですね。
続いて、コントローラーの処理を実装します。
app/controllers/messages_controller.rbを以下のように編集しましょう。
class MessagesController < ApplicationController def index end # ここから追加 def create if current_user.twitter.post('statuses/update.json', :status => "偉大なるHelloWorld") flash[:success] = "おめでとう!偉大なるHelloWorldは成功した。" redirect_to root_path else flash[:error] = "残念だが、偉大なるHelloWorldは失敗に終わった。" render :action => 'index' end end # ここまで追加 end
ビュー(app/views/messages/index.html.erb)の編集。ログインしていればツイートするためのフォームボタンを。していなければログインリンクを表示します。
<% if logged_in? %> <% form_tag %> <%= submit_tag '偉大なるHelloWorldをツイートをする' %> <% end %> <% else %> <%= link_to 'ログインする', login_path %> <% end%>
全体のレイアウトファイル(app/views/layouts/application.html.erb)を作成します。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>偉大なるツイッターアプリ</title> </head> <body> <%- flash.each do |name, msg| -%> <div class='flash_<%= name %>'> <%= msg %> </div> <%- end -%> <div> <%= yield %> </div> </body> </html>
公開
プログラムが完成したので、Herokuで公開してみます。
.gemsファイルの用意
Herokuではプロジェクトルートに「.gems」というファイルを配置して、プロジェクト内で使うGemを管理することができます。
以下の内容で「.gems」ファイルを作成してください。
oauth ezcrypto json
つづいてデプロイ作業です。
最新の変更をリポジトリにコミットしたあと、Herokuのリポジトリへプッシュすることでデプロイが完了します。
最後にデータベースをマイグレートすれば完成です。
% git add . % git ci -m 'finish!' % git push heroku master % heroku rake db:migrate
おつかれさまでした!
おわりに
いかがでしたでしょうか?
かなり駆け足になってしまいましたが、結構簡単にツイッターAPIを使ったWebサービスが作れてしまいました。
最後に私事で恐縮ですが、自分で作ったツイッターサービスとアバウトな制作期間を紹介させていただきます。
- ラペコ
:美味しそうを共有しよう!(制作期間1か月)
- つぶやき@名無しさん
:匿名でツイッター(制作期間1週間)
- 翻訳ったー
:つぶやきで英語学習(制作期間3日)
ネタ一発系のサービスであれば、1週間とかからずにリリースできるものなので、みなさんじゃんじゃん作りましょう!
関連記事
このエントリーに対するコメント
- トラックバック