オープンソースのPaaSソフトウェア CloudFoundry の技術情報やイベント告知などを掲載します

2015-11-05

SharePla を Cloud Foundry で動かす

「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 KeyAPI 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

今回使用したソフトウェア



投稿者:NTTソフトウェア株式会社 堀内 純