どうも、遅咲プログラマー(@yoshito410kam)の神里です。
今回はSQLについて。
プログラミングを学び始めたばかりの方には、SQLはあまり馴染みがないかと思います。
実際、初心者がRailsやっても、SQLを意識することなんてほぼないですよね。
Active Record が勝手にSQL発行してくれるから、わからない人でもアプリ作れるようになってるんですよ。
で、やっぱりスクールもSQLのカリキュラムって結構手薄です。
というか、僕もスクール通ってましたけど、SQLなんて一切習いませんでした。
ルート、コントローラ、モデル、ビューをちょっといじって終わり、って感じです。
だから、多くの初心者がSQLの学習を見落としがちなんですよ。
見落とすというか、そもそも知らない人もたくさんいるんじゃないかな?
ぶっちゃけ、知らなくても簡単なWebアプリケーションなら作れますからね。
だから、そこら辺の知識が手薄になっちゃってるわけです。
ただ、1つアドバイスをしておくと、現場に出た時SQLしらないと結構困ること多いですよ。
だって、現場ではSQL直書きでデータ検索の処理を実装することがありますから。
まぁ、SQL重要なのはRailsに限った話じゃないんですけどね。
SQLの勉強はやっといた方がいい
初心者のうちは、あんまりSQLを理解する必要性を感じないかもしれません。
ですが、現場に入るとこれは必須のスキルになってきます。
さっきも書いたように、データ検索の処理をSQL直書きで実装する時があるから。
そのとき、前提知識がないと読むことすらできないし、コードに変更を加えるなんて絶対に無理です。
データ検索の部分で不具合でたら、サイト全体に与えるダメージめっちゃでかいですからね。
そこを知らない人に触らせるのって、現場の人からすると超怖いです。
あと、SQL知らないとRailsが裏側でどういう処理をしているのか理解することができません。
データを検索したり編集したりする機能を実装してると、処理上手くいかない時とかによくターミナル側に表示されるSQLをチェックするんですよ。
それみて、やりたいことができてるか、うまくいってないところはどこなのかを確認するわけです。
だから、書けないならまだしも、読めないのはマジでやばい。
現場だと、結合とか副問い合わせとか、普通に知ってる体で話すすめられますからね笑
SQLを学習する方法
SQLを学習する方法って、結構たくさんあります。
それに、最低限学ぶべきことはそこまで多くないので、Ruby on Railsの勉強する前にちょっと学んでおいた方がいいですね。
で、ベタだけどおすすめはやっぱりProgate。
これで一通り基礎をさらっておくといいですね。
あともう1つ、めっちゃオススメの勉強法が、 rails c でコンソール立ち上げて、モデルオブジェクトに対してメソッド実行して確かめることです。
User.find とか Item.all みたいな感じで。
それの練習してると、それぞれのメソッドが裏側でどういうSQL発行しているのかがよく理解できるようになりますよ。
慣れてきたら、 User.pluck(:name).distinct とか Item.group(:status).count とか、複雑な検索もやってみるといいですね。
Active Record や SQL の機能を勉強するのに rails c はめちゃめちゃ便利です。
あと、モデルオブジェクトのメソッドの動作確認にも使えますよ!
条件検索、結合、副問い合わせなどが一通りわかったら、また改めてRuby on Railsの勉強に戻りましょう。
そうするとさらに理解が深まりますよ。
裏側でどういう処理が行われているのか理解できるようになると、開発がますます楽しくなります。
SQLに感動した日
こっから余談。
僕、何百万回生まれ変わってもSQLに感動する日なんて来ないと思ってたんですよ。
でも、つい最近きました。
もうSQL超大好き。
何がきっかけかというと、そこそこ苦労した末にCSVデータを40万件インポートできた時です。
このタスク、AWSのパワー不足でサーバー止まったり、デプロイし直してインスタンス新しくしたり、データの欠陥見つけたり、ファイルを分割したりと、結構大変だったんですよ。
1週間以上は色々悩みましたからね、まぁ楽しかったけど。
で、実際にインポートに成功した時はめっちゃ快感でした。
僕の場合、データベースへの登録が成功した時はSQLが緑でターミナルに表示されるんですけど、それはそれはもう綺麗な緑でした。
パソコンの画面がぜんぶ緑、見渡す限りの緑。
緑がこんなに綺麗に見えるなんて思いもよりませんでした。
もともとは赤が好きなんですけどね。
そういう大きな快感があって、今では緑が、そして、SQLが大好きです。
この前も find_by_sql でデータ検索の処理を書きました。
ありがとうございます、超楽しい。
個人的には、副問い合わせがかっちりハマった瞬間が超気持ちいいですね。
「おぉ、ちゃんと上手くいった!」的な。
だから、僕はこれからもSQLとともに歩んで行きます。
宜しくお願いいたします。
まとめ
初心者のうちって、あんまりSQLに目が向かないかと思いますが、これはやっておいた方がいいですよ。
業務の幅が広がるし、いざ知識が必要となった時に混乱したら大変なので。
僕自身も、現場に入る前にある程度、MySQLやOracleを通してSQLの知識を入れておいてよかったなと感じました。
ここら辺の理解があると、 Acrive Record のメソッドもだいぶ使いこなせるようになります。
結果として、プログラマーとしての実力も上がりますよ。
プログラミングやるとなると、わりとデザインの部分とか華やかなところに目がいきがちですが、こういう地味なところのスキルってめちゃくちゃ重要です。
ぜひ、 Progate や rails c で、SQL の基礎を身につけていってください。
ぜひ!