0
1

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 3 years have passed since last update.

自分のためのAlexaテンプレート(ts version)をつくった

Posted at

はじめに

少し前にAlexaのスキルを作ってそれっきりだったので、今回スキル開発に手をつけてみました。
しかしこのAlexaのスキルのテンプレートは生のJavaScript(要は型がないもの)しかなかったので自分用にTypeScriptのテンプレートを作ってみました。

材料

今回はHello WorldのテンプレートをベースにTypeScriptに改造しました。このテンプレートのスキルは単純に「こんにちは」等という言葉に対して「ハローワールド」と返すだけの単純なものです。

加えた改造

まずはtypescriptの導入です。

yarn add -D typescript tsc

ここは完全テンプレですが、とりあえず以下でtsconfig.jsonを作ります。

./node_modules/.bin/tsc --init

とりあえずoutDirrootDirは以下のように指定して、後は特に設定をいじりません。

"outDir": "./lambda/custom"            
"rootDir": "./src"

これで終わっても良かったのですが、ESLintPrettierがないのが不満だったので入れることにしました。この2つを用いてコードの静的解析と自動補正を有効化します。導入はここを参考にしました。あとは保存時に自動補正をかけるようにvscodeの設定を拡張します。

.vscode\settings.json
{
  "editor.renderControlCharacters": true,
  "editor.formatOnSave": false,
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  },
  "eslint.format.enable": true,
  "eslint.packageManager": "yarn",
  "eslint.workingDirectories": ["./src"],
  "eslint.validate": [
    "typescript"
  ]
}

editor.formatOnSaveは無効化しておかないとprettierと喧嘩してしまいます!後はついでにhuskyを入れてcommitしたときにeslintとかを走らせてエラーを検出するようにします。導入はここを参考にしながら、こんな感じpackage.jsonを作成しました。

コードの改造

元のJSのコードをTypeScriptでトランスパイルできるように書き換えました。細かい内容は省略しますが、特に面倒だったのが多言語対応でした。テンプレートのコードではi18nextを使ってaddRequestInterceptorsの中のハンドラーでゴニョゴニョするような実装(説明適当www)をしていましたが、これをTypeScriptで書き換えるのは辛かったのでこんな感じで自作関数に書き換えました。
コード全体はここで公開しているので一部のみを抜粋して、インテントハンドラーはこんな感じで書き換えました。

const HelloWorldIntentHandler: Alexa.RequestHandler = {
  canHandle(handlerInput) {
    return (
      handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
      handlerInput.requestEnvelope.request.intent.name === 'HelloWorldIntent'
    )
  },
  handle(handlerInput) {
    const speakOutput = languageStrings(handlerInput).HELLO_MSG
    return (
      handlerInput.responseBuilder
        .speak(speakOutput)
        .getResponse()
    )
  },
}

元のテンプレートを崩すことなく実装できた気がします。

さいごに

あとはこれをASK CLIでテンプレートとして呼び出したいわけですが、その方法はここを参照することにしました。やっぱりJavaScriptの開発はTypeScriptとESLintがかかせませんね!

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?