[講座分享] 就此愛上 PhpStorm — 以 Laravel 開發為例 (線上讀書會)

還在揪結於到底該用哪個 Editor/IDE 嗎?我的選擇是這樣的

楔子 — 我的 Editor/IDE 更迭史

假如你接觸程式開發的時間夠長,或是你年紀夠大的話,那你一定能夠看懂這則漫畫的笑點:

是的,對於一位工程師來說,到底該選 Editor 還是 IDE?又或者是到底該選哪個 Editor/IDE?成了開發圈裡的千古戰文。工程眾們各自擁護,喋喋不休也樂此不疲。

我有幸也算是參與到了這個過程,回想自己的編輯器更迭史也是落落長一大串。早期因為自己是從設計出發,所以我最早接觸用來撰寫 PHP 程式碼的編輯器其實是 Dreamweaver (別鄙視它,早期對我這種不會寫程式的麻瓜來說,Dreamweaver 這種可以設定 Data Source、動態產生 Master & Detail Page 的工具簡直是神器!),而後想當然爾的用過 UltraEditNotepad++。後來聽說大神都用 Emacs/Vim,也想當大神的傻勁加上 Linux Server 版也沒圖型介面就硬著頭皮加減學了一下。後來發現自己離大神太遙遠、手感練不起來,加上程式碼愈來愈複雜,改研究起 IDE 系列的 Eclipse PDTNetbeans,看能不能解決自己記性差需要提示的問題。到了近幾年 Sublime TextAtomVisual Studio Code 各據山頭,每個都試了一下,Editor/IDE 的世界可謂濟濟一堂、好不熱鬧!

逛了一大圈,年紀有了,也風流 (?) 過了。您問我的決定?嗯~我的想法是這樣的:假如您跟我一樣記憶力不佳、但認真的想要做複雜的 PHP 應用程式開發、不想花太多時間調校/整合工具願意花一點預算的話,那我會建議您選一個順手的 IDE 來幫助您。而以 PHP 界的 IDE 來說,真的有在認真處理 PHP 開發者需求的,大概也就只有 JetBrains 的 PhpStorm 了。


講座內容

因此,當 線上讀書會 的會長 紀大大 邀請我挑個 Laravel 主題分享時,我就在思考,假如只是分享 Laravel 的話似乎不缺我這一場;而我當初選擇 Laravel 也是因為其對我在產能上的幫助,那我何不針對開發 Laravel 的效率上再添點油?因此,融合 Laravel 與 PhpStorm 兩個主題的概念於焉而生。

其實 JetBrains 官方針對 PhpStorm 一直以來都有官方指南、文件、頻道在做功能教學。在這樣不缺傳教士的情況下,我可以用什麼樣的角度來切入呢?我想到的是,與其針對單一功能做獨立的介紹,其實對工程師來說,如何將常用的功能串起來,建立一個有產能、有效率的工作流程才是大家最需要被啟發的部份。

所以,在這次的講題設計裡,我決定以實作一個簡單的 Todo 應用程式為例,透過撰寫 Laravel 程式碼,將開發過程中從建立專案、安裝套件、編輯程式碼、工具鍊整合到測試的完整流程做一次給大家看。希望能啟發大家使用編輯器不止是拿一個工具來用,而是如何透過流程的打造,建立自己的開發節奏。

本次講座的 錄影投影片,我通通都上傳/公開到對應的平台了,也直接嵌入在下方方便大家一邊看錄影、一邊對照投影片內容:

講座錄影
講座投影片

此外,在這邊整理一下本次講座所推薦的幾個 PhpStorm Plugin:

當然,雖然這次的講座本質上是 PhpStorm 的推坑,但最後還是要在「選擇工具」這件事上保持中立立場。基本上編輯器對開發者來說就是個生財工具,所以管它黑貓白貓,能抓老鼠的就是好貓。換句話說,順手最重要!不論您是哪一套開發工具的好愛者,相信您都可以找到最適合您的!若有任何想法,歡迎透過留言分享及交流。


會後 Q&A

