Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
リフォーム Rails app
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Hiroki HIROCASTER OHTSUKA
July 14, 2018
Technology
1.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
リフォーム Rails app
Rails Developers Meetup 2018 Day 3 Extreme
https://techplay.jp/event/679666
Hiroki HIROCASTER OHTSUKA
July 14, 2018
More Decks by Hiroki HIROCASTER OHTSUKA
See All by Hiroki HIROCASTER OHTSUKA
Surge - Amazon DynamoDB for Elixir
hirocaster
2
2.8k
GitHubKaigi Keynote
hirocaster
22
44k
GitHubでつくる、たのしい開発現場
hirocaster
11
13k
Jenkins and GitHub
hirocaster
8
7k
Agile Development Leadership
hirocaster
1
2.4k
あたりまえのアジャイル と その先の世界
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
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
1.9k
hackers_champloo_2026_tidb
makocchi
0
110
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
1
800
夫婦で子育てするための育児標準化
codmoninc
PRO
0
150
Jetson Orin Nanoとk3sとローカルLLMで音声文字起こしシステム作ってみた
y_sera15
0
120
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
410
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
780
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
180
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
360
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.4k
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
7
5.7k
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
350
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
540
Amusing Abliteration
ianozsvald
1
340
Between Models and Reality
mayunak
4
490
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
920
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
The World Runs on Bad Software
bkeepers
PRO
72
12k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
360
Un-Boring Meetings
codingconduct
0
450
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
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