SQL入門書として「H2対応」したかった理由


久しぶりに「タッチ」を見てドキドキしました

GW前半2日目、皆様いかがお過ごしでしょうか。

「引きこもり系エンジニア」を自称する私は、せっかく外出したのにすぐ帰ってきてしまい、PCとテレビの前で平日と変わらないお仕事ライフです。


テレビと言えば先日、「タッチ」が再放送していました。みなみちゃん、いつ見ても可愛いわぁ...*1。そして妄想をかきたてまくる主題歌に萌え殺されまくったあの日々。


ということで*2、今回は、先日のブログで紹介した『スッキリわかる SQL 入門』で公式に対応をうたった、我ら開発者の強い味方「H2 Database」を紹介していこうと思います。

H2 Databaseとは

H2 Databaseは、Javaだけで記述されているオープンソースRDBMSです。もともとHSQLDBを作っていたトーマス・ミューラーさん*3が、サラから作り直したものです。

「動作が超速い」という特長は、まぁ確かにスゴいんですが、個人的には比較的どうでもよくって。

このDBのイイところは、

セットアップ不要。
「jarファイルをCLASSPATHにぶち込むだけで、すぐに使える」お手軽さ。

商用RDBMSに比べれば遙かに環境構築がラクMySQLPostgreSQLですが、「ファイルコピー。以上。」のH2の手軽さになれてしまうと、なかなか手放せません*4

特に単体テストや小さな実験をしたい場合に大活躍です。Java開発者の方は、覚えておいて損はありません。

そんなH2にも公式対応

今回発売になった拙著『スッキリわかるSQL入門』では、H2を含む以下の8つのDBMSに対応した解説を行っています。

*5


詳しく調査はしていないのですが、おそらく拙著は「H2対応をうたった国内初のSQL入門書」じゃないかと思います。違ってたらゴメンナサイ。

H2に対応しようと考えた理由

しかし、「そろそろSQL入門書でもH2を扱わなければならない時代だな」と思い、対応したのには明確な理由があります。

これからますます「開発時と本番で違うDBMSを使う」ことが増える

と日々感じるからです。


用心深いプロジェクトでは、開発時・単体テスト時も本番と同じ製品を使うかもしれませんが、セットアップが必要なDBMSというのは、自動化単体テスト継続的インテグレーションとかなり相性が悪いと感じます。


いや、できないことはないんですけどね...。

やったことがある方は、思い出すだけでゲンナリされると思いますが...*6


私自身、普段は「開発中と単体テスト時はH2*7、統合テスト以降は本番DBMS」みたいなやりかたをすることが多いですし、周囲でもそのような話をよく耳にします。

本番と違うDBMSを使うなんて信じられない!
統合テストでバグが噴出したらどうするの!

という方もいらっしゃるかもしれません。

ですが、統合テストでDBMSの違いが発見されたら、修正してまた自動化単体テストを走らせるという方法でも十分対応できる分野もあるでしょう。また「本番DBMSにこだわり、開発時のアジャイルなフィードバックサイクルを阻害すること」のほうが、よっぽど開発全体に悪影響を及ぼすこともあります。

開発現場が変わるなら、入門書も変わらなければならない

つい一昔まで、データベースがからむクラスのテストというと、

・テストサーバーに構築した本番用DBMSを使う(面倒)
・「sqlite」のような簡易組み込みDBMSを使う(本番DBMSと違いすぎてテストにならん)

の嬉しくない二択を迫られていました*8

そこに登場したH2 Databaseのような「わりと本格的な組み込みRDBMS*9」は、

・本番DBMSとそこそこ似てて、かつ、組み込みで動くものを使う

という新しい開発方法を可能にする道具立てだと思います。


開発の機敏性が求められる昨今、今後、ますますそのような「CIや試験と相性が良い道具の活用」が進み、なかば常識のようなものになっていくかもしれません*10


Webやゲーム系の開発企業では「既に常識ですが、なにか。」かもしれません。


そういう、イマドキの開発現場に配属になる新入社員の方にも、安心して欲しいじゃないですか。

ただでさえ緊張する、初めての開発現場・初めてのプロジェクト。
研修では聞いたこともないような専門用語が当たり前のように飛び交う中で、先輩に

「うち、開発時はH2だから。」

って言われたとき、オドオドせず、

「えぇ、少しですが知ってます。あだち充のマンガですよね?(にこ)」

と返せるぐらいに。





スッキリわかる SQL 入門 ドリル215問付き! (スッキリシリーズ)

スッキリわかる SQL 入門 ドリル215問付き! (スッキリシリーズ)

*1:一人称が「みなみ」ってあたりにやや時代を感じたけど。ちなみに、俺はナウシカではなくシータ派。

*2:どういうことで?という方は人生勉強が足りてないので、「あだち充」をWikipediaで調べてレポート提出。

*3:ブンデスリーガで活躍しながらオープンソース活動とかしてんのかよ!」とか勘違いしたあなた。そんなリア充、そうそういませんって。

*4:同様に「組み込み」で手軽に使えるものとして、Apache Derbyとsqliteがありますが、んーまー...ノーコメントで

*5:えっ? AccessSybase?Bento?Approach?桐?

*6:「XFD、パターン赤ッ!」「クッ...。総員っ、被害状況を報告!」「艦長っ、DBテストサーバー、先週末の停電から停止したままですッ!」とか

*7:モデル系はmockしますが、DAO系はH2で試験してます

*8:「DB関係はテストしにくいから、単体はやらなくてもいいことにする」というオトナな選択肢を選ぶプロジェクトが多いことも、先生はお見通しよ。

*9:まぁFULL JOINできないとかはありますが

*10:超レガシーでプロプライエタリでガチガチな基幹系業務システムの開発現場でも、今やSubversionが普通に使われるようになったのですから