はじめに
2016年11月5日に開催された
SQLの書き方とAPIファースト開発セミナー
http://api-first.connpass.com/event/43492/
に参加してきました。
どんなことを勉強してきたのかメモしておきます。
以下、自分の理解で書いているので間違った内容を含んでいるかもしれません。
ご容赦ください。
勉強会の内容
-
APIファースト開発の概要と利点
「テーブル設計を行う前でも、テーブルのスタブを使ってアプリケーション側の開発を進められる」という話を聞きました。 -
SQLの書き方
「エクセルで書けることはSQLでも書ける」という例を見ました。
個人的に勉強になった箇所
以下の内容は、ある程度フィルターがかかっています。自分が知っている(つもりになっている)箇所は全くメモしていないので。
あるアプリケーションがどのテーブルを参照しているかが簡単に分かる方法
1. あるアプリケーションで発行されるSQL全てをPL/SQLで作成しコンパイルしておく
2. FROM ALL_DEPENDENCIESを使った不思議な呪文を使うとPL/SQLが参照しているテーブル一覧が確認できる
以上の簡単な手順でテーブルを変更した際にどのアプリケーションが影響を受けるか簡単に分かるようです。保守、運用の際に便利だと思いました。
Oracleのパーサーを利用することでWhere句の条件追加が楽に書ける
検索用のSQLで条件追加をしたりするときに、Where句に条件をどんどん追加していくと思うのですが、紹介されていた方法だと簡単に条件追加が行えていました。手続き型言語でORMを利用してWhere句に条件を追加するよりも楽に設定できて便利だと思いました。
パラメータテーブルを用いることで手続き型言語のロジックをSQL側に移行できる
ストアドプロシージャでビジネスロジックを書くこと
http://qiita.com/kantomi/items/b560d3a0d400a1cc2225
内容的には上のリンクに書いてあることと同じような説明を受けました。
勉強会で改めて気づいたのが、自分が手続き型言語で行っていた処理を、SQLおじさんはPL/SQLで行わせているということでした。上のリンクではパラメータテーブルというビジネスロジックに関わるデータを格納したテーブルを用いてPL/SQLを実行しています。そのため、今まで手続き型言語にマップしてから処理を行っていたものが、PL/SQLだけで完結するようになっています。
自分はこういったテーブルの作り方をしていなかったので、こういう方法もあるのだと勉強になりました。
勉強会に参加する前にあったほうがいいと思う知識
勉強会はOracleを主として、他の言語との違いを述べるというような形式で進みました。
私はOracleメインで使っているのでよく理解できましが、Oracle関連の知識は事前に必要だなと感じました。
- Oracle SQL言語リファレンスの内容
https://docs.oracle.com/cd/E49329_01/server.121/b71278/toc.htm
集計関数分かっていないと理解できない部分とかあったので言語リファレンスは読んでおいたほうがいいと思います。
SELECT
SUM(点数) OVER (PARTITION BY 学生番号)
FROM
成績表
勉強会の短い時間で集計関数を理解するのは難しいと思うので。
さすがにModel句はでてきませんでした。
- SQL Developerの存在と実行計画の見かた
SQL Developer上でSQL書いたり、実行計画見たりしてたので、このツールが何やっているのかくらいは知っていたほうが理解が早いと思います。このツールを触っていなくても「A5:SQL Mk-2」とか「SI Object Browser」を触っていたらなんとなくわかると思います。
感想
SQLおじさんはSQLについてかなり詳しかったです。業界一年目の自分が言うのもあれですが、かなり勉強されているんだと感じました。
APIファースト開発自体は、かなりの部分をSQL寄りで開発を進める手法だと思いました。なんでもSQL400本あったらフェッチさせるのは4本だけで済んだという事例もあるみたいです。基本的にSQLでレコードごとの処理を行って、どうにもうまくいかないことを手続き型言語でやると思うのですが、自分なら4本どころじゃすまないだろうと思いました。ただ、SQLのコーディング力を向上させるのと、前述したパラメータテーブルを用いてロジックを各やり方を実践すればある程度はSQLのみの処理にできそうです。
気になったのが、パラメータテーブルを作成してPL/SQLでロジックを実装する方法と、手続き型言語にパラメータを埋め込んでロジックを実装する方法のどちらが処理を簡単に実装できるかということです。まだ今回の勉強会で学んだことを実践していないので、機会があればパラメータテーブルを使う方法も実践していきたいです。
勉強会では、「ORMはSQL主体の開発とはコンセプトが違うため、いくら進歩させても良い結果を得られない」という意見が出ました。自分の解釈ではORMのコンセプトとして「データベースへのアクセスもxmlファイルへのアクセスも、中身を気にせず同様にアクセスできるようにする」というのがあると思っていて、SQL主体で開発している側からは相容れないということだろうと思いました。
最後に
関係ない話が多くなっていますが、このセミナーの目的はAPIファーストで開発して開発効率UP、工数削減が目的になっています。ここには書かれていない有益な情報も数多く勉強会では発信されていました。おそらく今後も勉強会が開かれることがあると思うので興味を持った方は直接行かれてはどうかと思います。