PJR-R1N2 CLI の --version を package.json から読み、ハードコードをやめる
1. 概要
prj-0001:pjr-7vkr-npm-release の 0.2.0 公開後、npm 経由で導入した環境で確認したところ、CLI が報告する版とインストールされている版が食い違った。
text
node_modules/specdojo/package.json → 0.2.0
npx specdojo --version → 0.4.0原因は src/specdojo.ts での直書きである。
typescript
program.name("specdojo").description("SpecDojo helper CLI").version("0.4.0");package.json の version とは独立した文字列が置かれており、npm version で更新されない。0.4.0 という値の由来は不明で、過去の想定版か書き間違いと考えられる。
利用者が specdojo --version で確認した値が実際の版と異なるため、不具合報告を受けても版を特定できない。動作そのものには影響しない。
2. 完了条件
specdojo --versionがpackage.jsonのversionと一致する。- version を直書きした文字列が
srcから無くなっている。 npm versionで version を上げた後、再ビルドすれば--versionが追従する。- 開発時(
src実行)と npm 導入時(dist実行)の双方で正しい値を返す。 - version の取得元を検証する単体テストがある。
npm run checkが通過している。
3. 作業内容
| No | 作業 | 担当 | 状態 | メモ |
|---|---|---|---|---|
| 1 | package.json から version を読む経路を作る | DEV | done | specdojoPackageRootDir() を使う |
| 2 | src/specdojo.ts の直書きを置き換える | DEV | done | 0.4.0 を削除 |
| 3 | 取得元を検証する単体テストを追加する | DEV | done | 開発時と導入時の双方 |
4. 対応結果
src/package-paths.tsへspecdojoPackageVersion()を追加し、実行中の CLI のpackage.jsonから version を読むようにした。src/specdojo.tsのprogram.version("0.4.0")を置き換え、直書きを廃止した。SPECDOJO_PACKAGE_ROOTは参照しない。この変数は kata の参照先を差し替えるためのもので、実行中の CLI 自身の版とは無関係である。同じ関数を使い回すと、kata を差し替えたときに報告する版まで変わってしまう。そのため module 位置から求める内部関数を分けた。- 単体テストを 2 件追加した。
package.jsonの値と一致すること、SPECDOJO_PACKAGE_ROOTを設定しても版が変わらず kata の解決先だけが変わることを検証する。 node dist/specdojo.js --versionが0.2.0を返し、package.jsonと一致することを確認した。npm run typecheck、npm run lint:ts、npm run check(120 files / 1657 tests)が通過した。- ローカル feature ブランチ
feature/prj-0001/cli-versionで実装し、--no-ffmerge で develop へ統合した。 - 本修正は公開済みの 0.2.0 には含まれない。次の公開で反映される。
5. 関連ドキュメント
- prj-0001:pjr-7vkr-npm-release
src/specdojo.tssrc/package-paths.ts