apl-suggesterでAlexa APLのバリデーション
AlexaのGitHub Orgにきになるリポジトリがあったので試してみました。 簡単な動かし方 TypeScriptでざっと書いたコードがこちらです。 Promiseで結果が返りますが、バリデーションエラーだからThr […]
目次
AlexaのGitHub Orgにきになるリポジトリがあったので試してみました。
簡単な動かし方
TypeScriptでざっと書いたコードがこちらです。
import {StaticAplTemplateValidator} from 'apl-suggester'
const aplTemplate = {
test: true
}
const validator = new StaticAplTemplateValidator();
validator.validate(aplTemplate)
.then(validationResults => {
console.log(validationResults)
});
Promiseで結果が返りますが、バリデーションエラーだからThrowされるわけではないことに注意です。
動かしてみる。
今回は雑にts-nodeで動かしてみます。
% ./node_modules/.bin/ts-node apl.ts
[
{
path: '/',
errorMessage: 'should NOT have additional properties : test',
level: 'WARNING'
}
]
WARNINGがでましたね。
成功させてみる
Alexa開発コンソールのAPLエディタからJSONをもってきました。
import {StaticAplTemplateValidator} from 'apl-suggester'
const aplTemplate = {
"type": "APL",
"version": "1.4",
"settings": {},
"theme": "dark",
"import": [
{
"name": "alexa-layouts",
"version": "1.2.0"
}
],
"resources": [],
"styles": {},
"graphics": {},
"commands": {},
"layouts": {},
"mainTemplate": {
"parameters": [
"payload"
],
"item": [
{
"type": "Container",
"height": "100vh",
"items": [
{
"type": "AlexaBackground",
"backgroundImageSource": "${payload.longTextTemplateData.properties.backgroundImage.sources[0].url}",
"backgroundBlur": false,
"colorOverlay": true,
"backgroundScale": "best-fill"
},
{
"type": "Container",
"height": "100vh",
"width": "100vw",
"items": [
{
"type": "AlexaHeader",
"headerTitle": "${payload.longTextTemplateData.properties.title}",
"headerAttributionImage": "${payload.longTextTemplateData.properties.logoUrl}",
"headerDivider": false
},
{
"type": "ScrollView",
"grow": 1,
"paddingTop": "@spacingMedium",
"paddingBottom": "${@spacing3XLarge + @spacingXSmall}",
"paddingLeft": "@marginHorizontal",
"paddingRight": "@marginHorizontal",
"items": [
{
"type": "Text",
"id": "CheeseContent",
"style": "textStyleBody",
"text": "${payload.longTextTemplateData.properties.textContent.primaryText.text}",
"speech": "${payload.longTextTemplateData.properties.cheeseInfoSpeech}",
"textAlign": "left"
}
]
}
]
}
]
}
]
},
"onMount": [
{
"type": "SpeakItem",
"componentId": "CheeseContent",
"highlightMode": "line",
"align": "center"
}
]
}
const validator = new StaticAplTemplateValidator();
validator.validate(aplTemplate).then(validationResults => {
console.log(validationResults)
});
ScrollView
まわりなどに何か言いたいことがあるみたいですが、WARNINGはでていません。
% ./node_modules/.bin/ts-node apl.ts
No mixin for component : ScrollView
No mixin for component : mainTemplate
[]
typeの入力ミスなどは拾わない様子
Lintツールとしても使えるかなと思ったのですが、type
の文字列をContaineraaa
などにしてもエラーは出ませんでした。
「何をsuggestしているのか」や「なにをLintできるのか」などがまだ不明ですが、ある程度のチェックには使えそうかなと思います。
追記: まだ開発進行中?かも
README.md読み直したのですが、「まだランタイムチェックはやってない」や「描画できないことを検知するわけではない」のようなことが書かれていました。
Currently it performs static instead of runtime checks. The output warnings are aimed for suggesting best practice of writing APL templates but don’t indicate that the template can’t be rendered.
もしかすると、今後のアップデートでいろいろと機能が増えるのかもですので、要チェックかなと思います。