這次講座結束後,有些聽眾陸續提問,由於這段錄影效果不好所以就剪掉了,直接用文字紀錄更清楚些。問答內容如下:

  1. 每一次開發新專案都會使用最新版嗎?Laravel 各版本間有沒有偏好的版本?
    會。主要的原因是我以 Laravel 傳教士自居,所以只要 Laravel 有新版我就一定會身先士卒先踩雷。當然,另一方面也是想要使用新版的功能才會這麼的積極。若是團隊開發考量想要求比較穩定、安全的作法的話,可以考慮用 LTS 的版本,目前 5.1 是第一個 LTS 版本,預計今年 7 月會推出 5.5,也就是第二個 LTS 版本。所以可以先採用 5.1~5.4 的任一版,然後今年 7 月時升到 5.5。(Laravel 5 以後基本架構差異沒有很大,升級上不算太痛。)
  2. 每次寫 Laravel 都需要像示範的過程做這麼多步驟嗎?有沒有更快的方式?
    在這次的示範裡,為了模擬第一次使用 PhpStorm 及 Laravel 開發,所以大部份的動作我都從無到有一步一步打造。實務面上來說,其實不一定需要這麼辛苦。您其實可以把每次都要做的這些動作做成自己的啟始包,不論是直接複製資料夾,或是把它變成 Composer Package,都可以減少下一次重頭來的時間。
  3. PhpStorm 好像有些地方還是沒辦法完全認識/提示 Laravel 的程式碼,比如說 routes/web.php 裡的 Route?
    的確,因為 Laravel 的程式碼裡用了太多 Magic (!),所以許多動態 Facade、類別、屬性即便 PhpStorm 再強還是沒辦法 100% 的猜出來。好在也有神人做了 Laravel IDE Helper 這個套件,它可以透過指令產生出 PhpStorm 需要的 Meta 檔,讓 PhpStorm 更認識 Laravel!
  4. PhpStorm 有辦法針對 HTML 或 Blade 做排版嗎?
    可以試著在偏好設定裡面設定 Code Style,PhpStorm 可以針對 HTML、PHP 等不同程式語言做排版風格的設定。
  5. PhpStorm 有 Bootstrap 或 Vue.js 的外掛嗎?
    PhpStorm 有完整的外掛系統生態系,大多數你想得到的需求都有對應的外掛,建議到 PhpStorm 的外掛系統搜尋庫裡面找找。我試著搜尋了一下後,發現 BootstrapVue.js 的都有。
  6. PhpStorm 裝很多外掛會不會很花效能?
    可能會,但我自己實際使用上並不明顯,所以應該不太需要在意這個問題。而我自己的態度是,既然用了重裝備就是希望能減輕我的工作負擔,效能/電力等問題可以用其他手段 (Ex. 花錢用更好的硬體) 解決。
  7. 我聽說有些前端在用 WebStorm?PhpStorm 和 WebStorm 的差異在哪裡?
    JetBrains 可謂世界上最會做 IDE 的公司 (對,我知道地表最強的 IDE 是 Visual Studio,這邊是說他們最會做各式各樣的 IDE…),幾乎每一個語言都有對應的 IDE 可用,而 WebStorm 就是 JetBrains 針對前端工程師開發的 Javascript IDE。好消息是,PhpStorm 本身就包含了 WebStorm 的功能,所以若是您是所謂的「全」端工程師的話,用 PhpStorm 就可以讓你一路從後端打到前端,不用買兩套。

Webinar 經驗分享

雖然不是第一次做分享、也不是第一次做線上會議,但是說到底自己做 Webinar 的經驗還真是少之又少;加上這次的講座也打算採用 Live Demo 的方式,所以這次在準備的過程中其實蠻緊張的。好在有上一次在 PHP 也有 Day #28 的 Live Demo 經驗,這次在 Rundown 的準備上可是做足了功課,加上 Webinar 的好處就是觀眾看不到我,所以我的工作桌被我搞成這樣:

所謂台上 10 分鐘,台下 10 年功。講者後台其實是凌亂不堪的…

主要的工作機是中間的 MacBook Pro,做廣播及畫面錄影,原本拿來做延伸桌面的螢幕,為了降低硬體消耗所以拔掉變成我貼整場 Rundown 表的面板。左邊是我的 Dell Laptop 做提示及備援用,在講座進行時其實還有手機立著放在一旁做計時提示。

