alpha ディストリビューションタグでのリリーススクリプトを追加

basecamp/lexxy

yarn release がデフォルトで npm publish を実行し、タグを付けないためプリリリースが latest として扱われてしまう問題を解消するため、release:alpha スクリプトが追加されました。これによりアルファ版は alpha ディストリビューションタグで公開され、安定版の latest タグが保護されます。

背景

現在、yarn release はタグ指定なしで yarn publish を呼び出すため、npm が自動的に公開されたバージョンを latest タグに割り当てています。実際の dist‑tags は次の通りです。

latest:  0.9.19-alpha.1          ← a prerelease is the default install
canary:  0.9.19-alpha.autocapitalize
beta:    0.9.6-beta.bc0
next:    0.9.15-beta.next-0

結果としてアルファ版が標準インストールの対象となり、利用者に意図しないプレリリースが配布されます。

さらに、npm install @37signals/lexxy0.9.19-alpha.1 を取得し、安定版が隠れる原因となります。将来的に新たなアルファリリースが latest を上書きし続けるリスクがあります。

したがって、アルファ版を latest から分離し、安定版のみが標準インストールされる仕組みが必要です。

技術的な変更

package.jsonscripts セクションに新しいエントリ release:alpha が追加されました。release スクリプトはそのまま残し、release:alpha には --tag alpha オプションが付与されています。

@@ -52,7 +52,8 @@
     "test:browser:debug": "npx playwright test --config test/browser/playwright.config.js --debug",
     "prerelease": "yarn build:npm",
-    "release": "yarn build:npm && yarn publish"
+    "release": "yarn build:npm && yarn publish",
+    "release:alpha": "yarn build:npm && yarn publish --tag alpha"
   },
   "dependencies": {
     "@lexical/clipboard": "^0.44.0",

yarn publish --tag alpha は Yarn Classic 1.22 でもバージョン番号のプロンプトや git タグ作成を従来通り行い、npm に alpha タグを付与します。latest タグには影響を与えません。その結果、npm install @37signals/lexxylatest(安定版)を、npm install @37signals/lexxy@alpha はアルファ版を取得できます。

この変更は既存の release スクリプトを変更せず、追加のスクリプトだけでタグ管理を分離できる点が特徴です。

設計判断

今回の実装は スクリプトレベルでのタグ指定 というシンプルな設計選択です。代替案として release スクリプトにタグ引数を組み込む方法や、自動的に npm dist-tag を調整するロジックの追加も検討されましたが、既存 CI/CD フローやローカル開発手順を崩さず導入できる点が判断基準でした。

release:alpha の導入は後方互換性を保ちます。既存の release スクリプトはそのまま使用でき、新しいスクリプトはアルファ版の公開専用としてオプション的に提供されます。これによりタグ混乱リスクが低減し、安定版とプレビュー版の切り分けが明確になります。

以上の設計判断により、タグ管理の明確化とリリースフローの安全性が同時に実現されています。

まとめ

release:alpha の追加により、アルファプレリリースが latest タグを汚染せずに公開できるようになりました。yarn release:alpha を実行すれば alpha タグ付きで npm に公開され、npm install @37signals/lexxy は安定版、npm install @37signals/lexxy@alpha はアルファ版を取得できます。既存フローはそのまま維持され、安定版とプレビュー版の切り分けが容易になります。

記事メタデータ

Generated by:
gpt-oss-120b for DiffDaily
LLM Trace:
62c63fc9

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
リトライ後承認
Review Count:
2回 (改善を経て承認)
Reviewed by:
gpt-oss-120b for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文→背景→技術的変更→設計判断(任意)→まとめの3部構成が明確に存在し、各要素が適切に記述されています。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

コードブロックは `json:package.json` という正しいファイル名付きシンタックスハイライト形式で記述され、PRリンクも正しいGitHubリンク記法で記載されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

対象はエンジニアであり、専門用語中心の説明で初心者向けの余計な解説はありません。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションは総論→各論→結論の流れを持ち、段落は1文がトピックセンテンスとなり、1段落1トピックで6文未満の長さです。空行で区切られています。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事中のコードブロックは提供されたDiffと完全に一致しており、ファイル名・行番号・変更内容すべてが正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

使用されている技術用語(dist-tag、alpha、release、yarn、npm 等)はPRで使用されたものと一致し、誤用はありません。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

技術的な説明はPRの内容と整合しており、因果関係も論理的です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事の全ての主張はPRのタイトル、説明、Diffで裏付けられており、推測や捏造はありません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

バージョン番号やタグ名などの数値・固有名詞はPRに記載された通り正確です。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事タイトルはPRタイトルの意味を適切に日本語化しており、内容と一致しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

LTSやリリース日程等、PRに記載されていない外部知識は一切含まれていません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

「将来的に」や「現在」等の時間表現はPRの記述と矛盾なく使用されています。