読者です 読者をやめる 読者になる 読者になる

ひながたり。

writing practice as practice flight

尖ったソフトウェア(あるいは設計思想)

コンピュータ

以前の記事*1で話題にしたバージョン管理システムのGitをちょこちょこ習得しているんだけど、これまで使ってきたSubversionとの違いに戸惑う場面が多々ある。同じバージョン管理をするにしても、こんなにも違いがあるんだなあと、この界隈の文化の多様性に驚くことしきり。

 

Gitはコミットの取り消しや修正が容易で、

git reset --hard HEAD^

と一行打ち込めば、直前のコミットを跡形も無く消し去ることができる。このほかにも余計なブランチを根本から刈り取ることも簡単にできて、コミットの歴史を綺麗に整形することが可能。でもこれは裏を返せば、歴史の取り扱いに相当慣れていないと、必要な歴史まで削ってしまうことにもなりかねないということ。なぜいまこの場所に立っているのかという、過去から現在へと続いてきた文脈をロストしてしまう危険性をはらんでいるのである。要は上級者向けのアドバンス仕様。

 

一方のSubversionでは、記録できるものはなんでも記録しておこうというスタンスで、コミットの歴史はかなり厳重に守られている。コミットの取り消しはできるんだけど、その取り消したという事実も歴史として残ってしまう。すなわち、何もなかったことにはできない。厳密には一応できなくもないよと公式サイト*2にはあるけれど、かなり後ろ向きな記述になっている。逆に言えば、歴史改変のうっかりミスを(ほぼ)間違いなく回避できるので、こちらのほうが初心者にとっては優しい。

 

GitとSubversionにここまで違いが生じるのも、そこに明確な思想・哲学があってこそ。ただ何となく、ではなく、そうすべきだからやったという強固な意志を感じとれる。それこそが尖ったソフトウェアの設計というものでしょう。逆にこうした尖りが無いのが一番良くないと、自戒を込めて書いてみる。なんでもうまくやろうとして、どっちつかずになってしまうこと、言い換えれば選択と集中をしないこと。ソフトウェアに限らず、「結局君の仕事は何がしたかったの? どうしてそれをしたの?」と根本の部分を問われることのほうが、ときにはやった内容についてうまくないねと批判されることよりも、きついときがあります。

 

入門Git

入門Git

 

 

入門Subversion―Windows/Linux対応

入門Subversion―Windows/Linux対応

 

 

お越しくださりありがとうございます。このブログについて