實際進行過一次 Webinar 後,就大概可以知道下次哪些地方可以改善,也順道紀錄一下做為參考:

  1. 解說時語調的抑揚頓挫
    這次發現 Webinar 跟平常做分享最大的差異就是:「沒有觀眾」。所謂沒有觀眾的意思是講者沒辦法實際上「看到」觀眾,也因為你看不到觀眾,就代表你不知道觀眾的反應、無法從觀眾身上取得立即的回饋;沒辦法得到回饋就代表你無法即時的調整/修正你講解的方式。也因為這樣的現況,讓我發現就沒辦法像平時那樣「人來瘋」的自嗨;也因為是對著機器在講解,我發現我在解說時語調就會變會趨於平緩,事後再聽錄影時覺得若是當時的聽眾只要一個分心應該就很容易睡著…。下次我覺得要讓自己的聲音表情再豐富一些,至少語調的抑揚頓挫要清楚明顯,才不會讓解說變得太平淡。
  2. 分段點
    這次發現的第二點是,因為參與 Webinar 的聽眾只能透過螢幕看講者的畫面、聽講者的聲音;加上 Webinar 可以遲到早退、甚至聽眾可以一邊做自己事的特性,讓我意識到可能不是所有的聽眾都全程將 100% 的注意力放在你的講座裡。換句話說,有些聽眾可能只想/只能聽其中一段。所以我們在分享的時候,如何清楚的提示聽眾你現在講的這段的主題是什麼?這段主題又是在整場講座裡的那一個階段?似乎就變得異常重要了!我覺得可以透過一些畫面設計上的提示,或是透過講者在每一段切換時的說明來改善這點。
  3. 說出你在做什麼?
    由於 Webinar 異地的特性,不僅是講者看不到觀眾,同樣地,觀眾也看不到講者。所以當講者在打字、在切換軟體、在做一些預備動作、甚至是講者不小心弄錯東西時,其實觀眾並不是真的知道現在發生什麼事?所以針對這點的限制我的策略是,盡量將自己正在做什麼用描述的方式講出來,降低講者和聽眾間的資訊不對稱。這其實跟以前我在學易用性設計時,有一招叫「放聲思考法」概念類似。就是我把我所想的、我所做的都講出來,讓在旁邊的人可以觀察、同步我的思路。尤其是這場有很多鍵盤操作的示範,我甚至裝了 KeyCastr 這個軟體 (Windows 上也有一個 carnac、Linux 上也有 screenkey 或是另一個 Python 的版本),讓觀眾可以「看」到我的鍵盤打了什麼。P.S 後來發現 PhpStorm 有一個 Plugin 叫 Presentation Assistant 就是專門為了這個情境設計的 :)
  4. 與觀眾互動方式
    一樣,因為講者和觀眾是彼此看不見對方的,所以互動方式就無法套用跟現場講座一樣的方式。我個人覺得比較好的方式還是講者講完再開放 Q&A 會是比較好的方式,假如整個活動能有主持人來協助的話會更好。也就是說整個活動能有一個統籌的人跟所有參與的人宣告目前到哪個階段?大家可以做什麼事?有個人來幫忙維持秩序總是有幫助的。
  5. 錄影及硬體效能
    這次的 Webinar 是有錄影的,不過由於直播就已經很花效能,又要同時錄影的情況下,我發現我的老 MacBook Pro 偶爾會有力不從心的狀況,拖累我的系統反應,導致中間 Demo 曾凍結兩次。我覺得發生這樣的狀況聽眾是可以理解的,只是講者要先做好心理建設,遇到這樣的情況時不要亂了陣腳,簡單說明帶過即可。

工商服務

我在台灣推廣 Laravel 已經有三年半的時間了,從一開始小貓兩三隻到現在 Laravel 台灣 Facebook 社團五千人次也算是小有成果。因此,我目前正在積極籌備在今年 (2017) 的 7/1 (六) 舉辦台灣首屆 LaravelConf!這會是一個雙軌議程的開發者年會,講題涵蓋 Laravel 開發技巧、團隊合作及流程、架構設計、前/後端整合及 API 設計、測試、部署等,敬請期待!

LaravelConf Taiwan 2017 年會官網 https://laravelconf.tw

目前大會 官網粉絲頁 都已經上線,並且正在開放 填寫問卷訂閱電子報。不論您是對 Laravel 有興趣、想了解或已經熱戀中,都歡迎您一同來參與這場盛會。若是貴公司/單位有意願贊助此次大會,或是有任何合作計劃、對大會的期待等,都歡迎您直接與我聯絡!


特別感謝

本次講座感謝 線上讀書會 會長 紀大大 的邀請,讓我能有機會把更有效率的開發方式介紹給 PHP 的愛好者。另外,也感謝 JetBrains 官方的支持,除了提供官方投影片樣板、協助審閱投影片內容外,也到場回答現場問題 (謝謝 Lenyo)。最後,要感謝我的公司 得寬科技 一直以來對技術推廣的支持,讓我可以持續花時間投入這一塊領域,我們團隊的教育訓練服務:Laravel 道場,除了開設完整的 PHP/Laravel 課程,也有提供顧問與教練服務歡迎與我們聯絡