LoginSignup
13
6

More than 5 years have passed since last update.

yarn.lockを自動更新してくれるPull Request Bot “Itomaki”

Last updated at Posted at 2017-06-29

一般公開は 2018/5/15 で終了します。

Yarnって便利ですよね。インストールスピードは速いし、Lockファイルがあるのでどの環境でも同じパッケージをインストールできます。
私も毎日何かしらの yarn コマンドを叩いてます。

しかし、一つだけ困ったことがありました。
npmパッケージは毎日すごい勢いで更新されるので、yarn.lock の更新は結構メンドくさい作業です。
できるだけ毎日更新しないと、差分が大きくなって更新がさらにメンドくさくなります :pensive:
(長期間更新しないとさらに悲惨です :fearful:

そんなメンドくさい作業を少しでも和らげようと、会社のエンジニアチームで “Itomaki(いとまき)”というサービスを作りました。

Itomaki Screenshot

“Itomaki”とは

簡単に言うと、yarn upgrade コマンドで更新される yarn.lock ファイルをコミットして、Pull Request を投げてくれるサービスです。

deppbot という似たようなサービスから、アイデアを得ました(deppbot は Gemfile.lock を自動更新してくれるサービスです)。

また、Itomaki と似たようなサービスに Greenkeeperがあります。元々は Greenkeeper を使っていたのですが、yarn に対応していなかったので自作しました。

Greenkeeper も最近 yarn に対応したようですが、Itomaki は package.json は更新せず、yarn.lock のみを更新するという違いがあります。
これは「package.json にあるパッケージのバージョンは自分で管理する」という考え方に基づいています。

例えば、過去に webpack@2.2.2 をインストールして使っているとします。package.jsonyarn.lock ファイルは次のようになっているはずです。

package.json
{
  "devDependencies": {
    "webpack": "^2.2.0"
  }
}
yarn.lock
webpack@^2.2.0:
  version "2.2.0"
  resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.2.0.tgz#09246336b5581c9002353f75bcadb598a648f977"

この場合、Itomaki は yarn.lock のみを更新します。

yarn.lock
webpack@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.2.0.tgz#09246336b5581c9002353f75bcadb598a648f977"
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.1.tgz#2e0457f0abb1ac5df3ab106c69c672f236785f07"

wepback@3 にアップグレードしたい場合は、自分で package.json を更新します。

package.json
{
  "devDependencies": {
-   "webpack": "^2.2.0"
+   "webpack": "^3.0.0"
  }
}

Itomaki は次のように更新してくれます。

yarn.lock
- webpack@^2.2.0:
-   version "2.2.0"
-   resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.2.0.tgz#09246336b5581c9002353f75bcadb598a648f977"
+ webpack@^3.0.0:
+   version "3.0.0"
+   resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.0.0.tgz#ee9bcebf21247f7153cb410168cab45e3a59d4d7"

Tips

個人的には、次のような設定をよく使っています。Travis などのCIでテストを自動化していることが前提です。
こうすれば、本番で使うパッケージは自動でメジャーアップグレードせず、開発で使うパッケージは更新があれば随時更新されます。

package.json
{
  "dependencies": {
    "react": "^15.5.4"
  },
  "devDependencies": {
    "mocha": "*"
  }
}

使い方

Itomaki のトップページから GitHub アカウントでログインします。

ログイン後、ダッシュボードでサービスを受けたいリポジトリを選択します。
package.json, yarn.lock ファイルが存在するリポジトリを選択してください)

数分後、Itomaki から選択したリポジトリに Pull Request が投げられます。

定期的には、2日に1回のペースで Pull Request が投げられます。
(すでに Itomaki の Pull Request がある場合は、投げられません)

実例

会社で使っている公開 npm パッケージ eslint-config-interfirm での使用例です。

Itomaki Pull Request

このパッケージの他にも、会社のリポジトリ(private もあり)や個人の趣味プロジェクトでガンガン使用しています。

興味があれば、ぜひ使ってみてください! :smile: :pray:

13
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
6