アプリ開発者よりのDB勉強会をやりたい、というかやる

結論

SQLがどーのデータの持ち方がこーのというアプリ開発側の話題がメインのDB勉強会をやりたいからやるよという話

以下補足

コンテンツ

  • アプリ開発者がDBを握らなければならない時代
  • DBを握るということ
  • 勉強会について

アプリ開発者がDBを握らなければならない時代

データ爆発の時代

データ爆発の時代がくると言われて久しいです。扱うデータの量が増えてきているだけでなく、データの構造も多種多様になってきていると感じています。これまではOne Size Fits AllでRDBが対応してきたのが、増加し複雑化していくデータにRDBのみでは対応しきれなくなってきている為にNoSQLのようなプロダクトが盛んに開発され利用されています。

アプリ開発者としてやるべきこと

そういった時代を迎えるにあたって、アプリ開発者は何も備えなくていいんでしょうか?DBはインフラ/サーバーエンジニアのもの?

僕は「DBに対して(データに対して)アプリ開発者が握る領域を増やす」ということだと考えています。

DBを握るということ

RDBでSQLを書くという選択

比較的アプリ側から直接データを扱うようなアーキテクチャになっているKVSやドキュメント指向なNoSQLに比べ、RDBMSはSQLという抽象的な形でしかデータを扱えないようになっています。これはリレーショナルなデータモデルを扱う為にそうなっています。

SQLを書くには普段アプリを書く時は結構頭の切り替えが必要な為、ORMを使ってオブジェクト指向で扱えるようにするのが主流です*1。

ですが、リレーショナルなデータを上手く扱う為にはその為に作られたSQLで書いた方がいい場面が多いし、ORMはオワコンらしいし、SQLはLLだそうなので、DBを握りたいアプリエンジニアはRDB使うときは、もっとカジュアルに生SQLを使うといいんじゃないかと思います。

RDBMSを使うということは巨人の肩に乗ること

RDBMSは、SQLで欲しいデータを宣言的に書いておくと、中の人であるプランナ/オプティマイザがデータの状況やインデックスの張り方にあわせてよしなに実行計画を組んでくれる仕組みになっています。この仕組み故にどう実行されるかが直接コントロールできなくて扱いづらい面もありますが、僕はこれはまさに巨人の肩に乗るということだと思っています。

プランナ/オプティマイザにはデータの取り扱いに長けた超人達の叡智が存分に詰まっています。恐らく自分で手続き的にコードを書いたとして、RDBMSと同等の最適化を行う自信はありません。例え書けたとしてもSQLを書くのとは比較にならない時間が必要になると思います。

プログラミング言語としてのSQL

さらにSQL自身も言語として大きなポテンシャルを持っており、使いこなせれば特にデータを扱うということにおいては柔軟で強力な表現を行うことができます。若干ネタ気味ですが、SQLのポテンシャルについてはここら辺を見るとその一端を感じることができると思います。*2
Brainf*ck in SQL - ぐるぐる~
SQLで数独を解く - y-kawazの日記

...SQL書きたくなりましたか?

大事なのは選択できること

もちろんRDBMSがNoSQLに比べて優れている、ということではありません。RDBMSやNoSQLについて考えるときは「RDBMS v.s. NoSQL」ではなく「RDBMS and NoSQL」、もっといえば「DBMS」という枠で考えるべきです。

データを扱う上であるDBMSを選択するというのはどういう意味があるのかを意識する、ということです。そして作りたいものに併せて適切なDBMSを選択する*3ことです。これができればアプリ開発者として大きな力になると思います。*4

その為の一環として、アプリ開発者としてRDBMSをもっと上手に*5扱えるようになりたいと常々考えていました。

勉強会について

経緯

大体以上のような理由でアプリ開発者むけのカジュアルなDBの勉強会をやりたいなぁと何となく思っていました。http://mysql-casual.org/が発想としては近いのですが、内容をみるとインフラ周りの話題が中心なようです。MySQL Casualに限らず、DBの勉強会というとどうしてもインフラ周りの話題が中心になりがちで、もどかしい思いをしていました。

そんな折、勉強会カンファレンス2011*6に参加したところ、「なければ作ればいいじゃない」という心の声が聞こえてきたので、やることにしました。

話題

対象の話題は大体こんな感じでしょうか?

  • SQL
  • ストアドファンクション
  • データの持ち方
  • プラグインの書き方/作ってみた
  • 実行計画

他の話題も歓迎です。

DBMS横断的にやりたい

インフラ向けの話題に比べて、アプリ向けの話ならDBMSに依らない話にしやすいんじゃないかと思っています。

もちろん全てのDBMSに通じる話は恐らくそんなになくて、特定のDBMSを前提とした話に必然的になってくるとは思いますが、普段は違うDBMSについて話を聞く機会はあまりないのでそれはそれで聞いてみたいし、さらには異なるDBMSのユーザー間で交流できるような場になれば嬉しいです(主に僕が)。

とりあえずRDBから始めようと思いますが、ゆくゆくはNoSQLな話題も取り入れていきたいです。方向性は模索しつつ色々やっていきたい。

自分はPostgreSQL畑なのでPostgresからの話を提供できますが、某試験のようにDBといいつつ実質はPostgresのようなことにならない為に、他のDBMS使いの方の賛同者を絶賛募集中です。OSS、プロプラも問いません。

さらに個々のDBMSに特化した話にしたい時は派生させて分科会をやればいいと思います。むしろ分科会をやれる位に成長できれば素晴らしいですね。

名前募集

勉強会に名前はSQL Casualがいいかなと思ったんですが、MySQL Casualと丸かぶりなので却下。素敵な名前があれば教えてください。

時期とか人数とか

未定。8月くらいまでにはやりたい。決まったらここで/Twitterで告知します。

*1:と思ってたら、Perl界隈ではid:nekokakさん作のDBIx::SkinnyやTengのように生SQL指向のORMが結構流行っているようです。他の言語だとどうなんでしょう?

*2:自分もSQLでProject Eulerを解くという活動をしているのですが更新が滞っています。すいません。。。

*3:インフラ/サーバーエンジニアをないがしろにするといことではなくて、アプリ開発側からの意見を提供できる、ということ

*4:次のMongoDB勉強会ではその辺を話そうかなぁと思ってます。興味が有る方はどうぞ。(満席ですが、、)

*5:もちろんNoSQLも

*6:非常に有意義かつ楽しいイベントでした!ありがとうございました!