僕が開発に携わっているロリポップ!マネージドクラウドは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コンソールに移動しアプリを登録します。
今丁度コンソールがリニューアルしているようなのですが、新しい方はまだ不安定で上手く動かなかったので旧コンソールで行きます。
こんな感じでスキルを登録していきます。
エンドポイントはマネクラのアドレスにしましょう。
次に対話モデルを定義します。インテントは下記のような形式でOKです。
ここまで登録するとテストを実行することが出来ます。
サービスシミュレーターを利用して、スキルを呼び出します。マネクラに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スキルを開発できました。もしかするとどこかでハンズオンなどやるかもしれないので、その際はぜひ僕と一緒にコード書きましょう!!!
今日開発に使用したリポジトリはこちらです。