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のドキュメントそのものもオープンソースです。

    日本語のドキュメントは英語のものが公開された後、アマゾンジャパンの中の人が頑張って翻訳されている様子です。

    「ここサンプルコードわかりにくい」とか「あれ翻訳されてない」というものがあれば、これもみんなでパッチを作って殴り込み提案しにいきましょう:)

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark