Casual Developers Note

エンジニアやデザイナー向けの技術情報・英語学習情報・海外留学情報・海外旅行情報を提供中。世界を旅して人生を楽しもう。

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • お問い合わせ
現在の場所:ホーム / アーカイブsemantic-versioning

2019年2月15日 By KD コメントを書く

NPMモジュールを自動的にセマンティック・バージョニングで管理する方法(semantic-release編)

NPMモジュールを自動的にセマンティック・バージョニングで管理する方法(semantic-release編)

NPMモジュールを自動的にセマンティック・バージョニングで管理するためのモジュール「semantic-release」の導入方法を紹介します。

はじめに

NPMモジュールをバージョン管理する場合、セマンティック・バージョニングに従うのが一般的です。これを手動でやろうとすると、リリースの運用ルールを自分で決めて、NPMコマンドを使ってバージョンを上げてNPMに公開することになります。手動というのはミスも起きますし、そもそも面倒です。そこで、コミットメッセージのルールを決めることで、コミットするだけで自動的にセマンティック・バージョニングでバージョンを上げてNPMに公開してくれるモジュールが「semantic-release」です。今回は、「semantic-release」の導入方法を紹介します。

また、NPMモジュールを自作で作成する方法を知りたい人は以前の記事を参照してください。

セマンティック・バージョニングとは?

セマンティック・バージョニング(Semantic Versioning)とは、仕様が公開されており、ほとんどのNPMモジュールで採用されているバージョン管理の方法です。ざっくり言うと、バージョンを「X.Y.Z」とすると、「X」はMajor version(ブレイキングチェンジがある場合に上げる)、「Y」はMinor version(機能追加がある場合に上げる)、「Z」はPatch version(バグフィックスの場合に上げる)としてバージョンを定義して管理する方法です。

semantic-releaseとは?

semantic-releaseとは、コミットメッセージの内容から判断して、自動的に適切にバージョン(セマンティック・バージョニングに従う)を上げてNPMへ公開するためのモジュールです。これを導入すれば、コミットメッセージだけでNPMモジュールを管理できるようになります。コミットメッセージのルールはカスタマイズできますが、デフォルトではAngular Commit Message Conventionsに従う形になり、以下のようになります。

  • feat: 新しい機能の追加(Minor versionを上げる)
  • fix: バグフィックス(Patch versionを上げる)
  • docs: ドキュメントだけ変更
  • style: フォーマットの変更などのソースコードに影響を与えない変更
  • refactor: バグフィックスや機能追加を伴わないソースコードの変更
  • perf: パフォーマンス改善のためのソースコードの変更
  • test: 不足しているテストコードの追加や既存のテストコードの修正
  • chore: ビルドプロセスや補助的なツールやライブラリの変更

自作のNPMモジュールにsemantic-releaseを適用する

それでは、既存の自作のNPMモジュールのプロジェクトに適用してみましょう。ビルドツールはTravis CI、パッケージ管理はYarnを使うことにします。(代わりにビルドツールとしてCircle CI、パッケージ管理ツールとしてNPMを使うことももちろんできます。)

semantic-releaseをセットアップする

まずは、公式ドキュメント通りに、CLIを入れて、セットアップします。

$ yarn global add semantic-release-cli
$ cd my-npm-module
$ semantic-release-cli setup
? What is your npm registry? https://registry.npmjs.org/
? What is your npm username? you
? What is your npm password? [hidden]
? What is your GitHub username? you
? What is your GitHub password? [hidden]
? What CI are you using? Travis CI
Please refer to https://github.com/semantic-release/semantic-release/blob/master/docs/recipes/travis.md to configure your .travis.yml file.
$ cat package.json
{
...
  "version": "0.0.0-development",
...
  "repository": "https://github.com/you/my-npm-module.git",
...
  "devDependencies": {
...
    "semantic-release": "^15.13.3"
  },
...
  "scripts": {
...
    "semantic-release": "semantic-release"
  },
...
}

バージョンにはデフォルトで「0.0.0-development」と書かれますが、semantic-releaseではpackage.jsonのversionは使わず、NPM側のバージョンが使われます。

Travis CI用の設定ファイルを設定する

「.travis.yml」に以下のように設定します。テストを実行し、テストが成功してかつバージョンが上がっている場合にNPMに公開させる設定です。

language: node_js
node_js:
  - 10
  - 8

jobs:
  include:
    - stage: release
      node_js: lts/*
      deploy:
        provider: script
        skip_cleanup: true
        script:
          - yarn semantic-release

Travis CI用の設定方法は公式ドキュメントを参照してください。

commitizenを設定する

コミットメッセージのルールが決まっていても手動で入力するとミスがおきます。なので、正しくコミットメッセージを入力するために「commitizen」の「cz-cli」のモジュールを使います。ついでに、チェンジログを自動で追加してくれる「cz-conventional-changelog」のモジュールも導入します。

$ yarn add --dev commitizen
$ yarn commitizen init cz-conventional-changelog --yarn --dev --exact
$ cat package.json
{
...
  "devDependencies": {
...
    "cz-conventional-changelog": "2.1.0",
  },
...
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  }
}
$ vi package.json
{
...
  "scripts": {
    "commit": "git-cz",
...
  },
...
}

これで設定は完了です。グローバルに導入してもよいですが、全てのプロジェクトに適用することはあまりないと思うので、モジュール内に導入しています。

使い方

最後に、使ってみましょう。今回は何かバグフィックスをしたと仮定してコミットしてみます。

$ git add .
$ yarn commit
...
? Select the type of change that you're committing: (Use arrow keys)
  feat:     A new feature 
❯ fix:      A bug fix 
  docs:     Documentation only changes 
  style:    Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc) 
  refactor: A code change that neither fixes a bug nor adds a feature 
  perf:     A code change that improves performance 
  test:     Adding missing tests or correcting existing tests 
(Move up and down to reveal more choices)
...
? Select the type of change that you're committing: fix:       A bug fix
? What is the scope of this change (e.g. component or file name)? (press enter to skip)
 
? Write a short, imperative tense description of the change:
 Fix any bugs
? Provide a longer description of the change: (press enter to skip)
 
? Are there any breaking changes? No
? Does this change affect any open issues? No

[master 043b0c2] fix: Fix any bugs
$ git push origin master

これでTravis CIでテストが成功すれば、Patch versionが上がり、NPMに公開されます。

最後に

いかがでしたか?これで自作のNPMモジュールをsemantic-releaseを使うことで、セマンティック・バージョニングでの管理が自動的にできるようになったと思います。それでは。

環境

  • yarn: 1.13.0
  • semantic-release: 15.13.3
  • commitizen: 3.0.5
  • cz-conventional-changelog: 2.1.0

カテゴリ : 技術 Tips & Tutorials タグ : npm, semantic-release, semantic-versioning

ブログ更新情報や海外の関連情報などを配信する無料メルマガ

Sponsored Links

About Author

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。

https://casualdevelopers.com/

最近の投稿

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    2019年10月30日
  • BashからZshに移行する方法(Mac編)

    BashからZshに移行する方法(Mac編)

    2019年10月21日
  • Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    2019年9月30日

カテゴリ

  • 技術 Tips & Tutorials (100)
  • 技術塾 (6)
  • ライフハック (26)
  • 海外留学 (12)
  • 英語学習 (3)
  • コラム (6)

アーカイブ

最高の学習のために

人気記事ランキング

  • MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
    MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
  • Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
    Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
  • SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
    SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
  • Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
    Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
  • [tips][perl] Perlで文字コードをいい感じに処理する方法
    [tips][perl] Perlで文字コードをいい感じに処理する方法
  • 爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
    爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
  • FacebookログインのJavascriptのSDKをサクッと試す方法
    FacebookログインのJavascriptのSDKをサクッと試す方法
  • PythonでWebスクレイピング入門(Scrapy+Selenium編)
    PythonでWebスクレイピング入門(Scrapy+Selenium編)
  • Amazon EC2インスタンスにSSHできなくなった時の対処法
    Amazon EC2インスタンスにSSHできなくなった時の対処法
  • [tips][bat] バッチで明日の日付を計算する。
    [tips][bat] バッチで明日の日付を計算する。

Bitcoin寄付 / BTC Donation

Bitcoinを寄付しよう

BTC
Select Payment Method
Personal Info

Donation Total: BTC 0.0010

このブログの運営のためにBitcoinでの寄付を募集しています。お気持ち程度の寄付を頂けると管理者の励みになります。

Bitcoin寄付について知りたい方はこちらの記事へ

ビットコイン取引ならここ

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • サイトマップ
  • タグ一覧
  • プライバシーポリシー
  • お問い合わせ

Copyright © 2023 KD - Casual Developers Notes