This document written: 2013-06-26 .. 2014-02-19
Android での SQLite の使い方は、Google 等で調べればいくつかの日本語情報は見つかるが、それを参考にしようとすると「却ってわかり辛くなる」だけだった。結局、巡り巡って、公式サイトの英語情報が過不足なく一番わかり易かった。最初から本家の情報を直接参照していれば、こういった苦労をせずに済んだのにと思う。現在進行形でどんどん更新されている Android はこういった羽目になることが多いので、本家の第一次情報以外には踊らされないように注意したい。雑誌ライターが書いたような解説本だとか、解説サイトの解説だとか、本家のものに尾鰭を付けているせいで、却って情報がますます濁って理解を妨げるような情報に仕上がっているのがオチみたいだ。
とはいえ、本家の解説も、学習者に対する配慮が行き届いていると言えるわけではない。チュートリアルで「コントラクト(Contract)・クラス」というものがいきなり登場して、かなり驚かされた。結構最近になって更新されたようで、英語で情報を検索しても、ほとんどちゃんとした形の情報が少ない。英語の情報でも、Android Developers での説明をそのまま引用しているだけ(要するに「受け売り」しているだけ)だったりする。つまり、英語圏の人でも、現時点ではあまりよくわかっている人はいないようである。
この「コントラクト」なるもの、チュートリアルでは「定数を共有するために都合がいいんだよ」と言っているのだが、それだけ聞くと、Java の基本思想であるオブジェクト指向からすると、「インターフェイス(Interface)じゃだめなの?」と思って、しばらく悩んでしまった。で、Web 上の情報では(英語でも日本語でも)、コントラクトのそういう用途面だけが受け売りで解説してあって、ちゃんと「コントラクトとはこういうものである」という位置付けについて明快に解説してあるものが見あたらない。たまたま IBM のサイトで「AOPを使いコントラクトを実施する」なるページを見つけ、初めて、「AOP」というキーワードと「コントラクト」が関係しているらしいとわかった。AOP(アスペクト指向プログラミング)というのは、OOP(オブジェクト指向プログラミング)の次のプログラミング・パラダイムとして、概要だけは耳にしていたけど、OOP の申し子のような Java で出喰わすとは思わなかったので、これは意外だった。しかし、AOP という目的下で、コントラクトの用途を捉えれば、明快にやりたいことが見えたわけである。インターフェイスは OOP における概念だが、コントラクトは AOP における概念である。確かに、違う。
インターフェイスは OOP において、派生クラスが共通して保有するカーネル(核・ベン図の重なり合う部分)となる要素であり、抽象的・概念的なものである。コントラクトは AOP という、各クラスを水平横断的にまたがって存在する、共通の設定値のようなものを一つのクラスファイルにして独立させたものであり、具体的・即物的な変数値である。OOP と AOP、全く観点が異っている。
とはいえ、Android の SQLite(データベース)についてのチュートリアルで、いきなりこのような AOP のコントラクトを持ち出すのは、チュートリアルの主旨から外れていて、読者を混乱させるだけで、親切とは言えない文章構成だと思う。最初、何もわからない状態で読むと、SQLite というデータベースを操作するためにこのような必要な手続なのかと思って、データベースプログラミング特有の要素と誤解しかねないからだ。
コントラクト・クラスを用意するという話が全く独立した別の話であるとわかれば、Android で SQLite を操作することは特に複雑なことでなく、とてもシンプルで理解するのがさほど難しくはない作業であることが見えてくる。
頼むから、情報は、混ぜないで欲しい。頼みます、Google 先生!
しかし、Android の SQLite 用の公式 API は非常に特殊で癖があり、使い勝手の点で評判が良くないようなので、僕は結局、サードパーティ製の Android 用 JDBC ドライバーである SQLDroid を使うことにしました。→「SQLDroid でハッピーに Android/SQLite ライフ」
《Android》