Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20191213_出張!Railsウォッチ in 銀座Rails#16

Masato Mori
December 13, 2019

20191213_出張!Railsウォッチ in 銀座Rails#16

2019/12/13に銀座Rails#16で発表したスライドです。
https://ginza-rails.connpass.com/event/155467/
週刊Railsウォッチ: https://techracho.bpsinc.jp/tag/%e9%80%b1%e5%88%8arails%e3%82%a6%e3%82%a9%e3%83%83%e3%83%81

Masato Mori

December 13, 2019
Tweet

More Decks by Masato Mori

Other Decks in Programming

Transcript

  1. About Me
 • 森 雅智: @morimorihoge
 • BPS株式会社でRailsの受託開発チームをやってたり、週1大学非常勤で Web開発を教えてたりします
 •

    Ruby/Rails歴は9年くらい。Web開発は15年くらい
 • 銀座Ralis #10でActiveRecordでVIEWを使おうという話をしました
 About BPS & TechRacho
 • Web受託開発や電子書籍製品開発をやっている会社です
 • TechRachoという自社技術Blogを運営しています
 ◦ 3年ほど前から平日毎日更新してます
 ◦ https://techracho.bpsinc.jp/ • お仕事相談、転職相談、TechRachoへのご意見など気軽にどうぞ
 ◦ https://www.bpsinc.jp/ 2

  2. @hachi8833(TechRacho編集部) • 八田昌三(はったしょうぞう) ◦ TechRacho 記事執筆・編集・翻訳( 2016.08 〜) ◦ サイトメンテナンス

    ◦ ローカライズ業界出身 ◦ 好きなもの : 正規表現 /Go/Ruby/Goby など多数 • やってきたこと ◦ Rails チュートリアル翻訳・翻訳ディレクション ◦ Rails ガイド翻訳 ◦ Goby 言語メンテナー 4 ※今日はお休み
  3. これまでの出張Railsウォッチのピックアップテーマ
 • Rails6新機能特集
 ◦ 銀座Rails#12: 複数DB対応
 ◦ 銀座Rails#13: ActionText、Trix
 ◦

    銀座Rails#14: ActionMailbox
 • Railsアプリケーション開発に関する雑多なテーマ
 ◦ 銀座Rails#15: production、development、staging環境につ いて
 5
 ※過去のスライドはTechRachoにて公開しています。「TechRacho 銀座Rails」あたりで 検索するとヒットしますので興味のある方はどうぞ

  4. Ruby 2.7リリース迫る
 • 今年もクリスマス(すなわちRubyのリリース時期)が迫る!
 • パターンマッチ(exprimental)
 • @tmtms さんが怒涛のAdvent Calendar解説をしてたり


    ◦ https://qiita.com/advent-calendar/2019/ruby27 
 • @jnchito さんがパターンマッチのわかりやすい解説記事を出してくれています
 ◦ https://qiita.com/jnchito/items/9bb4aa1dcefa00257815 
 
 6

  5. 実現方法の洗い出しのコツ
 • 「一般的な解」をまずは探す
 ◦ Rails WayだったりメジャーGem だったり、一般的な問題であれば解法が見つかるはず 
 ◦ 「その問題に付いている名前」がわかるとググりやすい

    
 • 問題の分解を試みる
 ◦ 大きい機能を作る場合、 複数の小さな機能の組み合わせ として見ることで、解法のパターンを増や せる
 ◦ 例:「ログイン機能」を「セッション管理」+「ユーザー管理」として分解する、など 
 • その問題を含む、より大きな問題を解決できる方法を調べる
 ◦ 作りたい機能が一部として含まれる大きなライブラリやツール・サービスを利用 する
 ◦ 例:「ログイン機能」を実現するためにOAuthログインやSSOログインなどの認証サービスを検討す る、など
 13

  6. 実現方法の選択基準になり得るもの
 • ベストプラクティスがあるなら検討上位にする価値がある
 ◦ 多くの事例があるということはそれだけ枯れているということ 
 • システムの特殊性がある場合、その用途に特化したものも検討
 ◦ データの局所性が高

    かったり、アクセス時刻の偏りが大きい サービスの場合はベストプラクティスが うまく行かないことがある 
 ◦ サーバーレス環境で動かしたい、インターネット接続不可 などの要件があると取り得る選択肢の幅 が一気に狭まることもある 
 • プロジェクトチームのスキルセットやリソースも検討
 ◦ 「誰かが使ったことのあるライブラリ」はフィジビリティ検証や調査・学習コストが抑えられる 
 ◦ バックエンドエンジニアとフロントエンドエンジニアのバランスや、インフラエンジニアの有無なども影 響する
 • プロジェクトの今後の計画を考慮
 ◦ 多機能なライブラリよりもシンプルなライブラリの方が障害時の追跡がしやすい利点 
 ◦ 将来的な拡張が決まっているならシンプルなライブラリよりも多機能なものを最初から入れてしまっ たほうが結果として手間が少なくなることも 
 15

  7. その設計にした「理由」が説明できるか?
 • システム開発では「唯一の正解」は存在しないため「その時の状況からしてなるべく ベター」な選択をしていく必要がある
 ◦ 考えすぎるとYAGNI(Yet Ain't Gonna Need It)原則に反するので、損切りも大事

    
 • Pull Requestの作成時に、自分の設計・実装を納得してもらうための「理由」を示す と良い設計レビューがしやすい
 ◦ プログラムコードのバグはソースを見ればわかるが、 設計の妥当性は背景や思想の説明がないと とてもやりにくい
 • 設計に関する議論はSlackやF2F MTGなど、プロジェクトチームに合った形でやれ ば良いが、必ずログやスケッチを残しておくこと
 ◦ 後から合流するかもしれないメンバーの設計理解 の役に立ったり、議論したという 証跡を残すことで 後々同じ話が蒸し返されないようにする ことができる
 17