# 為你自己學 Ruby on Rails（第二版）- 序 寫在最前面

> 第一版的「為你自己學 Ruby on Rails」是 2017 年的事，轉眼已過了五年，Ruby 的主流版本從原本的 Ruby 2 系列變成 Ruby 3 系列，而網站開發框架 Ruby on Rails（本書將會以 Rails 簡稱）也從版本 5 昇級到版本 7，除了 Rails 本身的功能有不小的進步外，Rails 對於網站前端的開發配置方式也有很大的變化，但這些變化，也都跟整個網站開發的生態的變化有關

Published: 2022-10-18
URL: http://cdn.kaochenlong.com/railsbook-v2-intro

---

這是一本 Ruby 程式入門書，同時這也是一本可以讓你快速做出產品的參考書籍。

**本書正在連載、撰寫中，待完稿後會集結成冊出版**

第一版的「為你自己學 Ruby on Rails」是 2017 年的事，轉眼已過了五年，Ruby 的主流版本從原本的 Ruby 2 系列變成 Ruby 3 系列，而網站開發框架 Ruby on Rails（本書將會以 Rails 簡稱）也從版本 5 昇級到版本 7，除了 Rails 本身的功能有不小的進步外，Rails 對於網站前端的開發配置方式也有很大的變化，但這些變化，也都跟整個網站開發的生態的變化有關，例如：

