$30 off During Our Annual Pro Sale. View Details »

2022 - COSCUP - 打造高速 Ruby 專案開發流程

2022 - COSCUP - 打造高速 Ruby 專案開發流程

現代軟體開發對於品質跟速度的要求越來越高,然而當我們開始一個全新專案的時候,總是難以很好的兼顧這些問題,這場演講將會分享如何實踐。

蒼時弦や

July 31, 2022
Tweet

More Decks by 蒼時弦や

Other Decks in Programming

Transcript

  1. 打造⾼速 Ruby 產品


    開發流程

    View Slide

  2. @elct9620
    THE
    PROGRAMMER


    OF CREATIVE
    ႏָࣛɰ

    View Slide

  3. #Consulting
    Job

    View Slide

  4. #Ruby/Rails Course and Tools
    Product

    View Slide

  5. https://blog.aotoki.me
    Blog

    View Slide

  6. https://discord.com/invite/t2Kd6PNvvA
    Discord

    View Slide

  7. https://www.youtube.com/channel/UCcABbJfCL0DfNh3wDk_-7lg
    YouTube

    View Slide

  8. 慢在哪裡

    View Slide

  9. View Slide

  10. 初始化
    當我們做完 rails new 命令後,還有多少設定要調整

    View Slide

  11. 規格
    確認規格後到實現功能要多久的時間

    View Slide

  12. 審查
    撰寫的程式碼符合團隊風格、沒有太多技術債、壞味道的檢查時間有多長

    View Slide

  13. 測試
    完成的功能測試所需的時間,是否有⾃動測試和⼈⼯測試

    View Slide

  14. 部署
    安裝伺服器、完整的網路、雲端等設定所需的時間

    View Slide

  15. 監控
    產品部署後是否可以順利監控效能、錯誤並且得以持續改善

    View Slide

  16. 敏捷⽅法

    View Slide

  17. 完成
    Done 跟 Finished 不同在於前者是「堪⽤」後者是「結束」

    View Slide

  18. 可驗證
    在「堪⽤」狀態下表⽰「功能不完整」但可⽤,因此可以透過⾃動測試驗證完成狀況

    View Slide

  19. 由上⾄下
    從完整的設計系統改為「可以看到畫⾯」或「可以呼叫 API」的⽅式開始開發

    View Slide

  20. 關注功能
    開發產品需要關⼼的是功能的可⽤,因此⽬標是打造「最⼩可⾏」的功能(產品)

    View Slide

  21. 持續整合
    產品只有⼀個主幹分⽀所有⼈直接推到 main branch,隨時都保持在最新的狀態

    View Slide

  22. ⾃動測試
    為了可以持續整合,我們需要⼤量的⾃動測試確保「功能」正常

    View Slide

  23. 重構
    在有測試保護的狀況下已不改變功能的前提「持續改善」程式碼

    View Slide

  24. 持續部署
    產品的所有功能隨時都是可⽤的狀態,隨時都可以部署給使⽤者使⽤

    View Slide

  25. 功能開關
    尚未準備好釋出的功能使⽤ Feature Flag 保護起來,讓持續部署得以實現隨時部署

    View Slide

  26. 敏捷開發是⽂化、流程上的改變

    View Slide

  27. 思考
    無法改變⽂化、流程的狀況下,還能做些什麼?

    View Slide

  28. 使⽤⼯具

    View Slide

  29. Bankai
    預先設定好習慣的 Rails 專案設定,初始化專案只需要數分鐘
    https://github.com/5xRuby/bankai

    View Slide

  30. Cucumber
    E2E 測試⼯具,⽅便溝通規格以及確認使⽤者⾓度的「使⽤」是沒問題的

    View Slide

  31. RSpec
    夠熟練的話⽤來寫單元測試非常好⽤,適合針對 Cucumber 的細部功能做測試

    View Slide

  32. Rubocop
    減少 Code Review 針對寫法的檢查,⾃動化的檢查撰寫的風格和避開容易出問題的寫法

    View Slide

  33. Brakeman
    針對 Rails 常⾒資安問題的寫法做檢查,可以減少常⾒的⼈為疏失

    View Slide

  34. Bundler Audit
    ⽤來檢查 Ruby Gem 的漏洞,來確保可以持續更新到沒問題的版本

    View Slide

  35. Bundler Leak
    跟 Bundler Audit 類似,可以⽤來找到使⽤的 Ruby Gem 是否有記憶體洩漏的問題

    View Slide

  36. Ruby GitLab CI Tempalte
    預先設定從靜態分析到測試和部署所有步驟的樣板,可以快速的完成 CI/CD 流程的建置
    https://github.com/elct9620/ruby-gitlab-ci

    View Slide

  37. ⾃動⽣成 Production ⽤的 Dockerfile 可以節省⾃⼰撰寫跟設計的時間
    Boxing

    View Slide

  38. 容器的 Entrypoint ⼯具,可以增加安全性以及確保 Rails 在資料庫準備好後才啟動
    Openbox
    https://github.com/elct9620/openbox

    View Slide

  39. Health Check ⽤的套件,可以⾃訂檢查規則來快速讓 AWS ALB 這類服務能做檢查
    Liveiness
    https://github.com/elct9620/liveness

    View Slide

  40. ⼯具、技術、⽂化漸進式的改善

    View Slide

  41. #Thanks
    Q&A

    View Slide