rubyでrakeの外部コマンドが失敗した時のエラーハンドリング

webpackerを使用していて、webpacker installって出ているのに、installは失敗していた。

これはムカつくからpullreq出してやろうと思ったら、すでにあった。

さすがだ。

fail hard when webpacker:install ./bin/yarn fails by sealocal · Pull Request #149 · rails/webpacker · GitHub

んで、実際のエラーハンドリング方法が思いつかなったので、これは参考になりました。

run './bin/yarn add webpack webpack-merge path-complete-extname babel-loader babel-core babel-preset-env coffee-loader coffee-script compression-webpack-plugin rails-erb-loader glob'
unless $?.success?
  puts set_color 'Failed to install webpack!', :red
  exit $?.exitstatus
end

$?はprocessの実行結果がいます。

これを見て、成功したかどうかを判定して、エラー内容を記述していました。

芸がこまかい。

そして、$?自体初めて知りました。

スレッドで最後の実行結果が入っているのですね。

$?自体がUNIXの実行結果の可否を調べるものなので、それと同じ動きをしていたってことですね。

% cat foo
=>cat: foo: No such file or directory

% echo $?
=>1

この辺はUNIX/Linux使いで、シェルとか作ってる人は分かるのでしょうが、自分は使ってないので、思いつかなかったので、これをきっかけに覚えておく。

variable $? (Ruby 2.4.0)

以上です。