Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
リフォーム Rails app
Search
Hiroki HIROCASTER OHTSUKA
July 14, 2018
Technology
0
1.7k
リフォーム Rails app
Rails Developers Meetup 2018 Day 3 Extreme
https://techplay.jp/event/679666
Hiroki HIROCASTER OHTSUKA
July 14, 2018
Tweet
Share
More Decks by Hiroki HIROCASTER OHTSUKA
See All by Hiroki HIROCASTER OHTSUKA
Surge - Amazon DynamoDB for Elixir
hirocaster
2
2.7k
GitHubKaigi Keynote
hirocaster
22
44k
GitHubでつくる、たのしい開発現場
hirocaster
11
13k
Jenkins and GitHub
hirocaster
8
6.9k
Agile Development Leadership
hirocaster
1
2.3k
あたりまえのアジャイル と その先の世界
hirocaster
2
4.1k
サムライ・エピソード
hirocaster
1
2.6k
Let's Pair Programming
hirocaster
1
1.4k
The GitHub
hirocaster
2
24k
Other Decks in Technology
See All in Technology
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
640
日本の85%が使う公共SaaSは、どう育ったのか
taketakekaho
1
250
GitHub Copilot CLI を使いやすくしよう
tsubakimoto_s
0
120
外部キー制約の知っておいて欲しいこと - RDBMSを正しく使うために必要なこと / FOREIGN KEY Night
soudai
PRO
12
5.7k
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2.6k
OpenShiftでllm-dを動かそう!
jpishikawa
0
150
プレビュー版のDevOpsエージェントを現段階で触ってみた
ad_motsu
1
110
プロポーザルに込める段取り八分
shoheimitani
1
710
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
380
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
360
私たち準委任PdEは2つのプロダクトに挑戦する ~ソフトウェア、開発支援という”二重”のプロダクトエンジニアリングの実践~ / 20260212 Naoki Takahashi
shift_evolve
PRO
2
240
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
2
250
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
70
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Why Our Code Smells
bkeepers
PRO
340
58k
Mind Mapping
helmedeiros
PRO
0
91
The Mindset for Success: Future Career Progression
greggifford
PRO
0
240
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Git: the NoSQL Database
bkeepers
PRO
432
66k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Prompt Engineering for Job Search
mfonobong
0
160
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Transcript
リフォーム Rails app hirocaster @ Railsdm 2018 Extreme
About me hirocaster ( Hiroki Ohtsuka ) 株式会社ミクシィ XFLAG開発本部 たんぽぽG
モンスターストライク/新規事業、etc https://hiroki.jp/profile JRuby, Elixir, Ruby, Padrino, PHP, Chef, Puppet, Agile, Scrum, XP, TDD, CI/CD, DevOps 著書: GitHub実践入門 ~Pull Requestによる開発の変革 など
前提 この話は老朽化したRailsアプリケーションを修復して快適に住ん でいくためのTips集です。 こんな時に思い出してみてください 既存のプロジェクトの後からjoinした時に 技術的負債を積立ないための仕組み作りの時に Railsのメジャーバージョンアップや大規模な改修の前に今回紹介 するようなことを済ましておくことをおすすめします。
範囲 Rails/Rubyなど利用した方法を範囲とします Railsのメジャーバージョンアップ方法には触れません インフラ、チームマネジメント、人間寄りの開発手法には触 れません
さて、はじめましょう。
開発環境を整える テストを追加したり、簡単に動作を確認できるようにすれば、比 較的安全にシ ステムに変更を加えることができる状況にする。 Setup CI/CD Travis CI, Circle CI,
GitLab, Jenkins Setup Testing Framework TestUnit, RSpec Setup Staging システムを破壊してもユーザ影響のない環境を 気軽に動作確認できることが必要
セキュリティ 脆弱性のあるバージョンを利用するのをすぐにやめる Rails/Rubyのverup パッチバージョンを上げられないかリリースノートを確 認 バージョン番号について Semantic Versioning GitHubからのセキュリティアラート About
security alerts for vulnerable dependencies - User Documentation Gemfile.lock bundler-audit Breakman 実際のコードを修正して脆弱性を修正/抑制する ヒューマンミスでも脆弱性を作りづらいコードを書く updateするだけの作業はさくっとやってしまおう
フレームワーク/ライブラリ都合の変更作 業 FactoryGirl -> FactoryBot depricate method depricate gem paperclipとか...
置きかえるだけなら、サクっとやってしまおう
次からは頭をつかっていく
おかしなコード 新参者が見ると慣れがないので見つけやすかったりする おかしいかも? なコード 歴史的に不要になったけど削除されてないコード warningが発生しているもの 大幅な変更時に壊れたままのコードなど 本来はこんなコードは無いことが望ましい
実際におかしなコードをあぶりだしてみ る
おかしなコードをあぶりだす(0) おかしなところは…?
おかしなコードをあぶりだす(1) Syntax Checkerの力をかりると… ruby-lint, IDE(RubyMine) とか使う
おかしなコードをあぶりだす(2) 参考までに私の環境だと... emacs + flycheck(rubocop + ruby-lint)
おかしなコードをあぶりだす(3) コードカバレッジを見てみると テスト無いようですねὠ
何がおかしいの? s o u r e c e [ "
l a s t - m o d i f i e d " ] ≠ s o u r c e [ " l a s t - m o d i f i e d " ] おそらく変数名のtypo そもそも s o u r c e 変数が存在していない git logを確認してみる 大きなメソッドを切り出したメソッドのようだ… 元コード変数がそのままのこっているようだ… s o u r c e を引数として渡すのを忘れたようだ… その際にガード節も追加されてようだ…
正しい実装を把握する じゃあ、引数に s o u r c e を追加してtypo直せば良いの? コードの整合性を整えるのであれば、それだけでOK
appとしては、それが正しい実装なのか? 考え、確認する必要がある テストを書くと理解しやすい/しないと書けない 理解できてないテストは考慮不足 カバレッジを通すだけのテストなど
で、どうしたの? 処理を一通り確認するとガード節があることによって、if文まで来 たときには必ずtrueになる。 => else の処理はいらない テストを追加する必要がなかった (到達できない処理なので追加できない)
めざすのは ὡ コードの整合性が保たれている状態 ὠ appとして期待されている動作をしている状態
他にあぶりだす方法は? 実際に動作させてエラーを取得する ログファイルだけだと見にいく手間が面倒 外部サービスを利用して、通知してもらうのがおすすめ Sentry, Rollbar, Airbreak エラーが発生する箇所は 壊れている or
改善の余地がある
修正するときは? テストコードを追加/修正する 保守性/互換性を考慮する どっちを取る? 厳密な動作 or 保守性 セキュリティを考慮 簡単に脆弱性を埋めこまないコードの書き方 1行変更するだけで脆弱性が発生するようなのは避け
る
そもそも老朽化させないために...
負債を積立しない仕組みづくり CI, pre-commit などを利用して 適切な時に 適切なメッセージを 誰もが理解できるように 伝える "仕組み" をつくる
今後、開発者が増えても開発がスケールしやすくなる 参考: Scaling Teams using Tests for Productivity and Education