ねこものがたり

いちにちいっぽ

『パーフェクトRuby on Rails 【増補改訂版】』を読みました

gihyo.jp

ざっくりの感想

  • 最初からサンプルコードがたくさんあって、手を動かしてどんどん次にいくぞ!という感じで進められたので終始楽しかったです。
  • 「実際の開発ではこのようにします」など、実践的な知見がたくさん詰まっていました!
  • コラムがだいぶいい。全編はボリュームが多いという人でもコラムだけは読んだほうがいいと思うくらいコラムがいい。
  • 「なぜそうするか」が解説してあるので現実の開発で応用が効きそう。

個人的に勉強になったこと

一番は11章「複雑なドメインを表現する」とか12章「複雑なユースケースを実現する」のあたり。 最近(というわけでもないけど最近)DDDやクリーンアーキテクチャにとっても興味があって、DDDの本を読んだり勉強会に出てみたり話を聞いてみたりしています。 でも「Railsドメイン駆動設計ってなんかこういまいち自分の中で結びつかないぞ?」と感じていました。 そんなステータスの中でこの本を読んだのですがDDDの考え方や物事の切り出し方には適応できそうなのかなと感じました。

あるモデルにドメインのルールが書かれすぎていないかとか、ユースケースを適切に扱っているかとか。

またそれに伴い、少ししか使ったことがないのですが、書籍でふんだんに紹介されていたActiveModelのモジュールについて理解を深め、実装時に使ってけるようにしたいと思いました。

アプリケーションコードを書くというのは現実世界をどう切り出すのか、それをどう表現するのかということだなーと感じているのですが、その辺りの力をつけるためにとても為になる章だと感じています。 いろんなケースに出会ったりプロダクトを作ったり経験を積んでいきたいと常日頃から思っているのですが、それ同時にその都度この本の内容を振り返って「このケースではどのようにするのがいいだろう」と毎回考えて開発していきたいと強く思いました!

発見したこと

これはだいぶ地味だと思うんですが、6章の中にユーザーの退会処理を作る箇所があり、その中に

def check_all_events_finished
  now = Time.zone.now
  if created_events.where(":now < end_at", now: now).exists?
    errors[:base] << "公開中の未終了イベントが存在します。"
  end
  if participating_events.where(":now < end_at", now: now).exists?
    errors[:base] << "未終了の参加イベントが存在します。"
  end
  throw(:abort) unless errors.empty?
end

というコードが出てきます。 ここの趣旨は「callbackを使って削除していいかどうかチェックできるよ」っていう話だと思うんですが、私はこれをみて「throw(:abort)使ってる!!!こういう使いかたができるのか!!!便利!!!!」と感動しました。

というのは、少し前に「俺はRubyのことが何もわからない」という気持ちになって何度目かのチェリー本をやっていた際に「catch/throwで制御できるってあるけど自分で書いたことがないなーどういうユースケースがあるのかが飲み込めてないな」と疑問を抱いていました。

そのときちょうどAsakusa.rbがあったので質問してみたり( 記録)ということがあったので、頭の片隅に関心ごととしてずっとのこっていました。だから「こういうところで使えるのか!」と知れてすごく嬉しかったし「使ってみたい!」と一人で感動していた次第です。

あと、これに関してはRailsが4系から5系に上がったときの仕様変更で使うようになったみたいだということも発見しました! 自分はRails5系から入った人なので、throwをきっかけにRailsの歴史にちょと触れられたことも嬉しく思います。

5.3 throw(:abort)でコールバックチェーンを停止する

最後に

すごく内容の濃い書籍なので、もっともっと勉強になったことはたくさんありますが、心に強く残ったのを挙げると以上となります。 書籍に沿うとサンプルアプリをいくつも作ることになるわけですがその度に rails gコマンドなどであらゆるものが生成できたりして「便利すぎる」と今更震えたりもしましたw そんな感じで楽しく読み切れました。

大変素晴らしい書籍をありがとうございました。

GitHub Pagesを作成しました

まだなにも見た目をいい感じにすることをしていないのでどシンプルですがGitHub Pagesを作ってみました〜

Welcome | neko314.github.io

やったこと

GitHub Pagesを作成する

いつもどおりGitHubリポジトリを作る手順でneko314.github.ioというリポジトリを作成します。 するとその時点で、neko314.github.ioでwebサイトが構築されています!!!(すごい)

そのあとなにか適当に index.md的なファイルを作ってcommitし、pushします。するとサイトにそれが反映されます。(すごい)

公式のGetting Startに以上のようなことが書いてあって、簡単に始められるようになってます。

公式にあるように、見た目の話でいうとChoose themeでページのデザインを選ぶことができるんですが、いつかCSS自分でやりたいなと思っているので、 今はあえて白黒のママにしてます。

年内には色を付けていきたいと思います。

Google Domainsで買ったドメインを割り当てる

実はひっそり.devを持っていてずっと使っていなかったのですが、今こそ使うぞと思い、neko314.github.iokeiko.devというドメインを割り当てることにしました。

この辺は公式を読んでもパっとはわからなかったのですが、以下のブログがめちゃくちゃわかりやすくて、そこに書いてあるとおりにやったらできました。

trentyang.com

Google Domains側でやること、GitHub側でやることが順に解説してあって本当に丁寧なポストでした。

なぜやったか

7月からCourseraのImprove Your English Communication Skillsというのを受講していて、せっせと英語を(なるべく)毎日やってます。 そのうちの1つのコースの内容がePortfolioを作成するというもので、「なるほどーじゃあせっかくなのでいつかやってみたかったGitHub Pagesで自分のサイト作ってみるか〜」という感じでやりました。

というわけでコンテンツはなるべく英語で書いていくつもり。続くかな〜。

やってみて

他の人の書いてくれたブログを見て真似したらできたけど、自分が一体何したのかよくわからん!って思う部分もあるので、これを機に「CNAMEとは。。。」あたりちゃんと理解したい!

ページ自体はインターネットに公開はしているものの、誰かに見てほしいと言うよりは自分の記録にもなりそうなのでちゃんとメンテしていこうかなという気持ちになってます。