はじめに
CYBIRDエンジニア Advent Calendar 2016 2日目担当の @keitarou です。
1日目は(@keitarou)さんの開発速度を高めるためのCIと自動化でした。
はい、今日も私です。今日はQiitaに書きたい気分なのでQiitaに書きます。
npmパッケージの健康管理
今回は『npmパッケージの健康管理をしよう』というタイトルで、先日のブログでも少し話をしていた『依存パッケージのアップデート/イシューの検知』
について、少しお話させてもうおうと思います。
健康の定義
簡単にですが、健康とはなんぞってのを勝手に定義しています。
- パッケージの最新のversionを利用することができる。
- セキュリティのissueなどがあった際は、それに気付くことができる。
- 無意識にライセンス違反を侵さない。
全てはエンジニアが楽しく開発できる為!
そんなエデンを求めたエンジニアがいました。
npm
Node.jsやJavaScriptのパッケージの管理を行うアレですが、はやりJavaScript界隈大変盛り上がっておりパッケージのバージョンもホイホイ上がっております。
常に最新のversionを利用できたほうが基本的には便利ですし、不具合も解決できる(はず)。
npm-check-updatesというパッケージがあり、これを利用することでpackage.jsonの内容を確認して最新のversionが存在するかどうかをチェックさせることが出来ます。
https://github.com/tjunnone/npm-check-updates
チームで使えるようにするために
かといって、npm-check-updatesを普段から使うには結構難しいと思います。
そこで、自動化 + 通知 * CI といった仕組みを利用することで障壁を下げてみようにしました。
普段はChatworkを利用しているのでChatworkに通知できるようにnpm-check-updatesをラップしたシステムを作りました。
https://github.com/keitarou/ncu-to-cw
しかし、まぁもう少し良くならんものかと。
課題
npm以外にもパッケージマネージャーも使ってるんだよね・・・
作るのやめよう
そんなパッケージの管理ですが、アレもこれも自分で仕組みを付くのはもう大変
自動でやってくれるSaaSもいくつかあるので、そっちを頼りましょう!
- Gemnasium
- Version Eye
- Greenkeeper
https://gemnasium.com/
https://www.versioneye.com
https://greenkeeper.io/
それぞれ、特徴は違いますが今は何やかんやで、VersionEyeを利用しています。
VersionEye
何と言っても圧倒的なパッケージへの対応。
- Composer (PHP)
- Bundler (Ruby)
- PIP (Python)
- NPM (Node.JS)
- Bower (JavaScript)
- CocoaPods (Objective-C)
- Maven (Java). Try the plugin.
- SBT (Scala). Try the plugin.
- Gradle (Groovy). Try the plugin.
- Leiningen (Clojure)
- Nuget (Microsoft .NET platform)
- Biicode (C/C++)
- Berkshelf (Chef)
こんな感じになります。(これはComposerの場合ですが、他のパッケージマネージャーも同じような感じ)
セキュリティのissueがある場合なんかはこんな感じ。(これはBundler)
と、変に自作するのではなく、SaaSを使い勝手も向上!
締めと今後の展望
と、パッケージを管理するための試行錯誤のお話でした。
と入ってもツールを用意しただけで、まだチーム内で継続的にメンテナンスする習慣は無いです。
とりあえず、自分の手の届くプロジェクトから小さく始めていきたいと思います。頑張りましょう。
おまけ
VersionEyeですが、オープンソース化もされました。
更に選択の幅が広がりました!めでたいです。
https://github.com/versioneye/ops_contrib
最後に
CYBIRDエンジニア Advent Calendar 2016 明日は、 @gotyoooo さん の「Chefを利用して運用者の作業を増やす方法」です。
何の話してくれるんでしょうか。楽しみです。乞うご期待!