テックアカデミー最終メンタリング:WEBアプリ完成とこれからのこと

2018年5月22日

ども。今日はテックアカデミー最終日です。それと同時に最後の講師とのメンタリング(ビデオ通話)の日でもあります。

今まで何度もRailsを辞めたいと思いながらも、なんとか3ヶ月間走り続けることができました。おかげ様でWEBアプリが完成するところまできました。テックアカデミーの講師の方々にはskypeに掲示板も含めて支援を受けてきて本当に感謝しています。

アプリの機能は完成しましたがコンテンツが入っていないので、コンテンツを充実させて独自ドメインで公開したいと思っています。

今日は最後のメンタリングについてのレポートです。これからテックアカデミーへの入会を考えている方の参考になれば幸いです。

さて、今日はメンタリングの日ですが実は一通りアプリが完成したので講師の方に特に聞きたい事がありません(笑)とはいえ30分勿体無いので追加機能を作っていて、それのお手伝いをしてもらいました。爆

それが「こだわり検索機能」です。

こだわり検索機能の実装を手伝って頂いた

モーダルウィンドウを出現させる

モーダルウィンドウというのは画面上にふわっと出現するもう1つの画面のことです。

ボタンやリンクを押したらこの画面を表示させて入力してもらいます。これをCSSだけで実装できました。参考にさせていただいたサイトはこちら(https://qiita.com/dangoya/items/4176e8ef22e892570f4e)こちらのコードを参考に実現できました。

先生、コードを参考に実装したので中身を理解していません。CSSの意味とか理解していないのですが動いてるからいいや‥でも大丈夫でしょうか。

ま、まぁいいんじゃないですか。おいおい学習して理解すれば。ちなみにBootstrapにもモーダルのコンポーネントがありますよ。それで実装してもよいと思います。(Bootstrapのモーダル

(´・∀・)ノあい

formタグのチェック項目を受取り、コントローラーで処理をする

モーダルウィンドウではHTMLのチェックボックスを表示しています。こだわり検索機能なのでチェックを入れてもらった項目でDBの中を検索していきます。

formタグの中で次のようにチェックボックスタグを出力しています。

<%= check_box_tag 'op1' %> ランチを提供している
<%= check_box_tag 'op2' %> 客層はファミリー向け

コントローラ側ではparams[:op1]や、params[:op2]で取得します。

これってチェックボックスが25個もあるんですね。次のようにチェックボックスを記述すると後で楽になりますよ。

こうすることによって

<%= check_box_tag '[kodawari]lunch_ok' %> ランチを提供している
etc...

コントローラー側で

params[:kodawari][:lunch_ok]

で中のデータを取得できます。

ということは

params[:kodawari].each do |key, value|

みたいな事もできます。

う~ん、自分にはあまり実装のメリットがまだ理解できていないのですが‥

これって例えば、 @shop = Shop.allで店舗データのActiveRecordを取ってきたデータに対して、チェックボックスの項目を条件につなげていくんですよね。例えばlunch_okカラムが”1″のものと、family_okカラムが”1″のものを抽出する‥みたいな。

はい。そうなんです。

てことはコントローラー側でSQL文を作るところでこんな記述をします。

params[:kodawari].each do |key, value|
  next unless Shop.column_names.include?(key)
  @shops = @shops.where("#{key} = 1") if value.present?
end

これで条件文をつなげていくことができるんです。

ちょっと解説すると、2行目 Shopsテーブルのカラムにkeyが存在しているかをチェックしています。3行目でkeyをwhereにつっこんでいて、これって結構あぶないコードで、悪意のある入力者によってSQL埋め込まれてしまうなどの危険があります。そのSQLインジェクションを検閲するために、2行目があります。レコード消されるのは簡単にできてしまうんですね。それをブロックするためにkeyをチェックしています。

こ、これは凄いっす!カラム名とHTMLのチェックボックスのkeyを同一にすることで、こんなやり方があるんですね。

ということで、モーダルウィンドウで入れたチェックをコントローラー側で受け取って、それをSQLの条件文につなげる事ができました。

ちなみに今回の先生の指導で始めて知ったのですが、

RailsではSQLを組み立てている時はSQLを実行しないそうです。

例えば@shops = Shop.allで、この時点ではSQL文を実行してなくて、@shops.present?とかやったタイミングでSQLが発行されているらしいです。

これは知りませんでした。Railsって内部で頭のいいことやってるんですねぇ。

契約終了からの今後のテックアカデミー

さて3ヶ月コースを終えて今後どうなるのかをまとめておきます。

契約は終了しましたが、テックアカデミーで使った教材(WEBのレッスン)は、今後もログインして閲覧することができるとのことです。

また作成したWEBアプリのコンテストというのが年に数回開催されているようです。これに応募してもしいい賞を取ると、おまけで他のプログラミングコースを受講できるようになったりするらしいです。

それからエンジニアとして第一歩を踏み出したい方、転職先を探している方はテックアカデミーにさらにお世話になると良いでしょう。1個自作のアプリを作れたという事実は転職時にもアピールポイントになることでしょう。

テックアカデミーを終えてこれからの私

いやー3ヶ月、実に大変だった気がします。30才超えた自分にはRailsなんてオブジェクト指向言語がなかなか理解できなくて。しかしサポートを受けながらでも1つのオリジナルアプリを完成させることが出来たのはよかったですね。(アプリはコンテンツを入れて後ほどこのブログにUPします)

いままで途中で挫折することが多かった私ですが、最後まで仕上げられた事が大きいです。自信にもなるし、継続してプログラミングをやろうという前向きな気持ちにもなります。

作ったアプリは折角なので皆に使ってもらいたいけど、無名の素人が作ったアプリなので、WEB上で認知度を高めていかないと(それってマーケティングスキル必要じゃね?)と思っています。

さて、今後の私の予定ですがRailsはいったん置いて。他の言語と他のプログラミングスクールを覗いてみようと思っています。子供が居るので子供向けの言語でも学んでみようかなぁ。