- 瀏覽器對 JavaScript/ES6（ECMAScript 6）的支援度越來越高，因此不再需要 CoffeeScript 之類的 JavaScript 轉譯工具，直接寫原生的 JavaScript 也很順手。同時，也因為原生的 JavaScript 的進步跟成熟，原本對一些套件（例如 jQuery）的依賴也降低不少。
- 同時，瀏覽器也開始支援模組化的 JavaScript（ESM），程式寫起來越來越有架構，而不是全部寫在一個 .js 檔裡面。
- 越來越多厲害的打包工具，從功能強大但設定有點麻煩的 [Webpack](https://webpack.js.org/)，到號稱無痛、免設定的 [Parcel](https://parceljs.org/)，有效能超猛的 [esbuild](https://esbuild.github.io/)，還有被某前端框架耽誤的打包工具 [Vite](https://vitejs.dev/)。
- 網站協定從 HTTP/1.1 慢慢變成 HTTP/2 的形狀，而且大部份主流的瀏覽器都已經有支援。在 HTTP/1.1 時期可能會為了減少對伺服器的請求次數或網路連線數，會藉助上述提到的打包工具把網站的 JavaScript 或 CSS 打包成同一個檔案，但到了 HTTP/2 因為支援多管道平行下載，反而不會特別鼓勵打包，就讓每個檔案小而美就好。
- 新的前端套件跟框架不斷的推出…

上述這些種種的變化，都不斷的挑戰各種網站開發框架跟前端開發的整合程度，同時也改變了網站開發者們的開發流程。

&lt;!-- more --&gt;

## 為什麼要寫這本書？

Ruby 是一款寫起來很開心的程式語言，而 Rails 是一個非常具有生產力的網站開發框架。透過 Ruby 簡潔的語法以及 Rails 的巧妙設計，加上大量的第三方套件，就可以很快的就把網站或應用程式的雛型做出來。國內外許多網路新創公司都是選擇它來打造產品，先把產品雛型做出來，放到市場上試試水溫。

如果你曾經聽過 Ruby 這款程式語言或是 Ruby on Rails 這個網站開發框架，也許會聽過類似像是「這種東西很少人用吧？」或是「它不適合開發大型網站」之類的說法，雖然 Ruby 或 Rails 在全世界的使用率並不是前幾名，甚至因為現在的選擇變多了，Rails 的使用率有逐年下降的趨勢。不過這點倒是不需要太擔心，事實上目前國內外有許多知名大型網站或服務（例如 GitHub、GitLab 以及大型電商 Shopify 等服務），都是使用 Ruby 以及 Rails 進行開發的。

不管是 Ruby 或是 Rails，雖然寫起來很開心也很好寫，但它們背後都隱藏了許多的細節，想要真的學好它並不容易，在上手之前的那段路如果沒有適當的指引，這條路可能會走得有點辛苦，特別是對完全沒有技術基礎的新手來說難度更高。我自己是醫學院畢業，身為不務正業的非資訊科班生，我完全可以體會新手在這條路上會吃哪些苦頭（因為我自己就是吃這些苦頭長大的）。正因為所有的技術都得自己想辦法摸索、研究、翻手冊、翻原始碼，所以也更知道新手在學習的時候通常在哪邊會跌倒、踩到地雷。在近幾年[五倍紅寶石程式教育機構](https://5xcampus.com)以及國內各大專院校的課程教學中，我觀察並整理出新手容易卡關的地方，希望可以藉由這本書可以幫大家減緩新手撞牆期的不適感。

我在 2007 年買了第一本 Ruby 的參考書，當年看完之後就只覺得 Ruby 這個程式語言的語法很有趣，但平日公司的業務用的是 ASP 跟 PHP，我不知道這個工具在我日常的工作上可以做什麼。直到 2009 年接觸到了 Rails 之後才發現，原來 Ruby 加上 Rails 這個網站開發框架之後可以讓開發網站變得這麼有趣，而且可以這麼有生產力，能讓我在短時間之內就把想做的東西做出來，有更多的時間可以玩樂、做自己想做的事（或寫更多的程式…）。

因為本身龜毛個性的緣故，在學習新事物的過程中如果有疑惑的地方，總是希望可以搞懂為止，否則只有一知半解會睡不著。因此，本書在撰寫的時候也發揮了我囉嗦的專長，即使是簡單的小地方，也希望可以解釋的夠清楚。我希望不只可以教大家如何寫（How），也能讓大家知道在寫什麼（What），以及為什麼（Why）要這樣寫。

至於 Ruby 或 Rails 的優點、缺點在這裡我就先不多提了，如人飲水，冷暖自知，還請各位自行來體會它們有趣（或不有趣）的地方，這也是本書最主要的目的。

雖然本書是主要是以中文撰寫，但程式語言的專有名詞大多還是英文，所以這些名詞或是常用的口語我還是會盡量使用英文表示。一來是大家的翻譯可能不一樣，例如〝Default〞在繁體中文翻做「預設」，在簡體中文則是翻譯成「默認」；二來也是因為有些英文字翻譯了反而沒有原文貼切，例如〝Context〞、〝Meta Programming〞等字。最重要的一點，是希望各位能盡早習慣這些英文，因為實際在業界工作，很多第一手的技術資料都是英文的，盡早習慣英文對大家絕對是有幫助的。

很多人會想要比較各種程式語言或開發框架的優劣，比較誰的效能好、誰的功能強大等等，但這種「戰爭」是戰不完的，而且本身也沒有太大的意義，更何況我對不精通的語言或工具我也沒那個份量來批評。在本書中或多或少會提到「我當初在某些程式語言是如何實作，但在 Ruby/Rails 是這樣做的」之類的比較，這並非比較誰優誰劣，僅為了給曾經寫過該程式語言的讀者們能更能體會我想表達的意思。

再次強調，各種程式語言或工具之間並沒有絕對的好或不好的問題，只有適不適合的問題。只要能解決問題的，不管是冷門或熱門，都是好的工具。

## 誰適合本書

不管您是程式新手或老鳥、資訊本科系或非本科系，只要你對 Ruby 這個程式語言或是 Rails 這個網站開發框架有興趣都適合。如果您本身已經有其它程式語言或網站應用程式開發的經驗，在閱讀本書應該會相對的比較輕鬆一點點。

## 本書內容

### 會包括以下內容

- Ruby / Rails 介紹、環境安裝
- Ruby 語法介紹
- Rails 的專案架構
- 好用或常用的套件安裝及介紹
- 其它實用功能，例如 Email 寄發、工作排程、購物車、訂單處理、金流串接等
- 如何整合各種前端套件

### 不會包括以下內容

- 不會介紹 HTML/CSS/JavaScript 怎麼寫
- 不會介紹怎麼使用 Git
- 不會介紹所有的 Ruby 語法或是進階的 Meta Programming 技巧

因篇幅有限，沒辦法包山包海，以上內容不會收納在本書內容裡，而且這些主題在坊間都已經有更優秀的參考書籍，可以直接找其它相關資料閱讀，像 JavaScript 我會推薦朋友 Kuro 所寫的「**[0 陷阱！0 誤解！8 天重新認識 JavaScript！](https://www.tenlong.com.tw/products/9789864344130)**」，而 Git 的話，當然就是「**[為你自己學 Git](https://www.tenlong.com.tw/products/9789864342662)**」了 :)

### 你需要準備什麼？

- 一台可以工作的電腦（不一定要 Mac），如果是 Windows 的話，建議記憶體至少加到 8 GB 以上。
- 一款順手的文字編輯器，雖然我自己是 Vim 的愛用者，但建議大家可以使用 [Visual Studio Code](https://code.visualstudio.com/)，它是一款可以開源、免費使用而且功能足夠強大的文字編輯器。
- 這樣就夠了 :)

## 如何使用這本書

本書主要分以下幾部份：

1. 開發工具、環境安裝
2. 程式語言 Ruby 介紹
3. 網站框架 Rails 介紹與實作
4. 前端套件整合
5. 範例實作

雖然每個章節多少都跟前面的章節有相關，但也不一定要依序從第一章開始閱讀（當然這也是一種方式），可依自己的程度或需求跳過部份章節。

## 軟體版本

本書使用的 Ruby 以及 Rails 的版本可能會隨著時間不同而有些不同，本書在撰寫當下所使用的版本為：

- Ruby 3.2.2
- Ruby on Rails 6.1.7 或 7.0.8

為什麼 Rails 的部份特別拉出版本 6 跟版本 7 這兩條戰線呢？雖然目前業界主要使用 Rails 6，但 Rails 7 有不少很酷的新功能，特別是在前端部份也做了不小變動，所以本書的大部份的篇幅將使用 Rails 6 來介紹，而 Rails 7 的內容會在本書後半段有另外的篇幅再行介紹。

## 程式碼慣例

在開發 Ruby/Rails 程式的時候，會有很多機會需要在終端機（Terminal）模式下輸入一些指令，例如：

```shell
$ ruby hello.rb
hello, world
```

或是這樣：

```shell
$ ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [arm64-darwin22]
```

在最前面的 `$` 符號是系統提示字元，意思是告訴各位這是一個需要在終端機環境下自己敲打鍵盤輸入的指令，而下一行則是這個指令執行的結果。實際在輸入指令的時候請不要跟著輸入 `$`，不然可能會出現 `command not found` 的錯誤訊息。

而在本書裡，有時候你可能會看到我這樣寫：

```shell
&gt;&gt; puts &quot;Hello, Ruby&quot;
Hello, Ruby
```

這裡的 `&gt;&gt;` 則是表示這些指令是在 `irb` 或 `rails console` 的環境下輸入的，同樣也不需要跟著輸入這個 `&gt;&gt;` 符號。另外，有時你也會在程式碼裡看到我加上一些註解或說明，例如：

```ruby
def calc(n)
  n * n
end

puts calc(4)    # =&gt; 16
```

在最後一行加上去的註解是說明或是表示這行程式的輸出結果，大家可以不需要跟著輸入。最後，Ruby 目前有好幾種分支實作品（例如 JRuby、mruby、IronRuby 等），各分支實作品也有好幾種版本，如果沒有特別註明，本書中提到的 Ruby 指的都是 CRuby，也就是最常見的 Ruby 版本，目前最新版本是 3.2.2。

## 程式範例及錯誤更正

本書所有的程式碼在 `Ruby 3.2.2` 及 `Rails 6.1.7` 或 `Rails 7.0.8` 的環境下均已測試可正常執行，部份範例可在我的 GitHub 帳號取得。但隨著 Ruby 及 Rails 的版本演進，或是作業系統的不同，範例程式執行的結果可能會有些微的差異（甚至是錯誤）。若有任何問題，或是有哪邊寫錯，還請各位先進不吝留言或來信、留言指教。

最後，希望各位會喜歡這本書，一起來學習 Ruby 這款可愛好寫的程式語言，體驗一下 Rails 這個極富生產力的網站開發框架 :)

## 關於我

高見龍，這看起來有點像武俠小說的名字不是筆名，而是父母給我的本名。目前是兩個小朋友的爸爸，是個愛寫程式而且希望可以寫一輩子程式的阿宅。

- [五倍學院（五倍紅寶石專業程式教育機構）](https://5xcampus.com)創辦人及負責人
- Blog: &lt;https://kaochenlong.com&gt;
- Facebook: &lt;https://www.facebook.com/eddiekao&gt;
- Twitter: &lt;https://twitter.com/eddiekao&gt;
- Github: &lt;https://github.com/kaochenlong&gt;
- Email: eddie@5xcampus.com

若發現本書內容有誤或有任何問題，歡迎直接來信，或到本書網站 &lt;https://railsbook.tw&gt; 留言 :)

