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.5k
リフォーム 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.5k
GitHubKaigi Keynote
hirocaster
22
43k
GitHubでつくる、たのしい開発現場
hirocaster
11
13k
Jenkins and GitHub
hirocaster
8
6.8k
Agile Development Leadership
hirocaster
1
2.2k
あたりまえのアジャイル と その先の世界
hirocaster
2
4k
サムライ・エピソード
hirocaster
1
2.5k
Let's Pair Programming
hirocaster
1
1.4k
The GitHub
hirocaster
2
24k
Other Decks in Technology
See All in Technology
DenoでもViteしたい!インポートパスのエイリアスを指定してラクラクアプリ開発
bengo4com
2
1.9k
ガバメントクラウド開発と変化と成長する組織 / Organizational change and growth in developing a government cloud
kazeburo
4
730
受託開発でもアジャイル開発できました / Agile in Contract Development
takaking22
0
250
Semantic Kernel の Agent 機能試してみた!
okazuki
1
140
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
2
220
【shownet.conf_】トポロジ図の歩き方
shownet
PRO
0
490
山手線一周のパフォーマンス改善
suzukahr
0
160
普通の Web エンジニアのための様相論理入門 #yapcjapan / YAPC Hakodate 2024
ytaka23
5
1.3k
エムスリーマネジメントチーム紹介資料 / Introduction of M3 Management Team
m3_engineering
0
270
All your memory are belong to… whom?
ennael
PRO
0
650
AI時代のアジャイル開発(XP祭り2024版) / Agile Development in the AI Era in XPJUG
takaking22
13
3.6k
【shownet.conf_】持続可能な次世代Wi-Fi運用に向けて
shownet
PRO
0
340
Featured
See All Featured
Making Projects Easy
brettharned
115
5.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
105
48k
Why Our Code Smells
bkeepers
PRO
334
57k
Designing for humans not robots
tammielis
249
25k
Statistics for Hackers
jakevdp
796
220k
Practical Orchestrator
shlominoach
186
10k
RailsConf 2023
tenderlove
28
840
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
41
9.2k
Fontdeck: Realign not Redesign
paulrobertlloyd
81
5.2k
How to name files
jennybc
77
99k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
7
290
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
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