ロリポップ!マネージドクラウドでAlexaスキルを開発する

僕が開発に携わっているロリポップ!マネージドクラウドはFastContainerアーキテクチャと呼ばれる、リクエストに応じてコンテナを起動するアーキテクチャで実装されています。このアーキテクチャのメリットとして、起動していない間はリソース消費を抑えられるため、非常に安価に利用できることにあります。

今回はその特性を利用して 小山さんを煽る会 という Alexaスキルを開発してみました。

AWS Lambdaで開発した前作はこちらです。

まずはプロジェクトの作成は無料なので下記の手順でRailsアプリを作成します。

次に4. Amazon AlexaからHerokuのRailsにつなぐを参考に、Railsアプリを作ります。今回の用途だとAPIで問題ありません。


$ rails new [project_name] --api

ルーティングを書いていきます。

  • config/routes.rb

Rails.application.routes.draw do
  resources :stir_up, only: %i(create)
end

次にコントローラーを作成しましょう。


% rails generate controller StirUp
Running via Spring preloader in process 64601
      create  app/controllers/stir_up_controller.rb
      invoke  test_unit
      create    test/controllers/stir_up_controller_test.rb

  • app/controllers/stir_up_controller.rb

class StirUpController < ApplicationController
  def create
    Rails.logger.info params
  end
end

ここまで出来たらマネクラにプッシュします。


$ git push lolipop master

Alexaコンソールに移動しアプリを登録します。
今丁度コンソールがリニューアルしているようなのですが、新しい方はまだ不安定で上手く動かなかったので旧コンソールで行きます。

こんな感じでスキルを登録していきます。
input

エンドポイントはマネクラのアドレスにしましょう。

マネクラ

次に対話モデルを定義します。インテントは下記のような形式でOKです。

煽り
煽り2

ここまで登録するとテストを実行することが出来ます。

サービスシミュレータ

サービスシミュレーターを利用して、スキルを呼び出します。マネクラにSSHしてログを見ると、呼び出されているパラメーターが確認できますね。


$ tail current/log/production.log 
I, [2018-03-21T07:08:14.443013 #4]  INFO -- : [38aea28d-4e59-4db0-9961-70364ae3f42d]   Parameters: {"session"=>{"sessionId"=>"SessionId.845fe10e-99c7-4e4c-8087-4b02a845fa86", "application"=>{"applicationId"=>"amzn1.ask.skill.af7ebe42-b341-4a2b-bb92-064e57ab6f42"}, "attributes"=>{},
...

次に簡単な応答をしてみます。Gemfileに下記を追記し、bundle installしてください。


gem 'alexa_rubykit'

次にコントローラーのメソッドを変更します。


class StirUpController < ApplicationController
  def create
    request = AlexaRubykit::build_request(params)
    response = AlexaRubykit::Response.new
    response.add_speech("あれ?小山さん、まだそこの実装やってるんですか?")
    render json: response.build_response
  end
end

commitしてpushすると、レスポンスの変更が確認できます。

レスポンス

せっかくなので、動画でもお伝えしたいと思います。自分のアカウントに紐付いた開発アプリはDEVスキルタブから登録します。

今日は最近仲間入りした洗面所のAlexaで試してみます。

最高ですね?

まとめ

Railsとマネクラを利用して簡単にAlexaスキルを開発できました。もしかするとどこかでハンズオンなどやるかもしれないので、その際はぜひ僕と一緒にコード書きましょう!!!

今日開発に使用したリポジトリはこちらです。