プログラマでありたい

おっさんになっても、プログラマでありつづけたい

自動化した仕組みのリファクタリングも大事 〜DevLove関西主催の自動化入門講座に行って来ました #DevKan


 DevLove関西主催の自動化入門講座に参加して来ました。最近、自動化といったらChefでしょうという世界にどっぷりとハマっているので、久々に聞くアプリケーションレイヤーでの自動化の話は楽しかったです。特に印象的なのは、@kazuhito_mさんのテンションの高さ。経験からくる非常に含蓄のあることを連発していたのですが、家に帰ってから思い出すとテンションの高さだけ頭に残っていました。スライドみて復習させて頂きます。
 そんな中で、発表者の方々が口を揃えて言っていた自動化のアンチパターンが気になりました。それは、「自動化することでブラックボックス化し、他の人から解らなくなる」という点です。私も心当たりがありすぎて、うなずく事しきりでした。

 
 自動化を定着させる上で難しい点は、誰かが一度自動化すると他の人は何もしなくても良いということです。つまり、ノウハウの伝授が難しいのです。別のプロジェクトで自動化の必要があったとしても、同じ仕組をそのまま持っていくか以前やった人がするのが圧倒的に効率的に実現出来ます。そして、自動化のノウハウの寡占化&ロストテクノロジーが起こります。事実、私も幾つかのプロジェクトで自動化をやって来ましたが、何故か自動化の設定しているのいつも自分だけだよなぁという事態に陥ったことがあります。


 では、どうしたら良いのでしょうか?セミナーの後半がグループディスカッションだったので、この辺りのことを話していて解決への方向性が見えて来ました。それは、自動化した仕組みをリファクタリングし続けるということです。例えば、Jenkinsを使って自動化しているのであれば、その自動化の仕組み(プラグインやジョブの構成)自体を定期的に見直して最適化し続けるというプロセスを追加するのはどうでしょう?そして、それを個人のタスクではなくチームのタスクとして定義すれば、少なくともブラックボックス化とロストテクノロジーは起きないのではないでしょうか?またリファクタリングの対象はツールやプログラムだけでなく、プロセス自体ということも多々あると思います。
 私が最初に使ったCIツールは、Continuumでした。当時は機能が足りずにプラグインも充実していませんでした。その後、Hudson(現Jenkins)が出てきて試してみたら、この機能が欲しかったというのが沢山あり飛びつきました。しかし、新規のプロジェクトはHudson化したものの、旧来のプロジェクトはContinuumのままでした。今考えると、多少コストが掛かっても継続的に変更し続ける方が、トータルでのコストが下がっていただろうなぁと思います。


 自動化の仕組み自体をリファクタリングを続けるというのは中々面白い考え方だと思います。もう少し考えてみて、方法論に落としこんでいきたいです。


See Also:
テストのデータ生成は、FixtureよりFactoryモデル
Web画面の自動テストの導入に失敗する理由とその対策
Selenium2.0 WebDriverで複数ブラウザのUIテスト もう一度、Selenium再入門
JenkinsとSelenium WebDriverでUI層のテストも自動化&永続化する


参照:
今日から始める自動化〜自動化入門講座〜 - DevLOVE関西 | Doorkeeper
自動化事始め
仁斤曰く 「”手間業”蔓延り易く、 “楽”成り難し」