9/8 ~ 9/10 RubyKaigi 2016 に参加しました!Vol.2
こんな発表を聞きました
- コードを削除するためのコード:Deletion Driven Development
会議で発表された内容はたくさんありますが、その中で一番面白いテーマだと思ったのは DDD です。 DDDは Deletion Driven Development の略です。
発表者Chris Arcandさんのが言うには、「コードを書いてコードを削除しよう!」という意味だそうです。 開発が順調であれば、コードの量がだんだん増えていきます。同時に、使っていないコードの量も増えていきます。 それら使っていないコードを削除しないと、メモリやシステムなどの管理が複雑になっていきます。
そのため、定期検査と削除が非常に必要だと言われていました。 Chrisさんが開発したGithub/Debrideというプロジェクトが紹介されました。このライブラリを使うと、システムを検査し、使っていないコードを見つけられます。
ruby_parserというgemを使用すると、rubyコードの文法解析ができます。(バッカス・ナウア記法に準拠したものが出力されます) この結果を元にsexp_processorと、debrigeというgemを使用して、メソッドが使用されているかどうかを解析できます。
ツバイソのメンバーはこの発表にとても興味を持ちました。将来、このライブラリをツバイソシステムで使うかもしれません。
- sutureで怖くないリファクタリング:Fearlessly Refactoring Legacy Ruby
会議の二日目、Justin Searlsさんが「Fearlessly Refactoring Legacy Ruby」というテーマで発表しました。 リファクタリングを安全に行うのは難しいことなので、このセッションは多くの参加者から注目されていました。
彼はGithub/sutureというプロジェクトを作りました。このライブラリはいろいろな角度からリファクタリングします。 例えば、プログラマとしてはコードをもっと読みやすく、システムをもっと見通しのよい設計に変えてきたいと思っていますが、変えていくのには時間がかかります。 対してビジネスユーザーは開発スピードをもっと早くして欲しいと思っています。
従来のCharaterization Testing(特性評価)とA/Bテスト、いずれのやり方をとっても、プログラマ、ビジネスユーザーにとって要求を満たせない部分があります。 sutureはDevelopment, Testing, Staging, Productionのいずれも満足させることができるように考えられています。
そこで、彼はsutureにrecord機能をもたせ、古いコードの振る舞いをDBにrecordできるようにしました。 大抵の場合、レガシーコードにはテストがない(or十分でない)ものが多いのですが、このrecordの結果を元にテストを作成することによって、既存の振る舞いを確認することができます。 この後、古いコードを残しつつ新しいコードを作成しますが、両方を同時に実行できる状態にすることができます。
これによって運用中に結果を比較し、もし異なればWarningを挙げて古いコードの結果を優先してくれるため、移行中の状態でこれまで通りの稼働を続けることができます。 十分に検証して問題がなければ、sutureのdelete機能を使用して古いコードを自動的に削除することができます。
このような発表がいっぱいありました。 それを聞いて、新しいRubyのライブラリや、新しいの考え方などいろいろ得ることができました。 会社と自分の技術的な成長のために、イベントなどもっと参加したいと思いました。