データベースのスキーマレス化も静的型付けを復権させるかも

最近Google App Engineのプログラムを組んでて、そうすると当然データベースはスキーマレスです。データベースの設定としてテーブルやフィールドを定義するという作業は必要ありません。そして、JDOなどを使ってデータの定義としてJavaのクラスを書いたりするわけです。
で、これを、まったく苦のない当たり前の作業としてやっています。


ORマッピングのときは、データベースのスキーマJavaのクラスを定義する必要があり、そのどちらかが自動的に同期されるにしても、同期させるときにやっぱりどうしても気持ち悪さがあったものでした。
たとえばデータベースのスキーマからJavaのクラスを自動生成する場合は、どのようなJavaのクラスになるかを考えながらデータベースのスキーマを考える必要がありました。必要はなかったかもしれないけど、データベースのスキーマを考えるときに自然にJavaのクラスを考えてしまいます。Javaのクラスからデータベースのスキーマを定義するときには、その向こうに見えるデータベースの型としてJavaの型を指定している部分がありました。
でもGoogle App Engineでの場合には、Javaのクラスを定義したらそれがそのまま透過的に格納されます。どのように実際に格納されているかを考える必要はないし、Protocol Buffersを使ってるらしいということくらいしか知りません。


ORマッピングのときにあった静的型付けのデメリットは、スキーマレスのデータベースの場合には なくなるということです。


それでは、データベースがスキーマレスだったときの静的型付けのメリット。
データベースに格納する情報が変更されていくとはいえ、アプリケーションの同じバージョンの中では一貫性がある必要があります。これまでは、データベースの側で一貫性を保てたのですが、データベースがスキーマレスの場合はプログラム側で一貫性を確保することになります。
そのとき、たとえばデータベースにアクセスするためのメソッドを用意して必ずそこを経由するようにするといった、プログラマの努力によるものよりも、プログラム言語の機能を使えたほうが楽です。


データベースがスキーマレスの場合には、静的に型を指定することでプログラム側でデータの一貫性が保ちやすくなります。


静的型付けの時代がくる!とかJavaの時代再び!とかいうことはたぶんなくて、もういろんなタイプの言語がいろいろと使われていくんだろうけど、とりあえずメインストリームにおいてJava使うメリットがでてきつつあるので、安心してます。