8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-10

はじめに

この投稿では、スキルの音声設計についてではなく、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の解釈をちょっといじった程度ですが。。。)、ディレクトリ構成を決めました。
ざっくりでもいいので、処理毎に役割を分けることによって、プログラム全体が見通しよくなればレビューがしやすいなぁと思った結果の設計になっています。

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

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?