ask-sdkにプルリクエスト(PR)を出す
たまーに「この関数コアに入れてよ」と思うことがあるので、パッチ作ってます。ただ定期的にやり方を忘れるので覚書。 リポジトリのクローン 元のリポジトリをそのまま落としてくると、権限がないのでpushできません。なのでfor […]
目次
たまーに「この関数コアに入れてよ」と思うことがあるので、パッチ作ってます。ただ定期的にやり方を忘れるので覚書。
リポジトリのクローン
元のリポジトリをそのまま落としてくると、権限がないのでpushできません。なのでforkしたリポジトリをローカルにクローンします。
$ git clone [email protected]:YOUR_USER_NAME/alexa-skills-kit-sdk-for-nodejs.git
$ cd alexa-skills-kit-sdk-for-nodejs
ライブラリのインストールとセットアップ
ask-sdkはlernaで管理されています。なので馴染みがない方にはちょっと混乱するかもしれません。
// lernaをインストール
$ npm install
// 各リポジトリのセットアップ(ライブラリインストールなど)
$ npm run bootstrap
テスト・リントの実行
パッチを作ってもテストやリントがコケていてはマージしてもらえません。必ずテスト・リントを実行するようにしましょう。ask-sdkではgulpが使われていますので、gulpコマンドを実行します。
$ lerna run gulp
// testのみ
$ lerna run gulp -- test
// lintのみ
$ lerna run gulp -- tslint
// typescriptのビルドのみ
$ lerna run gulp -- tsc
ただし上のコマンドを実行すると、全てのリポジトリに対してgulpが走ります。特定のリポジトリに対してのみ実行したい場合は、--scope
オプションを追加します。
// ask-sdk-coreのみ実行する
$ lerna --scope ask-sdk-core run gulp
testがfailすると、以下のようにメッセージがでます。
109 passing (126ms)
1 failing
1) RequestEnvelopeUtils
should be able to get user id:
AssertionError: expected 'mockUserId' to equal 'mockUseId'
+ expected - actual
-mockUserId
+mockUseId
at Context.<anonymous> (tst/util/RequestEnvelopeUtil.spec.ts:106:44)
=============================== Coverage summary ===============================
Statements : 100% ( 351/351 )
Branches : 100% ( 88/88 )
Functions : 96.26% ( 103/107 )
Lines : 100% ( 330/330 )
================================================================================
Failした内容を確認して、パスするまでがんばりましょう。
Lintのfailメッセージが読めない場合
Lintのエラーメッセージがたまに読めないことがあります。
lerna ERR! npm run gulp stderr:
[10:24:05] 'tslint' errored after 3.97 s
[10:24:05] Error: Command failed: node_modules/.bin/tslint -p tsconfig.json -c tslint.json
at ChildProcess.exithandler (child_process.js:291:12)
at ChildProcess.emit (events.js:182:13)
at ChildProcess.EventEmitter.emit (domain.js:460:23)
at maybeClose (internal/child_process.js:961:16)
at Socket.stream.socket.on (internal/child_process.js:380:11)
at Socket.emit (events.js:182:13)
at Socket.EventEmitter.emit (domain.js:460:23)
at Pipe._handle.close (net.js:595:12)
[10:24:05] 'default' errored after 4.02 s
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] gulp: `gulp`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] gulp script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
この例では、tslintでコケているのはわかりますが、何が原因かが表示されていません。
このような場合、Error : Command failed: ~
でどのコマンドがfailしたか表示されています。これをリポジトリのディレクトリに移動して直接実行してやりましょう。
$ cd ask-sdk-core
$ node_modules/.bin/tslint -p tsconfig.json -c tslint.json
ERROR: /Users/develop/npm/alexa-skills-kit-sdk-for-nodejs/ask-sdk-core/lib/util/RequestEnvelopeUtils.ts:96:52 - expected onespace after colon in parameter
ERROR: /Users/develop/npm/alexa-skills-kit-sdk-for-nodejs/ask-sdk-core/lib/util/RequestEnvelopeUtils.ts:96:52 - missing whitespace
エラー内容が表示されましたので、修正しましょう。
コミットする
テスト・リントが通ればあとはコミットするだけです。ask-sdkでは「Conventional Commits」とよばれる方法を採用していますので、これに合わせたメッセージを書きましょう。
$ git add ask-sdk-core
$ git commit -m "<type>[optional scope]: <description>
[optional body]
[optional footer]"
<type>
には、バグ修正ならfix
、新しい機能ならfeat
、破壊的変更があるならBREAKING CHANGE
のように記載します。[scope]
はオプションですが、どのライブラリに対するPRかを書いてやると良いでしょう。
Pull Requestを作成する
ここまで準備できれば、あとはPull Requestを作るだけです。
Travis CIのビルドがPassした後に、レビューが入ります。少し時間がかかることなどもありますので、気長に待ちましょう。
Enjoy Open Source
オープンソースソフトウェア(OSS)の良いところは、「自分たちも参加できること」です。
もちろん常にマージされるとは限りませんし、つれない態度で却下されることもあります。
ただ、「これあればいいのに」と思ったことをコードとして中の人にフィードバックできることや、パッチを作ることでSDK自体の理解を深めることができます。
また、Amazon(Alexaチーム)がどのような開発体制・コーディングルールを採用しているかなどを知るチャンスでもあり、自社の開発体制を考える際にも参考になります。
「GAFAではこういう体制を組んでいました。だからこうしましょう」なんて会議で言えたらちょっと格好良くないですか?
Not only code but document
そしてask-sdkは、SDKのドキュメントそのものもオープンソースです。
日本語のドキュメントは英語のものが公開された後、アマゾンジャパンの中の人が頑張って翻訳されている様子です。
「ここサンプルコードわかりにくい」とか「あれ翻訳されてない」というものがあれば、これもみんなでパッチを作って殴り込み提案しにいきましょう:)