Help us understand the problem. What is going on with this article?

TypeScript を使って Alexa Custom Skills を作ろう (1) 設計

More than 1 year has passed since last update.

はじめに

この投稿では、スキルの音声設計についてではなく、TypeScriptでどう作っていこうかというところを考えていきます。
今後の投稿の実装編ではJavaScriptで作成したサンプルを元にTypeScriptにどう変換していくかを書いていきます。

アーキテクチャパターンについて考える

せっかく TypeScript を使うのに、ただTypeScriptで書くだけではつまらないので、
WEBアプリケーションフレームワークのMVCのようなアーキテクチャパターンをカスタムスキル作成でも考えてみます。

MVCをざっくり解説

MVCでは、プログラム構造を大きく以下の3つに分割しています(ざっくり)。

名前 概要
Model(M) ビジネスロジックを書く
View(V) ユーザに見える部分を書く
ユーザからの要求を取得する部分を書く
Controller(C) ユーザからの要求を受け付けて、インテントを経由して必要であればモデルに渡して結果(ビュー)を返す

Alexa Custom Skillsの場合を考える

MVCと似た感じで、Alexa Custom Skillsについては、以下の3つに分類していきます。

名前 概要
Model(M) ビジネスロジックを書く
Utterance(U) ユーザとAlexaの対話内容(発話)部分を書く
Handler(H) 対話の状態によって、ユーザからの要求(発話)を受け付けて、必要であればモデルに渡して結果(発話)を返す

以上の感じで、ざっくりディレクトリ構成を決めていきます。

ディレクトリ構成を決める

前提

将来的にASK CLIを使うことを考慮したディレクトリ構成です。
ASK CLIとスキルマネジメントAPIドキュメント

プロジェクトルートディレクトリ構成

※ ここのモデルは前述のモデルとは関係ありません

ProjectRootDirectory
├── .ask                                        … Alexa Skills Kit ディレクトリ
│   └── config                                  … スキル構成情報
├── lambda                                      … lambda関数格納 ディレクトリ
│   └── custom                                  … カスタムスキル関数格納 ディレクトリ
├── models                                      … モデル(インテントスキーマ等) ディレクトリ
│   └── ja-JP.json                              … ローカライズファイル(日本語)
└── skill.json                                  … スキルマニフェストファイル

AWS Lambda ファンクション ディレクトリ構成

※ 前述のディレクトリ構成のlambda部分です。

/lambda/custom
lambda
└── custom
    ├── enums                                   … 列挙型
    ├── handlers                                … ハンドラ
    ├── helpers                                 … ヘルパー(ユーティリティとか)
    ├── intents                                 … インテント
    ├── models                                  … モデル
    ├── tests                                   … 単体テスト
    └── utterances                              … 発話

まとめ

この投稿では、アーキテクチャパターンを考え(MVCの解釈をちょっといじった程度ですが。。。)、ディレクトリ構成を決めました。
ざっくりでもいいので、処理毎に役割を分けることによって、プログラム全体が見通しよくなればレビューがしやすいなぁと思った結果の設計になっています。

次回は、環境構築について書きます!

daisukeArk
https://www.wantedly.com/users/51253163
hands-lab
ハンズラボは小売業特化型ITソリューション企業です。数十万に及ぶ膨大な商品マスタを扱ってきた豊富なノウハウで、お客様の現場に最適なシステムを提案・開発します。 エンジニア募集中
https://www.hands-lab.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away