yieldを使ったメソッドを書けるようにする
Amazonに電話する時間がなかったのでASK開発はおやすみ。
Scalaの勉強をしていてyield
という単語が出てきた。
こいつ、業務で書いているRubyでもよく見かけるけど、なんなのかよくわかっていない。
そこで今日は、Scalaは一旦置いといて、「Rubyでいうyield
ってなに」を解消することにする。
ググって出てきた記事を読んでみる。
読んだ内容をまとめると、
- Rubyではすべてのメソッドにおいて、ブロックを引数として渡すことができる。
- ブロックには手続きを書くことができる。例えば
{p "hoge"}
て感じで。 - メソッドの引数にブロックを渡した場合は、ブロックは
Proc
クラスのオブジェクトとしてメソッドに渡される。 - 渡された
Proc
オブジェクトはyield
で呼び出せる。
つまりyield
は、
「yield
が宣言されているメソッドに渡されたProc
オブジェクト(手続き)を呼び出すメソッド」
で、あってるはず。
適当に検証してみる。
$ irb irb(main):001:0> def hoge irb(main):002:1> yield irb(main):003:1> end => :hoge irb(main):004:0> hoge{p "fuga"} "fuga" => "fuga"
確かに、特にブロック引数を定義していないけど呼び出せました。
次はProc
オブジェクトとして手続きを定義してメソッドに渡してみる。
ブロック引数であることを明示するには、引数の頭に&
をつければいいらしい。
irb(main):005:0> block = Proc.new{p "hoge"} irb(main):006:0> hoge &block "hoge" => "hoge"
おお、ちゃんと動いた。
使い方はわかった気がするけど、用途がよくわからないので、
もう少し調べる必要があると思う。
ASK(Alexa Skills Kit)を触ってみる その2
ASKを触ってみるという記事を書きました。
その後も触ってみてはいるのですが、前段階で色々と調べる必要があることが多く進捗がよろしくないため、
ある程度形になってからまとめて投稿しようか迷っていました。
が、毎日投稿しないと続かなさそうなので、まとめるのは後にして、
その日やったこと、思ったことを書いていくことにします。
以下画面で「Alexa Skills Kit」を選択。
するとこんな画面に移動して、作るSkillのことを色々訊かれる。
「何のために作るんだ」「これでお金儲けるつもりあるか」「Skillの対象年齢は?」など。
適当に選択して進めていってみると、AWS LambdaのService Endpointを指定するように言われる。
こんな感じで。
EndpointというとURIか。
調べてみるとどうやらSkill作成においてはAWS Lambdaを使う、ていうのがスタンダードっぽい。
(むしろ他のやり方ができるのかわからない)
個人のAWSアカウントを持っていないので登録してみたが、
クレカ認証がうまくいかず、今日は断念。
ASK(Alexa Skills Kit)を触ってみる
標題の通りです。
音声アシスタントはスマートフォンの次のプラットフォームとして期待されていて、
海外では既にかなり普及しているようです。
Amazon EchoやGoogle Home、LINE Clova、
NTT docomoのpetocoなど、いろんな企業が市場に参入されてますね。
ASKについて
Amazon EchoにはAlexaという音声認識サービスが乗っかっていて、
AlexaはインストールされているSkillを使って音声を解釈してくれます。
Skillはdeveloperが自作して公開することができます。
自分なりの解釈ですが、
Amazon Echo, Alexa, Skill それぞれの関連については、
スマホと並べて考えるとわかりやすいと思います。
- Amazon Echo: スマホでいう端末 (Galaxy, iPhoneなど)
- Alexa: スマホでいうOS (Android, iOSなど)
- Skill: スマホでいうネイティブアプリ (Facebook, Instagram, Twitterなど)
詳細に関してはこちらの記事がわかりやすかったです。
記事にも説明がありますが、Amazon Echo以外にもFire TV, Echo Dotなど
他のAmazon製のハードウェアにもAlexaが搭載されている、らしい。
読み漁った感じ、音声認識などのハードのめんどくさい部分はサポートされていて、
テキスト情報として受け取った情報を処理して、形を整えて、
テキストとして返却したらOK、みたいにみえる。
触ってみる
こちらでStart a Skill
ボタンをクリック。
開発者情報などを入力したらWeb UIに到達。
こんな感じ。
全然触れてないですが、今日はここまで…。
その他読んだ記事。
本家説明はこちら。 developer.amazon.com
GraphQLに対する私見
先日催されたRejectKaigi2017にて、gfxさんがGraphQLをRailsで使う、というお話をされていました。
本家を見てみてると、Rubyではこんな感じで使えるみたいです。
ありがたいことに閉会後gfxさんとお話する機会があり、
RESTful APIに対する利点として下記を挙げられていました。
API設計がしやすいことは大きな利点だと思いました。
私は作ったことないのでわからないんですけど、
Web APIの設計って難しそうですよね。
もしRESTful APIで外部公開のAPIを作るならば、
他のWebアプリのAPI設計を見て、
あーなるほどこんな感じがわかりやすいんだろうなーじゃあこうするか。
くらいの曖昧な感じで仕様を決めると思います。
GraphQLはそういった「なんとなくよさそう」を制約で縛ってくれているように見えます。
ScalaのServer Libraryもあるみたいなので、
PlayでWebアプリケーションを作るときに使ってみようと思います。