Nwht0xn1

npmの依存先の依存先を参照していたらバージョンが変わってミスった話Created on 2016-08-03 by r7kamura

WikiHubでの開発中にミスった話です。

何もしてないのにCIが壊れた

CSSを1行ほど変更してgit pushしたところ、CIが突然Failし始めた。おかしい。特に困ってなかったので適当に数日放置してみたが、rebuildしても直らない。

image

開発者の様子

原因を見にいく

cal-heatmap辺りが何かおかしい。

Failures:

  1) GET /articles without any article 
     Failure/Error: //= require "cal-heatmap/node_modules/d3/d3.min.js"

     ActionView::Template::Error:
       couldn't find file 'cal-heatmap/node_modules/d3/d3.min.js' with type 'application/javascript'

周辺のコード

cal-heatmapがd3.jsに依存していることから、cal-heatmapに含まれていたd3.jsを無理矢理requireしている……

//= require "cal-heatmap/node_modules/d3/d3.min.js"
//= require "cal-heatmap"

原因

cal-heatmap/node_modules/d3 のversionが変わって、./d3.min.js はそこには存在しなくなっていた。この部分のバージョンは容易に変わり得るので、元々こういう風に参照するのは良くなかった。

一次対応

とりあえずアプリの依存関係に d3.js への依存を定義してバージョンを固定、直下の ./node_modules/d3 を参照するように切り替えて対応した。

再発防止策

WebpackかBrowserifyに移行しましょう……