• ログインログイン
  • 新規登録新規登録

MENU

文系の私がエンジニアになっていくお話(Ruby on Rails編 第8回)

連載文系の私がエンジニアになっていくお話(Ruby on Rails編)

文系出身学生が、Webサービスやアプリ開発に取り組み、エンジニアになるべくどのように学習を進めていったのかの記録を紹介するコンテンツです。Ruby on RailsでのWebサービス開発の学習手順などを解説しています。

前回までのプログラミング学習コラムに続き8回目の勉強内容です。

コラムの連載をさせていただいている小林寛和(ひろかず)です。Ruby on Railsのコラムの第8回目となります。今回はモデルに関連したDBを新しく作り、Railsで処理をしてみましょう。その際、コードを綺麗に書くという点を意識しながら説明していこうと思います。

新しいデータベースを関連付けるメリット(コードを綺麗に書く)

無理やり既存のデータベースに結びつけると、どうなるか(汚いコードの例)

抽象的でよく分からないので、具体例を出してみます。例えば、携帯ショップのまとめサイトを作っているとしましょう。もう既にShopモデルを作り、Shopの情報は管理できました。しかし、あなたはそこで店にある在庫情報を管理しなければならなくなりました。

もしかしたら在庫情報と言っても売れ筋の3つ程を載せる程度で、既存のShopモデルに売れ筋情報を結びつけるだけでもいいかもしれません。しかし、それだけでは汎用性や拡張性は皆無で、ViewやController側でも汚いコードを書かなければいけなくなるでしょう。

ここに例を示します。

      1. Controller内のshowメソッド
        def show
        	@shops = Shop.find(params[:id])
        	@mobiles = { @shop.mobile_1_name => @shop.mobile_1_price,
        							 @shop.mobile_2_name => @shop.mobile_2_price,
        							 @shop.mobile_3_name => @shop.mobile_3_price }
        end
      2. Views内のshow.html.erb内のループ
    1. <% @mobiles.each do |mobile| %> <p>name: <%= mobile.key %>, price: <%= mobile.value %>.</p><% end %>

データベースを切り分けないと拡張性が低くなり、可読性が下がる

私の書き方が悪いのもありますが、可読性が低いです。Controller内でHashオブジェクトを生成していますが、ループで回すことも出来ず、コードが長くなってしまっています。もし商品を5つ扱うとなると、いちいちHashに子要素を追加しなくてはなりません。そして、Viewの方でもmobile.keyやmobile.valueといった、何の値が格納されているのか全く分からない仕様になってしまっています。

データベースを切り分けると拡張性が高くなり、可読性が上がる(綺麗なコードになる)

これらを新しくモデルを作ると以下のように書きなおすことが出来ます。

      1. Controller内のshowメソッド
        def show
        	@shop = Shop.find(params[:id])
        	@mobiles = Shop.find(params[:id]).mobiles
        end
      2. Views内のshow.html.erb内のループ
      3. <% @mobiles.each do |mobile| %> <p>name: <%= mobile.name %>, price: <%= mobile.price %>.</p> <% end %>

まずController側です。Shopオブジェクト.mobilesで存在するmobileを全て取ってきてくれます。コードの方も非常にシンプルになりました。シンプルになったことで、急な仕様変更で商品を5つ扱うことになった場合などにもコードを変更する必要がなくなり、拡張性も上がりました。

また、View側でもmobile.nameやmobile.priceというように、何を呼び出しているのかがぱっと見で分かるようになり、可読性が上がりました。

まとめ

今回はまだ実装はしていませんが、モデルを切り分けることで得られるメリットと、その実例を示しました。既存のモデルに対して、複数の関連した情報を結び付けたいという事は多々あるかと思います。これらを無理やり既存のモデルに結びつけるとテーブルがごちゃごちゃになり、それによってControllerやView側のコードも拡張性が下がり、可読性が下がってしまいました。

しかし、これらをモデルを切り分けることで綺麗なコードにすることが出来ました。でも、綺麗なコードってなんでしょう。出来るだけ少ないコードで書くことですか?コメントを書いてわかりやすくすることですか?

次回予告

次回はモデルを切り分ける実装の前に、一度綺麗なコードとは何かについて考えてみましょう。

完全無料!

1で登録完了!

エンジニアの仕事・年収や選考ノウハウ記事が読めるほか、
会員にはプログラミング講習やES・面接対策などリアルな無料サポートも充実。
ここだけの求人情報も多数。

今すぐ新規会員登録
Page Top