WebStormを使ってES6でLambda開発しようとするとbabelの設定やらデプロイの方法やらWebStormの癖やら面倒くさいこといろいろあるのでテンプレにまとめてみました。
出来ること
- ES6のコードをbabelで変換
- mochaでテスト
- gulpでデプロイ
コード
メインのコードはsrc/*.es6に書きます。WebStormはデフォルトで.jsと.es6を区別してそれぞれES5,ES6のコードとして扱います。filetype設定で.jsをES6として扱うことも出来ますが、ES5のファイルが混ざってもES6として評価するのであまりおすすめしません。
.babelrcでES2015とstage-3のプリセットを呼んでいるのでasync/awaitも使えるようにしてあります。babel6以降presetsやpluginはここに書くのがお作法っぽいです。
gulp build gulp watchで lib/*.js に変換されますがここは変換が通ったか確認するために吐き出しているだけなので実際には使われません。gulpを利用せずにWebStormのWatchでES6を変換するようにするとコンパイルエラーがIDEで見れます。
テスト
npm testでtest/以下全てのテストが実行されます
テストはmochaです。WebStormでテストハーネスと認識してくれるライブラリ(mocha,karma,nodeunit)を使うと特定のテストケースの実行とかが容易になります。迂闊にAVAとか対応していないものを使うとただのスクリプト実行になってしまうのが辛いところです。
またみんな大好きpower-assertに対応しています。.babelrcでbabel-plugin-espowerを設定しtest/mocha.optsでデフォルトパラメータに--require babel-registerを指定することで自動でassertが変換されます。
デプロイ
デプロイはnode-aws-lambdaを使ってgulpから行います。lambda-config.jsでクレデンシャル情報とlambda関数の設定を入力してgulpコマンドを実行するとビルドからアップロード、設定まで一気通貫で行ってくれます。アクセスキーを記述せずに.aws/credentialsに設定したプロファイル名を環境変数で渡すのがおすすめです。
AWS_PROFILE=hogehoge gulp deploy
ちなみにここでアップロードするユーザとlambdaの実行ロールは別物です。実行ロールにはCloudWatchLogsの書込権限が必要ですが、アップロードするユーザにはlambdaの設定権限と実行ロールへ移譲する権限(iam:PassRole)が必要になります。
まとめ
ふんわりと紹介してみましたがLambdaめっちゃ便利だけど開発フロー固まってないとウロウロしがちなのでとりあえずテンプレから始めてみると良いと思いますのでコレ以外にもみんなのベストプラクティスもおしえてください