脊髄反射でコードを書き始めるといいことがない

正直に今日やった自分のミスを書くよ。
僕は最近kayというGoogle App Engine用Webフレームワークにはまってて、こいつはApp EngineのモデルがDjangoに似た設計になっていたり、kayで使ってるjinja2っていうテンプレートエンジンがDjangoのテンプレートエンジンに似た設計になってたりする関係で、結構Djangoに似ている。
元々個人的にDjangoを使ってたこともあって、とってもお気に入りのフレームワークなんだね。


ところで、Djangoにはdjango.contrib.contenttypesというアプリケーションが内蔵されていて、どういったものかというと、普通ForeignKeyは特定のテーブル内のレコードに対してしか張れないけど、contenttypesではテーブル名とテーブル内でのPKの組を使って、DB内の任意のレコードに対する参照を作ることができるようにしてくれる。
これがあるおかげで、Djangoでは非常に再利用生の高いアプリケーションが沢山作られている。例えばDjango-taggingとかが有名かな。
とにかく、contenttypesは便利なんだよ。


ふとkayにはそんな感じの機能を提供するアプリケーションが無いことに気がついた。
だから、じゃあ一丁作ってやるかと、思い立ってしこしこと作ったんだ。4時間くらいかかったかな。
テストも書いて、ちゃんと動作することを確認して、こりゃ便利だと思ったからコミュニティに提供しようかなーとか考えていた時に、思い出した。


App Engineで外部キーっぽいのを提供してくれるReferencePropertyは、任意のモデルインスタンスを入れられるんだった!!


というわけで、僕の4時間は全くの(というのは言い過ぎだけど)無駄に終わったわけ。
そりゃ組み込みで提供されてりゃフレームワーク側で用意する必要なんかないよね。
なんで作り始める前に思い出せなかったんだろう。うーん。。。


まぁ、これを作るためにgoogle.appengine.ext.dbモジュールのコードリーディングやったり、kayのコードも結構読んで勉強にはなったから、それでよしとしとこう。