一般公開は 2018/5/15 で終了します。
Yarnって便利ですよね。インストールスピードは速いし、Lockファイルがあるのでどの環境でも同じパッケージをインストールできます。
私も毎日何かしらの yarn コマンドを叩いてます。
しかし、一つだけ困ったことがありました。
npmパッケージは毎日すごい勢いで更新されるので、yarn.lock の更新は結構メンドくさい作業です。
できるだけ毎日更新しないと、差分が大きくなって更新がさらにメンドくさくなります
。
(長期間更新しないとさらに悲惨です
)
そんなメンドくさい作業を少しでも和らげようと、会社のエンジニアチームで “Itomaki(いとまき)”というサービスを作りました。
“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.json と yarn.lock ファイルは次のようになっているはずです。
{
"devDependencies": {
"webpack": "^2.2.0"
}
}
webpack@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.2.0.tgz#09246336b5581c9002353f75bcadb598a648f977"
この場合、Itomaki は 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 を更新します。
{
"devDependencies": {
- "webpack": "^2.2.0"
+ "webpack": "^3.0.0"
}
}
Itomaki は次のように更新してくれます。
- 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でテストを自動化していることが前提です。
こうすれば、本番で使うパッケージは自動でメジャーアップグレードせず、開発で使うパッケージは更新があれば随時更新されます。
{
"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 での使用例です。
このパッケージの他にも、会社のリポジトリ(private もあり)や個人の趣味プロジェクトでガンガン使用しています。
興味があれば、ぜひ使ってみてください!
![]()

