現代ソフトウェア開発の三本柱

2011-12-01
かなり古い記事です。現在も有効な内容であるかどうか分かりませんのでご注意ください。

しばらくTDDBCで聞いたネタを雑感を交えつつ復習的にちょっとずつ書いて行ってみようと思う。
そういうわけでぐぐれば他で書いてあること多めです。あと網羅的には書かないです。gdgdです。

三本柱とは

和田さんが考える三本柱は以下の通り。

  • バージョン管理
  • テスティング
  • 自動化

バージョン管理

TDDのイベントだったので深くつっこみしなかったけど和田さんの考えでは最重要とのこと。
テストや自動化はなくてもなんとかなるが、バージョン管理はないと死亡確定。
「セーブなしでRPGクリアとか無理ゲーじゃないですか」みたいなことを言っていた覚えが。

雑感

未だそんな無理ゲーに挑んでる現場も少なくないような気がします。

ところでこれは後々の懇親会で聞いたことだけど、Subversion等を経ずにGitを使う分散バージョン管理ネイティブが出て来始めているようだ。
個人的には初めて分散バージョン管理システムを試したときは頭がこんがらがる覚えがあったので最初からはハードル高いんじゃないかと思っていたが、最初からいけば案外抵抗なく受け入れられるものなんだろうかね。

じゃあもうみんな最初からGitで!と言いたいところだけどGUIクライアントの出来がSubversionにくらべてとっつきにくいためそうもいかないらしい。
TortoiseSVN偉大すぎるぜ。

ちなみにSCMBCってイベントもあるそうだ。
こちらもいつか参加してみたい。深刻なGit力不足なので。

テスティング

自分が書くコードに対してユニットテストを書く。
今日はここを掘り下げる。

雑感

掘り下げ具合の復習は後日のエントリで。
書く書く詐欺になったらごめんなさい。

自動化

繰り返し作業は機械にやらせて、人間は考えたり話したり、人間にしかできないことをやるべき。
何が繰り返し作業に当たるかというとビルドやテスト、デプロイ等々。

テストで言うとCIツールがこの役割を担う。
最近ではJenkinsが圧倒的にシェアを取っているようだ。

雑感

Jenkinsさんはコンパイル言語での開発の場合、単にビルドを壊すコミットを排除できると言うだけでもだいぶ価値があるみたい。

カバレッジが全然足りてないテストしかなくても効果はある。
変更していたクラスのテストが通ったのでコミットしたけど、それに依存するクラスのテストや受け入れテストを壊してしまっていたりといったことが分かったりするので。

コーディング中はGuard等のファイル変更を検知して何かを実行してくれるようなツールを使うとテンポが良くなる。
これもちょっとした自動化。
自分はGuard::RSpecのほかGuard::PowやGuard::Livereload、Guard::CoffeeScriptなどをよく使っている。

あとソフトウェア開発からはちょっとズレるかもしれないけど、サーバー構築ではPuppetやChefなどの自動化ツールがあると1台構築するのも10台構築するのも同じですよ、な領域に入っていける。

三脚椅子のメタファ

「三本柱」と言うと一本くらいなくても平気な感じがするので最後に「三脚椅子」のメタファを。

雑感

脚が一本もなければ帰って安定するんじゃとか思ったことは内緒。
まあ実際一本もない現場はアドレナリンジャンキー達がマンパワーのごり押しで回す阿鼻叫喚の世界だけどね!

Profile

フルスタック気味のフリーランスプログラマー。

どちらかと言うと得意はインフラ構築とサーバーサイドプログラミングですが、フロントエンドもぼちぼちやっています。

最近の興味範囲はWordPress、AWS、サーバーレス、UIデザイン。

愛車はセロー。カメラはペンタックス。旅好きです。横浜在住。