ねこものがたり

いちにちいっぽ

Rails Developers Meetup 2018 Day 3 Extremeに参加しました

7/14に開催されたRails Developers Meetup 2018 Day 3 Extreme に参加してきました。

初めて参加したのですがめちゃくちゃ濃い1日で参加してとても楽しかったです。

準備運営してくださった皆様、本当にありがとうございました!!!

個々の発表についての意見とか考えは周りの経験者さんのものを伺ってみたいなと思っているのですが、個人的には”今の自分だからこう思った”というのを文章にしてみたいと思ったので書いてみます。

最近の自分

  • Fjord Boot Campでがんばっている
  • 自分の作りたいアプリを作るためにデッサンややるやらリストやらばかり唸りながら考えている(遅々として仕様が決められない)
  • 仕事としてプログラミングやることについて具体的な様子をもっと知りたい
  • アジャイル開発!」よく聞く!本も読んだ!しかし体感が足りない!
  • そういえばテストが楽しいぞ?もっと書きたい気がしてきた!
  • アプリケーションの「ユーザー」って使う人?使う人が影響を与える人もユーザーなのかも?とか思い始めてる
  • よいユーザー体験のためのデザインに関心が高まっている
  • 家にばかり要るので人と戯れたい
  • すごい人のすごい話聞いてすごい人とお話して自分もすごい気になりたい

・ 我らが町田さんが登壇するぞ!!!!!

どのセッションも面白そうでどれを聴くか迷ったので、こんな感じの自分が聞きたいというセッションを中心に聞いてみました。

イベント中の様子

2つのトラックに分かれて20分のセッションをどんどん回していくスタイル。 質問はAMAで募っておいて、時間に余裕があればセッション後にQAやっていってました。

町田さんによるRubyKaigiのデザインのお話

スライドをまとめてくださってる記事がありました!

https://qiita.com/dyoshimitsu/items/7747ccbadbb6711cbee5qiita.com

株式会社FiNCさんからのお弁当〜ごちそうさまでした!

参加してみて

全部を通して「考える」っていうのがエンジニアとしてやってくために大きな重要な要素なのかなと思いました。

とはいえ考えるときにそうそう立ち止まってもいられなくて、すぐに答えは出ない状況でもやっていくしかなくて。 あるいは突然方向転換しないといけなくなったりして。 そういうなかでもやっていくためには柔軟性とか臨機応変さとかが必要でっていうのを、発表を聞いていて思いました。自分やっていけるのかちょっと怖い・・・

また「ケースバイケースっていうとあれなんですけど」って何人かの発表者が言っているのを聞いて、結局は個々の問題だとしてもできるだけ「こういうふうにするといい」っていうのを共有していくことで生産性を高めていく努力をしているのがエンジニアの良い文化なのかな〜とも感じました。

懇親会でもいろんな方とお話できて楽しかったです^_^ こうみえて結構小心者なのでぼっちにらなずに済んだのがめちゃくちゃ嬉しかったです!声かけてくださった皆様、話し相手になってくださった皆様ありがとうございました(歓喜!!!)

そういえば、vimはFjordでもやるけど前はイマイチ慣れなくて「んーー」って思っていました。だけどNginxでなんちゃらかんちゃらとかやっているうちに「これは便利だ」と気づいてしまったのですっかり使うようになっていて、発表が楽しかったですww

DBから前後のデータをとってくる

何がしたいか

reportというモデルがある。 report/showを開いた時に、開いているreportの前後のreportページに行けるようにリンクを貼りたい。

どうやって前後の情報をとるか

一番いいのはreportモデルにuuidを使うことのようです。

教えてもらった記事:rails+postgresでidにuuidを使う - komagataのブログ

でも今回はuuidではなくてcreated_atを使って見ているreportより1つ古い/新しいreport」をとってくるようにメソッドを書きました。

def previous
    Report.order(created_at: :desc).where(user_id: user_id).find_by("created_at < ?", created_at)
end

  
def next
    Report.order(created_at: :asc).where(user_id: user_id).find_by("created_at > ?", created_at)
end

データを整列させて条件を指定する

Report.order(created_at: :desc)とかReport.order(created_at: :asc)というのは、たくさんんのreportをcreated_atを基準に降順昇順にするということ。

created_at順にきれいに並べた上で、.where(user_id: user_id)現在表示中のreportを書いたユーザーと同じ人が書いたreportに絞っていく。

そしてfind_by("created_at < ?", created_at)では表示中のreportよりcreate_atが小さい(つまり以前の日付)reportのうち最初の1件とってくる。 .find_by("created_at > ?", created_at)では反対に日付が大きい、新しいreportのうち最初の1件をとってくる。

注意すること

こういうメソッドを書く機会というのは多いらしく、よくやりがちだけれど気をつけなければならないミスというのを教えてもらいました。

等号不等号

< ,>, ≦, ≧。 イコールの有無、右向き左向き、ちょっとした違いが事故につながるそう。ここには書かないけどヤバそうな事例を聞きました。 数学苦手で凡ミスをやらかしがちな私としては、全然笑えなかった。 怖い!!!!

検索条件にするカラムと優先順位

上記のようにcreated_at、つまり時間に関することを条件に入れるときは、特に常に慎重でなければならないそうです。

時間に限らずテーブルがもつ情報の中で優先順位をつけたり、保存される情報にはどのような内容が考えられるのかできる限り様々なことを想定することでしかるべきときに事故が起きないようにするという姿勢を教えてもらいました。

以上を踏まえてもう少し改善したい

最初に書いたメソッドはちゃんと使えるんですが、今現在「同じcreated_atをもつreportがあったらどうするか」を考えています。 正確に言うと「考えてみよう」とアドバイスをいただきました。

ぶっちゃけ全然わからなくて「そんなことは起きない」と愚痴ってたら「それがそうでもない」と。(!!)

なのでめげずに考え中です。