基礎をちゃんと学ぶタイミングを作ろう:SQL編
Rails使っていると、いくつかコマンドを実行していくだけでそれなりにそれっぽい動くものができます。
この最初に動くものができるという体験ができることは非常にいいことだなあと思っているのですが、本質的なところを何も理解せずに進めることもできてしまうため、割と早い段階でエラー祭りでつまづく事になってしまうと思っています。
ある程度動くアプリケーションができたら、少し遠回りに感じてしまうかもしれませんがもう少し基礎のところを抑えるようにすると理解度が加速していきます。
自分が思う基礎のところは
- SQL
- オブジェクト指向
- HTTPリクエストの仕組み
あたりを考えています。
今回はSQLについて少し触れてみたいと思います。
SQLって何?
SQLはデータベースに問い合わせをするために使う言語です。
SQLについての記事は世の中にいくらでもあるので、ここで詳しく説明することは避けますが世の中のWebアプリケーションの8割(適当)はSQLを使っています。
SQLはrubyよりもずっと前に作られているにも関わらず、今もずっと現役です。
そしてこれからも使われ続けていくことでしょう。
つまりSQLは超重要、ということです。
世の中にはSQLを使わないデータベース(mongodbなど)が存在していますが、今回そこは無視します。おそらくRailsアプリケーション触りたてでいきなりmongodbを触る人はいないでしょう。
Rails使う場合はSQL知らなくても書けるって聞きました
はい。Railsには ActiveRecordという強力なO/Rマッパーがあり、これの機能によってSQLを直接書かなくてもデータベースに問い合わせをすることができます。
ではなぜSQLを学んでおく必要があるのでしょうか?
データの保存イメージがわく
おそらく rails db:create
、rails db:migrate
、 Model.create
を実行しているとデータベースにどういう形でデータが保存されているかのイメージが付きずらいのではないかと思います。
テーブルというものが一体何者かイメージできれば、データをどこにどうやって持たせるのがいいかという設計のイメージが湧いてくるので、自分でオリジナルのことがやりやすくなります。
エラーに対応できるようになる
最初の頃によくあるのが、
エラーが発生してデータが登録できない、とか
登録したはずなのにデータが取得できない
ということがあります。
こういう場合はエラーメッセージをみつつ、登録時に実行をしているSQLのログを見ると割とすんなり解決することがよくあります。
SQLを知っておく事で、ActiveRecord側のエラーなのか、SQLのエラーなのかをちゃんと切り分けができるようになります。
SQLのエラーの場合は登録なので Insert文を使うのですが、Insert文の書き方をちゃんと抑えておけば発行されているSQLがおかしい事に気付きやすいでしょう。
ActiveRecordが何をしているのかわかると多分楽しい
ActiveRecordに find
とか where
とかありますよね?
どう違うのかを発行しているSQLから違いを見ることもできますので、そうした内部の動きの違いがわかるようになります。
内部の動きがわかると、楽しくなりますよね?
というわけでSQLのお話でした