「Cloud Foundry 百日行」第93日目は、旅行のプランを共有しながら立てることのできるRailsアプリ、SharePlaです。Google Mapsと連動して場所やルートを確認しながらプランを立てられるので、友人と遠隔で旅行を計画を立てなければならない場合などに便利かもしれません。
本アプリを動かすには、TwitterアカウントとGoogleアカウントが必要となるので、予め用意しておく必要があります。
基本情報
デプロイ準備から動作確認までの手順は以下の通りです。
- 1) ソースコードの取得
- 2) サービスの作成
- 3) デプロイ準備
- 4) デプロイ
- 5) 動作確認
1. ソースコードの取得
SharePlaのソースを、GitHubから取得します。
$ git clone https://github.com/RyuPiT/SharePla.git
$ cd SharePla
SharePla$ ls -a
. bin db Gemfile.lock lib public .rspec .travis.yml
.. config .fonts .git LICENSE Rakefile spec vendor
app config.ru Gemfile .gitignore log README.rdoc test
2. サービスの作成
SharePlaは、MongoDBを使用するため、MongDBのサービスを作成しておきます。
もしデプロイする bosh-lite 環境にMongDBサービスブローカがない場合、百日行の「spring-boot-cf-service-broker-mongoを Cloud Foundry で動かす」を参考に、事前に準備をしてください。
/SharePla$ cf create-service 'Mongo DB' 'Default Mongo Plan' sp-mongo
:
OK
SharePla$ cf services
:
name service plan bound apps last operation
sp-mongo Mongo DB Default Mongo Plan create succeeded
3. デプロイ準備
3-1. アプリ連携準備
SharePlaを使うには、TwitterおよびGoogleと連携する必要があります。
まず、Twitter Appsで本アプリを登録し、API Key
とAPI Secret
を取得します。アプリ登録には、電話番号が登録済みのTwitterアカウントが必要なので予め用意しておく必要があります。
例として、以下に本アプリ検証で登録した内容を記します。
次に、アプリからGoogle Map
へアクセスできるようにGoogle Developers Consoleで本アプリ用のプロジェクトを作成し、利用するAPIおよび認証情報を登録することで、API Key
を取得します。
以下に、登録が必要なものを記します。
Google Maps API
の中から、Google Places API Web Service
を選択し、有効にする認証情報
の中からAPIキー
を選択し、ブラウザキー
を作成する
3-2. MongoDBバインド準備
先に作っておいたMongoDBのCredential情報を確認するため、--no-start
で起動したアプリに作成したサービスをバインドし、cf env
の情報を確認します。
SharePla$ cf push sp-100 --no-start
:
Uploading 13.2M, 201 files
Done uploading
OK
SharePla$ cf bind-service sp-100 sp-mongo
:
OK
Mongo DBのurl:
の情報を控えておきます。
SharePla$ cf env sp-100
:
OK
System-Provided:
{
"VCAP_SERVICES": {
"Mongo DB": [
{
"credentials": {
"uri": "mongodb://44cf2e59-cfe3-4d4c-ae6d-85c347a7499a:password@192.168.15.91:27017/31f89550-96bc-42fd-a7c9-cbe7640d1fad"
},
"label": "Mongo DB",
"name": "sp-mongo",
"plan": "Default Mongo Plan",
"tags": [
"mongodb",
"document"
]
}
]
}
}
:
3-3. デプロイ用マニフェストの作成
デプロイ用マニフェストを作成して行きます。
上記で取得したTwitter、Googleとの連携情報およびMongoDBのCredential情報は、環境変数として指定します。
SharePla$ vi manifest.yml
applications:
- name: sp-100
command: 'bundle exec rails s --port=$PORT'
services:
- sp-mongo
env:
MONGOHQ_URL: 'mongodb://44cf2e59-cfe3-4d4c-ae6d-85c347a7499a:password@192.168.15.91:27017/31f89550-96bc-42fd-a7c9-cbe7640d1fad'
TwitterConsumerKey: '<TwitterのAPI Key>'
TwitterConsumerSecret: '<TwitterのAPI Secret>'
GooglePlacesApiKey: '<GoogleのAPI Key>'
4. デプロイ
デプロイ準備が完了したら、cf push
します。
SharePla$ cf push
:
OK
requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: sp-100.10.244.0.34.xip.io
last uploaded: Mon Nov 2 07:54:31 UTC 2015
stack: cflinuxfs2
buildpack: Ruby
state since cpu memory disk details
#0 running 2015-11-02 04:57:51 PM 0.0% 118.3M of 256M 0 of 1G
無事、デプロイは成功しました。
5. 動作確認
ブラウザから払いだされたアプリのURLへアクセスすると、無事トップページであるhosted.html
の画面が表示されました。
実は、Twitterアカウントがなくても「お試し」ボタンでSharePlaを試すことが出来るのですが、今回は折角Twitterの設定もしたので「Twitterでログイン」ボタンでログインして使ってみます。
ログインするとホーム画面へ移りますので、「新しいプランを作成する」ボタンをクリックし、プラン作成画面へ移動します。
上方にタイトルや概要を記述し、左のエリアで操作をしてプランを組み立てていきます。
例えば、2つ目の「都道府県選択」のタブで「北海道」を選択すると、他のタブに北海道の観光地や北海道限定の検索結果が表示されるようになります。
左のエリアに表示された観光地を右エリアにドラックアンドドロップして、計画を組み立てていきます。
右上の「ルートの表示」ボタンをクリックすると、左した地図に時系列順にルートが表示されます。
ただ、「ホテル検索」については、検索に失敗します。
Heroku上で公開されている公式の同Webアプリのサイトでも同じようにエラーとなるので、これはアプリのバグと思われます。
一通りプランの入力に満足したら、左上の「プラン保存」ボタンを押すことで設定したプランを保存することが出来ます。
保存が完了すると、ホーム画面に保存したプランがタイル状に表示されます。
保存した情報は、MongoDBに保存され、永続化されています。試しにアプリをリスタートしてみましたが、保存したプランは問題なく表示されました。
SharePla$ cf restart sp-100
:
requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: sp-100.10.244.0.34.xip.io
last uploaded: Mon Nov 2 10:38:16 UTC 2015
stack: cflinuxfs2
buildpack: Ruby
state since cpu memory disk details
#0 running 2015-11-02 08:17:46 PM 0.0% 128.7M of 256M 0 of 1G
今回使用したソフトウェア
- cf-release(v211)
https://github.com/cloudfoundry/cf-release/tree/v211
(https://github.com/cloudfoundry/cf-release/tree/2121dc6405e0f036efa4dba963f7f49b07e76ffa) - bosh-lite
https://github.com/cloudfoundry/bosh-lite/tree/552dc6869600c5350eb7ffb4fb9c9c5e79e3889d - CF CLI (v6.12.0-8c65bbd-2015-06-30T00:10:31+00:00)
https://github.com/cloudfoundry/cli/tree/v6.12.0 (https://github.com/cloudfoundry/cli/tree/8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48) - spring-boot-cf-service-broker-mongo
https://github.com/nota-ja/spring-boot-cf-service-broker-mongo/tree/cf-100-day-challenge-068-with-env-specific-configs - SharePla
https://github.com/RyuPiT/SharePla/tree/63f1d7dab1fd4c65e3ad191611d165b7907010a2
投稿者:NTTソフトウェア株式会社 堀内 純