Web API の リクエスト パラメーター を 入力チェックするのによさそうな Validate TypeScript というライブラリを見つけ使おうとしたところ、インストールエラーが発生してしまいました。
こちらをプルリクエストで修正してもらいましたので、プルリクエストの手順と合わせて整理します。
Validate TypeScript
Validate TypeScript-https://github.com/Grant-Zietsman/validate-typescriptはスキーマベースのバリデーターで、JSON などのオブジェクトの値や型をチェックできます。
プルリクを出すことになった背景
ドキュメントにしたがってnpm install
するとエラーとなります。またnpm install -S
とセーブオプションを付けてもエラーなのでpackage.json
に反映されませんしnode_modules
ディレクトリにも保存されません。
1 | lulzneko@PC:/tmp/project$ npm install validate-typescript |
普段はYarnを使っているのですが、こちらも同様にエラーとなりpackage.json
に反映されません。しかしながらダウンロードはできているのでnode_modules
に保存されます。CI とかで環境が変わると、パッケージ名を明示してインストールはしないので、そちらではエラーとなるので注意が必要です。
1 | lulzneko@PC:/tmp/project$ yarn add validate-typescript |
インストール・エラーとなる原因
どうもcd test && npm install
というコマンドを実行しようとしてtest
ディレクトリが見つからないためエラーとなっているようです。
普段Yarnを使っているのでnpm install
は出てこないでしょうしcd test
することもないです。
自分のプロジェクト内で問題となってるわけではなないようなのでValidate Typescriptに何かの処理があるのではないと探ります。
利用しようとしていた v4.0.0 cf81b3b のファイルを見るとscripts
に"install": "cd test && npm install",
があります。
これが実行されてエラーとなっているようです。
https://github.com/Grant-Zietsman/validate-typescript/blob/cf81b3b17a2b37f2fb7d72006eff9bc28519220c/package.json#L12
Yarn だとダウンロードできているので、ディレクトリを確認したところtest
ディレクトリは含まれていませんでした。
またインストールに成功する Version 3.0.0 にもtest
は含まれていません。
パッケージングの忘れか、意図しない実行のいずれかなのでしょうか 🤔
変更履歴の確認
ひとつ前の Version 3.0.0 はインストールに成功するので、Version 4.0.0 リリースに至るまでに変化があったといえます。
3.0.0 3e3c296
は"setup": "cd test && npm run setup",
、install
でなくsetup
という名前で作られていたようです。
これならインストール時ではなく、明示的に呼び出した時に実行されるので問題ないです。
https://github.com/Grant-Zietsman/validate-typescript/blob/3e3c2967150ae88c828b1479576ba922227c2eb7/package.json#L12
次のFixed outstanding issues, except feature request. 5dce751
でエラーとなっているinstall
に変わっています。
変更が多数あるのですがコミットが分かれておらず、またコメントからもちょっと推測しにくいところです。
https://github.com/Grant-Zietsman/validate-typescript/commit/5dce751b6cea0870be3287835befa437ed37c8cf#diff-b9cfc7f2cdf78a7f4b91a753d10865a2
残念ながら変更意図の理解につながりそうなコメントなどはなさそうでした。
とりあえず、元に戻すプルリクを出して相談してみることにします。
勝手な推測ですが、Validate Typescript自体の開発を行う際に外部依存ライブラリ(現時点だと"chalk": "^2.3.1"
) をnpm install
します。その時に合わせて、テストで依存している外部ライブラリのインストールも一緒に行いたかったのではないでしょうか。
Version 3.0.0 だと、以下の手順が必要です。
1 | npm install |
これが Version 4.0.0 だと、1回。
1 | npm install |
開発環境を便利にした反面、これが利用者側のインストールするときにも同じことが起こるとは想定外だったのかなと想像します。
フォークしてプルリク作成の環境用意
プルリクを出すために、まずは元リポジトリをフォークして、プルリク作成の環境を作ります。
Validate Typescriptのリポジトリへ行き、画面右上の [fork] ボタンをクリックします。
リポジトリをスキャンしてる画像が表示されます。いい感じ。
無事フォークが完了し自分のリポジトリが作られます。
フォークしたことが [forked from Grant-Zietsman/validate-typescript] の表示で分かります。
後はいつも通りクローンして作業環境を用意します。
1 | lulzneko@PC:~$ git clone git@github.com:lulzneko/validate-typescript.git |
フォークした自分のリポジトリに変更を加える
プルリクを送りたい変更を、まずはフォークした自分のリポジトリに行います。
しっかりやるにはブランチを切って作業したほうが良いですが、今回はdevelop
ブランチがあることと、パッチ1個という感じで継続的にコントリビュートしていわけではないので、develop
ブランチへ直接変更を加えてしまいます。
1 | lulzneko@PC:~/validate-typescript$ git branch -a |
変更の方針
package.json
のinstall
をsetup
に戻す- 開発環境のセットアップが1回で行える機能は残す
よって、以下のように修正します (script
部分を抜粋)
1 | "setup": "npm install && cd test && npm install", |
これによって開発環境のセットアップはnpm run setup
の 1回です。
それでいてnpm install
とcd test && npm install
の 2つが実行できます。
修正できたら、コミット&プッシュ!
1 | lulzneko@PC:~/validate-typescript$ git add package.json |
プルリクの作成
フォークした自分のリポジトリに変更が反映され、プルリク作成ボタンが表示されるので [Compare & pull request] ボタンをクリックします。
プルリク作成フォームが表示されるので、確認と内容を記入し [Create pull request] ボタンをクリックします。
- 左の [base] が元のリポジトリ&ブランチになっていることを確認
- 右の [head] がフォークした自分のリポジトリ&作業ブランチになっていることを確認
- プルリクのタイトルと内容を記入
元のリポジトリにプルリクが作られました!マージされといいな。
一晩でマージされた!
この記事をつらつらと書いているうちに一晩でマージされて、Version 4.0.1 がリリースされました。はやっ!!
マージされたのでブランチの削除と、必要に応じてフォークしたリポジトリを削除します。プルリクのフォームにボタンがあるので簡単です。
無事、インストールエラー問題が解決され、パッチされたバージョンがリリースされました。
ホントはライブラリ紹介を書こうとしていたのですが、先にプルリクとなり。せっかくなのでプルリクの流れも整理して書いておこうと思ったら、あっという間にマージしてくれたのでびっくりです。
2019年3月14日 0:40 JST にプルリクして、2019年3月14日 1:28 JST にリリースの返事。1時間していないという。Grant Zietsmanさん、ありがとうございます!
※ なお英語はまったくできないのでプルリクの文章はグーグルです。