RailsでHeroku上にTwitterサービスを作り始める場合
「1時間でツイッターサービスを作ろう!」の記事が参考になる。
Railsもいいけど最近Androidでも活躍しているtwitter4jを使ってみたかったのでtwitter4jを使用して
ツイートをポストするWebアプリをHeroku上にデプロイしてみた。
twitter4jの作者である@yusukeさんのサンプルソースを流用するのでだいたい30分くらいで出来る。
事前準備
- Gitインストール
- Maven 3インストール
- Herokuのアカウント作成
- herokuコマンドインストール
Herokuアプリケーションの作成
$ heroku create --stack cedar
Creating blazing-mist-9962... done, stack is cedar
http://blazing-mist-9962.herokuapp.com/ | [email protected]:blazing-mist-9962.git
Twitterサービスの登録
https://dev.twitter.com/apps/newにアクセスして今回作成するサービスの情報を入力し登録する。
Callback URLはHerokuアプリケーションの作成時に表示されたURL + callback
Name(アプリケーション名):u1aryzの備忘録とか(任意)
Description(アプリケーションの説明):Herokuからtwitter4jを使用してツイートをポストするサンプル。(任意)
WebSite(ウェブサイトURL):http://u1aryz.blogspot.com/(任意)
Callback URL(コールバックURL):http://blazing-mist-9962.herokuapp.com/callback
登録し終わったらSettingsからApplication TypeをRead and Writeに変更。
Consumer keyとConsumer secretは後で使用するのでメモ。
twitter4jのサンプルソースをダウンロード
GitHubで公開されているtwitter4jのサンプルソースをダウンロードする。
yusuke / sign-in-with-twitter
Heroku(Jetty)用に修正&追加
pom.xml(修正)
<packaging>war</packaging>
↓変更
<packaging>jar</packaging>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
↓変更
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
pom.xml(追記)
dependenciesの子ノードに下記を追加
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>7.4.5.v20110725</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jsp-2.1-glassfish</artifactId>
<version>2.1.v20100127</version>
</dependency>
build,pluginsの子ノードに下記を追加
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>assemble</goal>
</goals>
<configuration>
<assembleDirectory>target</assembleDirectory>
<programs>
<program>
<mainClass>twitter4j.examples.signin.StartServer</mainClass>
<name>webapp</name>
</program>
</programs>
</configuration>
</execution>
</executions>
</plugin>
StartServer.java(新規)
package twitter4j.examples.signin;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class StartServer {
public static void main(String[] args) throws Exception {
Server server = new Server(Integer.valueOf(System.getenv("PORT")));
WebAppContext context = new WebAppContext("src/main/webapp", "/");
context.setDescriptor("WEB-INF/web.xml");
server.setHandler(context);
server.start();
server.join();
}
}
twitter4j.properties(修正)
twitter4j.oauth.consumerKeyとtwitter4j.oauth.consumerSecretにそれぞれ上記で登録した内容を入れる。
入力したらファイル自体をプロジェクト直下に移動する。
Procfile(新規)
下記内容でプロジェクト直下に作成する。
web: sh target/bin/webapp
Herokuにデプロイ
デプロイといってもソースをプッシュするだけ。
$ cd プロジェクトディレクトリ
$ git init
$ git add .
$ git commit -m "Generate twitter app."
$ git remote add heroku [email protected]:blazing-mist-9962.git
$ git push heroku master
ツイートしてみる
$ heroku open
ログイン後、コールバックURLが呼ばれ下記のようなページが表示される。
公式Twitterで確認出来る通り、ツイート出来ていることがわかる。