CM re:Growth 2014 SapporoとTokyoでLeap MotionとLambdaで第九を奏でる話をしてきた #cmdevio

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちわーお。最近見ているTVの影響でこんな挨拶が頭から離れないせーのです。
さて今日は先日行われましたクラスメソッド主催のイベント「re:Growth 2014 Sapporo」「re:Growth 2014 Tokyo」での発表のお話をしたいと思います。

こんな発表をした

さて、私のスライドはこちらになります。

簡単に言うとLeapMotionのセンサーデータをLambdaを使って整形し、そのデータを使ってベートーベンの第九という曲の音量を変えたり左右にパンさせたりする、というデモをしました。
スライドではなんのこっちゃわからないと思いますので、TOKYOでのデモの様子をしんやさんが動画に撮ってくれたのでこちらをどうぞ。

こんなことをしていました。

どうしてこうなった

とりあえず今年最後の勉強会をするのでAWSネタを何か、というお話を聞いた時に「今年のAWSならLambdaかな」と思いました。
そこでLambdaをネタにする場合、Lambdaがどういうものなのか、どうしてLambdaがここまで注目されているのか、というのをわかりやすく説明するには「Lambdaはどのように使うのか」を見せるのが一番ではないか、と考えました。
そこでDevelopers.ioをはじめ色々なネットやブログでLambdaに関する記事を見てみると、最初はS3のEvent notificationをトリガーにしたLambdaの利用、次のステップはスマホのアプリからDynamoDBへのデータ投入をきっかけにLambdaを発動させる、という記事を多く見かけました。
その一方でKinesisを使ったLambdaの利用が少ないように感じました。特にLambdaが発表された当初に色々なニュースで出ていた「LambdaのIoTでの利用」を試している記事が見られませんでした。じゃあ何かセンサーのデータをきっかけにLambdaを発動させるものを、ということを考え、今回の発表に至りました。何より札幌、東京共に平日夜のイベントで私の順番は最後でしたので堅苦しくない、見た目で楽しめる発表を目指しました。楽しんでいただけたら幸いです。

いざやってみて困ったこと

というわけでセンサー系を使ったLambdaのデモを作ることに決めました。最初はOTOTOKinectを使ったデモを考えましたが準備期間が短かったために使い慣れていてSDKが充実していて実装が簡単なLeap Motionを選びました。
本来はIoTやセンサーのデータでLambdaを使用する時にはKinesisアプリとしてのEC2の代わりに使う、つまりRedShiftやDynamoDBに入れるために使用することが想定されているのですが、それではデモとして面白くないのでSQSに突っ込んでリアルタイムで使うことにしました。センサーのデータ量はものすごい多くなるので少しでも間引きするためにLeap Motionのセンサーデータの「信頼度」というプロパティを使用して信頼度が8割以上のもののみ使用するようにしました。センサーデータをリアルタイムで使う際にはどうやってデータを綺麗に見せるか、が重要な課題になってきます。他にも数十ポイント毎の平均値を取る、ノイズデータを極力減らす、表現に必要なデータのみに絞ってクライアントに渡す等工夫をすることで滑らかな表現が可能になります。ここら辺はオンラインゲーム等を作るノウハウに似てるかと思います。

まとめ

私の発表は基本的には普段のお仕事の役に立つようなものではないので是非とも勉強会にお越しいただいて、現場で楽しんで頂ければと思います。次回の発表こそ普段のお仕事のノウハウが詰まった発表を目指したいと思います。