iT邦幫忙

1

一鍵啟動 Gemini CLI ! 我的 Gemini CLI 懶人工具開發 & Gemini CLI 應用心得分享

  • 分享至 

  • xImage
  •  

Gemini CLI 簡介 &問題背景介紹

大家好我是一宵三筵!
Gemini 出了 CLI 版,可以直接在電腦的 terminal 上面執行,而且可以直接使用中文下指令

使用自然語言跟他對話後,他可以利用script指令,直接對電腦中的檔案去掃描、解析,甚至生成與編輯.要更動前也會詢問並要求授權,可以看過之後再同意gemini做動作

Gemini CLI只要登入google帳號就有免費的額度可以使用
不像 Claude Code 只有付費版,而且 20美/月 的方案要用來開發專案可能不太夠用
在配合公司開發環境下,我預設的 Node 是 v18 ,安裝 Gemini CLI 會失敗 (我也想升級Node RRR)
於是搭配nvm 把 Gemini CLI 裝在 Node 22

所以每次都要先 nvm use 22,再輸入 gemini
而且,如果是直接打開終端機就啟動 gemini,就會有以下的警告:

You are running Gemini CLI in your home directory. It is recommended to run in a project-specific directory.

https://ithelp.ithome.com.tw/upload/images/20251023/20135750GXCqEhKRXx.png

意思是說你直接在根目錄裡面啟用Gemini CLI很危險啊!
萬一你下了一個指令,說要把目前資料夾的什麼東西給砍了,動到你的系統檔案要怎麼辦

因此還有一個步驟是要cd 到專案資料夾,才能啟用Gemini CLI
每次打開終端機就要做這三件事,真的好麻煩喔——
所以就寫了一個 Launcher,把這三步自動化,並包成桌面 App(支援 Mac / Windows )
另外提供 Gemini CLI的 GitHub傳送門: Gemini CLI


問題整理&前言

  1. 預設 Node 版本太舊(公司環境是 v18),安裝/執行 Gemini cli 會失敗。
  2. 每次都要手動切版本、切目錄、再啟動 Gemini cli。
  3. 在 home 目錄啟動會出現警告:You are running Gemini CLI in your home directory...,風險高。

這三個固定步驟太麻煩ㄌ,我想要可以一鍵完成這些動作。
如果懶的看我的心路歷程,可以直接到git hub的頁面去看使用說明跟下載
https://github.com/lalame888/gemini-cli-launcher

接下來要分享的是「怎麼從需求 → 初版解決問題 → 改進」的故事與過程
最尾端有分享一點我使用Gemini CLI 的心得,以及與Cursor的比較

基本上所有的程式碼,包含圖示icon,都是跟 Gemini CLI 對話生成出來的
也算是測試一下性能,結論是: 有升級 Gemini Pro的話真的很好用!沒有的話很雞肋。
大家可以趁2025/12/9 之前,拿大學的信箱去申請看看一年的pro試用

好了前言結束,要來分享整個歷程故事了,Go Go !


第一版:bash script(最短路徑)

在直接點開終端機之後,總共有三個固定步驟要處理

  1. 要切node版本,使用 nvm use 22 來切到比較新的版本
  2. 要在我專案的資料夾開啟終端機,意味需要 cd 到我專案的資料夾下
  3. 要打字輸入 gemini

於是我最初的想法是:
寫一個script腳本檔案,然後放在mac下方的dock列
這樣我就可以當作某種app點擊執行,叫出終端機的同時也完成以上步驟

同樣請gemini處理,腳本擋很快就寫好了
他甚至也預想好在腳本檔案裡面,沒辦法直接使用nvm指令問題,所以有做引入的動作

#!/bin/bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

cd /*指定的資料夾路徑*/
nvm use 22 && gemini

可是在儲存檔案之後,他會長得像是這樣

https://ithelp.ithome.com.tw/upload/images/20251023/201357503WA4LnSgBd.png

雖然能把這個 script 放桌面或任何地方,也能放到底下的dock列
但是看起來是個文件,實在不太直覺

https://ithelp.ithome.com.tw/upload/images/20251023/20135750We4zb2pYuj.png


第二版:包成 AppleScript!給它 icon! 從SVG → PNG → App icon

有點可惜的是 Gemini CLI他不能直接生成圖片放在我的電腦裡,但他可以生成svg檔案
所以問題不大,只要能轉換就好!於是再請gemini 用 Python 把 SVG 轉成 PNG:

SVG_FILE="${DESKTOP_PATH}/gemini_icon.svg"
PNG_FILE="${DESKTOP_PATH}/gemini_icon.png"
python3 -c "import cairosvg; cairosvg.svg2png(url='${SVG_FILE}', write_to='${PNG_FILE}')"

執行之後,登登!得到了這樣的可愛的PNG檔案
https://ithelp.ithome.com.tw/upload/images/20251023/20135750RJTH8dyl5M.png

但發現 script 檔無法直接換 icon!
有試過各種換icon的方式,就唯獨腳本檔不能更換!
於是又問問gemini該怎麼辦?

得到的回覆是:可以用 AppleScript 包成一個真正的應用程式,這樣就能換 icon 並放到 Dock!
然後 Gemini 一陣咚咚咚,用 osacompile 指令寫了一個 AppleScript,裡面使用 do shell script

也就是點了這個應用後,執行的動作就是

  1. 打開terminal
  2. 去找剛剛生成的 Start_Gemini.command 檔,執行這個檔案的內容

用這樣的方式,成功包裝成了一個 Gemini_CLI.app ,就可以來換icon並放到執行列裡面了!好耶!
https://ithelp.ithome.com.tw/upload/images/20251023/20135750RNYURbafhV.png

更換APP icon

這邊介紹更換 icon 的兩種方式:

  • 方法一 :直接用png圖片,透過Finder資訊複製貼上 (推薦)
    (1) 複製png的圖像
    (2) 對著包好的應用程式,右鍵 > 取得資訊 > 點擊左上角的icon讓他發出藍色光暈
    https://ithelp.ithome.com.tw/upload/images/20251023/20135750njamYrfyWw.png
    (3) 鍵盤command + V 貼上
    https://ithelp.ithome.com.tw/upload/images/20251023/20135750mcYXB8gWxS.png

    icon加進去了,檔案大小很合理的也跟著變大了一點

  • 方法二:底層指令法(進階):

    (1) 製作icon檔 (.icns)

    PNG_FILE="${DESKTOP_PATH}/gemini_icon.png"
    ICONSET_DIR="${DESKTOP_PATH}/gemini.iconset"
    ICNS_FILE="${DESKTOP_PATH}/gemini.icns"
    
    # 使用 sips 產生所有需要的尺寸
    sips -z 16 16 "${PNG_FILE}" --out "${ICONSET_DIR}/icon_16x16.png" > /dev/null 2>&1
    sips -z 32 32 "${PNG_FILE}" --out "${ICONSET_DIR}/icon_16x16@2x.png" > /dev/null 2>&1
    sips -z 32 32 "${PNG_FILE}" --out "${ICONSET_DIR}/icon_32x32.png" > /dev/null 2>&1
    sips -z 64 64 "${PNG_FILE}" --out "${ICONSET_DIR}/icon_32x32@2x.png" > /dev/null 2>&1
    sips -z 128 128 "${PNG_FILE}" --out "${ICONSET_DIR}/icon_128x128.png" > /dev/null 2>&1
    sips -z 256 256 "${PNG_FILE}" --out "${ICONSET_DIR}/icon_128x128@2x.png" > /dev/null 2>&1
    sips -z 256 256 "${PNG_FILE}" --out "${ICONSET_DIR}/icon_256x256.png" > /dev/null 2>&1
    sips -z 512 512 "${PNG_FILE}" --out "${ICONSET_DIR}/icon_256x256@2x.png" > /dev/null 2>&1
    sips -z 512 512 "${PNG_FILE}" --out "${ICONSET_DIR}/icon_512x512.png" > /dev/null 2>&1
    sips -z 1024 1024 "${PNG_FILE}" --out "${ICONSET_DIR}/icon_512x512@2x.png" > /dev/null 2>&1
    
    # 將 iconset 目錄轉換為 .icns 檔案
    iconutil -c icns "${ICONSET_DIR}"
    

    (2) 然後使用指令設置上去

    # icon檔案 = gemini.icns
    # icon替換目標檔案 = Gemini_CLI.app
    cp gemini.icns "Gemini_CLI.app/..namedfork/rsrc" && SetFile -a C "Gemini_CLI.app"
    

使用第一個方式的時候,其實Mac OS的Finder就幫是我們執行這些指令
所以兩個結果都是一樣的,實際都是生成icns, 然後貼進去設置
只是透過GUI介面的操作,gemini cli沒辦法幫我們執行而已

然後成品就像是這樣!

https://ithelp.ithome.com.tw/upload/images/20251023/201357506h15oohOZ3.png

放到Mac的Dock列,就像一個應用程式一樣,超級方便

https://ithelp.ithome.com.tw/upload/images/20251023/20135750n21N9iCebF.png

這樣就完成了本地打包成桌面APP、並加上可愛的icon!

不過這個做法,指令是寫死的,且 Start_Gemini.command 的位置也不能隨意更動
不是一個真正的應用程式,只是弄了一個殼來「假裝是APP」而已


第三版:跨平台(Python GUI)與打包

完成了AppleScript之後就開始想著:能不能做成更通用的版本?
使用Python來製作介面如何?順便也做Windows的版本如何?
於是概念構想大概是這樣:

  1. 初次開啟的時候,進行初始化設定:
    (1) 勾選要不要執行nvm,輸入要切到哪個版本?
    有勾選與填寫的話,執行時先檢查環境是否有nvm與該版本
    (2) 可以選擇要在哪個資料夾開啟gemini
  2. 有設定過之後,就使用設定的內容:可以儲存設定,下次不顯示介面直接執行
  3. 按下執行後,就開啟terminal,去執行nvm 以及cd指定資料夾,啟動 gemini

把以上需求跟Gemini CLI說後,於是有了這個專案跟這個陽春的介面
https://ithelp.ithome.com.tw/upload/images/20251023/20135750Wy5075VW9F.png

做了可以運行在MacOS與Windows的版本
也有留一個build.sh 與 build.bat 檔案,方便去把程式碼載下來後在本地打包
且分成可以打包成app/exe,與打包成安裝檔/dmg 的選項

  • macOS / Linux:
./build.sh      # 生成 .app(預設)
./build.sh dmg  # 生成 .dmg 安裝檔
  • Windows:
.\build.bat          # 生成 .exe
.\build.bat installer  # 生成安裝檔

安裝檔也是請教Gemini CLI
讓他幫我手把手的教我如何安裝使用 Inno Setup &hdiutil create 指令生成安裝檔
目前有把安裝檔放到 GitHub Releases,就可以讓人下載安裝,而不用把原始碼整個載下來再建置。
https://github.com/lalame888/gemini-cli-launcher/releases


安全性攔阻&發行憑證

打包後遇到最大問題是憑證/簽章:
對於像我這種來路不明,隨便一個開發者打包的執行檔、安裝檔
無論是MacOS 還是 Windows都會把我攔下來

  • Windows:會被 SmartScreen / Defender 攔下,但通常會有「仍要執行」等選項。
    https://ithelp.ithome.com.tw/upload/images/20251023/20135750Q2HfEpLTnn.png

  • macOS:跳出來的視窗「只有丟到垃圾桶」的按鈕
    https://ithelp.ithome.com.tw/upload/images/20251023/20135750qCzsKllL2s.png

    這時候的做法有兩種:

    1. 打開第一次之後,對著應用點右鍵 > 開啟
      這樣的話就會改成跳這個視窗(第一次允許後就不會再跳)
      https://ithelp.ithome.com.tw/upload/images/20251023/20135750fvmN7W4ey1.png

    2. 系統偏好 → 隱私權與安全性
      這時候裡面應該會有一個欄位,顯示「Gemini CLI Launcher」遭到阻擋無法使用,因為它不是來自已識別的開發者。
      https://ithelp.ithome.com.tw/upload/images/20251023/20135750CIR1vDjJac.png
      然後這邊選擇「強制打開」,選擇後一樣會跳方法一的視窗出來,點選打開後就可以開啟

真正根治的做法:

  • macOS:買 Apple 開發者帳號($99/年),對 App/dmg 做公證(notarize)與簽章。
  • Windows:找第三方發行數位證書,對 exe 做簽章。

但是目前只打算簡單做小程式自用而已,需求背景也很窄,所以暫時不走簽章/公證這條路。


Gemini CLI 使用心得

  1. 帳號要有 Pro 版本才好用
    沒有 Pro 時 Gemini 有時會中斷或跑很久(3~5 min),結果也不一定好。
    目前至 2025/12/9,可以用大學信箱去申請 一年份的免費Pro試用,已畢業也「可能」可以辦
    活動頁面: https://gemini.google/tw/students/?hl=zh-TW
    開啟之後並登入「個人的google帳號」,信箱填寫大學的學校信箱
    我申辦時不用驗證信箱就過了,我已經畢業五年了 XD

  2. 複製輸出的小技巧

    • 一般文字:可在對話框輸入 /copy,會把最後一次回覆完整複製。
    • 程式碼:請它輸出成 txt 檔再開啟複製,否則從終端機框選會有亂的框線或空白,格式會跑掉。
  3. 支援圖片解析搭配檔案整理
    Gemini CLI 可以讀取來自 URL 或本地端檔案路徑的圖片,分析並描述圖片中整體的畫面內容、資訊、文字、物體場景等等
    本地讀取大概接受最多10張上下的數量,目前這個數量有點雞肋,不過確實可以實現以下應用:

    ✅ 從指定資料夾中,找出所有包含蛋糕的照片,並將它們複製到新資料夾
    ✅ 分析每張照片內容並重新命名,或者分類到不同子資料夾 (人像、風景、食物etc)
    ✅ 根據設計圖產出專案程式碼

    實測不能進行的動作例如:
    ❌ 分析圖片人物長相,針對長相去做評論,或者找出其他包含此長相的照片
    (基於安全隱私問題所以被拒絕了)
    ❌ 根據指定圖片重繪圖片
    ❌ 生成png, jpg等圖片檔案

    如果真的要產圖,可能還是得到網頁版本的Gemini來做使用
    Gemini CLI 只能產SVG的圖,然後用python把圖片變成PNG

    其餘針對圖像的分析功能,像是OCR、用圖片產code等等功能,Gemini CLI 處理都是沒問題的

  4. 步驟中包含互動回應的會卡住
    在自動執行的過程中,遇到需要輸入密碼、需要輸入Y/N 來同意與繼續等步驟
    Gemini CLI就會卡住沒辦法進行
    所以也沒辦法請他建置React專案之類的,因為建置過程有互動問答的部分


替代方案與工具

這邊另外介紹一些其他的替代工具
做完這個小應用之後,後來從同事分享得知一些方式或替代方案也可以解決我的困擾
這邊也跟大家分享分享

Volta:專案綁定Node JS版本並自動切換

https://ithelp.ithome.com.tw/upload/images/20251023/20135750083QlbSQ29.png

Volta 是一個 JavaScript 工具管理器
可以替代nvm 管理和切換不同的 Node.js 版本、套件管理器(如 npm、yarn)。
它的主要優點是專案綁定功能:可以在專案的 package.json 中聲明所需的 Node 版本

"volta": {
  "node": "18.18.0"
}

當進入該專案目錄時,Volta 會自動切換到正確的版本,
確保團隊使用一致的開發環境,避免了版本衝突問題。
而且它是由 Rust 語言編寫的,所以執行起來速度非常快

總之有了這個之後,我全域的 NodeJS 就可以預設為能夠使用gemini CLI 的版本
每次進入專案也不用搭配.nvmrc 檔案使用use nvm來切換版本

Volta的問題就是他還不夠成熟,安裝了Node之後他不能uninstall、社群與討論度不夠高
不過只要安裝在電腦裡,並在package.json 加個版本號資訊,
基本上是無痛使用,目前決定就使用這個來試試

Cursor CLI

我的Cursor是有付費課金的
雖然Cursor也有問答的功能,不過日常問題或對話使用Cursor還是沒那麼方便直覺
畢竟要打開IDE,然後再來對話,有時候做一些簡單問答還會被誤會是專案功能需求
後來得知Cursor也有出CLI版本,就載來使用看看

Cursor CLI就不像Gemini CLI要求NodeJS版本,目前測試上18版也可以安裝使用
不過使用後發現還是有一些差異,讓我覺得同樣有付費的情況下,Cursor CLI 沒那麼方便好用

  1. 操作效率:一鍵複製回應 /copy

    • Cursor CLI:沒有提供指令,只能手動框選文字來複製文字,很容易跑版。
    • Gemini CLI:提供 /copy 指令,可以完整複製最後一則回應
  2. 回應內容的排版與結構

    • Cursor CLI:回應內容缺乏大小標題的區分,加上沒辦法複製變得沒辦法用來日常寫文章
    • Gemini CLI:回應內容會使用標準的 Markdown 標題(如 H1, H2, H3)來組織結構,雖然在終端機/cmd上看不出來,但是使用/copy複製再貼上時,會發現文字是包含格式的。
  3. 多步驟查詢的權限管理
    在處理需要多次搜尋或查詢的複雜指令時(例如:「查詢 Bun 2025 年度的更新紀錄與改動」),兩者的處理方式有顯著不同:

    • Cursor CLI:先去抓有哪些版本是2025的版號,這時候已經問過我一次能不能搜尋了
      接著,每一個版本都單獨問我一次能不能執行curl -s 抓 releases blog 內容
      導致為了查詢這件事情,要同意很多次
      (但我又不放心直接設定為一律同意curl 指令)

    • Gemini CLI:僅允許一次的權限下,他會在一個回應內做多個search
      而且他執行的動作是「GoogleSearch」,我可以放心地讓這個指令通行,甚至設為預設

  4. 多媒體與圖像處理能力

    • Cursor CLI:目前不支援透過 URL 或檔案路徑讀取圖片。唯一的操作方式是將圖片檔案直接拖曳至終端機視窗中,功能相對受限。
    • Gemini CLI:支援讀取來自 URL 或本地端檔案路徑的圖片。可以直接提供連結或路徑,讓模型分析圖片內容。例如,可以實現「從指定資料夾中,找出所有包含蛋糕的照片,並將它們複製到新資料夾」這類進階應用。

整體上來說,Cursor CLI 還是比較專注在文字檔案處理、程式碼處理
比較不支援一些更日常、搜尋、創作生成的用途

結語

以上是我的使用分享~ 做這個 Launcher 的初衷很單純:每次都要打同樣指令實在好麻煩,想要點擊應用就直接完成。
做完之後,自己覺得這一連串的動作跟改進蠻有趣的就寫出來跟大家分享了
如果大家也有這類需要重複幾個固定指令的需求,可以試試找gemini做類似的應用

或是如果有剛好一樣的問題,然後這個小工具有幫助的話,也歡迎使用這個小工具
https://github.com/lalame888/gemini-cli-launcher

另外說到我幹嘛用Gemini CLI來進行日常問答呢?幹嘛還比較 Cursor CLI 日常問答的能力呢?
因為我現在的Pro版本是基於公司買的WorkSpace附贈的 XD

有一些比較日常的問題,想要用Gemini的Pro版來處理或回答
但是直接在網頁上的對話紀錄,企業版的帳號是沒辦法自己刪除和保管的
換言之,我就怕被罵齁

而 Gemini CLI的紀錄,目前看起來是不會被保留(除非自己使用 /chat 系列指令)
即使儲存了也可以自己保管跟刪除
當然公司那邊會不會也有一份留存紀錄就不得而知

不過即使要稽查,在沒有做什麼違法事項的前提下,應該也不會從CLI的對話紀錄稽查起吧…
我只是拿來學學日文、翻譯東西而已RRR

就是這樣 XD

額外測試

到目前為止,已經建立好整個應用,也確定了需求與流程之後
我試著把需求重新跟Cursor表達一次 (不是CLI版本,是Cursor IDE)
一樣能夠得到以python撰寫的專案,直接建置起來有一點小bug不過反應之後就很快修正

比較明顯的差異有兩個:

  1. Cursor建置起來的python專案結構嚴謹很多
    https://ithelp.ithome.com.tw/upload/images/20251023/20135750A543TQi1aK.png

    圖中的資料夾與檔案就是用Cursor 建立的,很仔細地分好架構來進行
    Gemini CLI除了是一邊討論需求一邊進行的因素之外,還是比較傾向產生單個檔案來完成功能,只追求功能完成,比較沒有專案架構

  2. Cursor 產SVG畫圖很失敗
    我用一樣的描述跟Cursor說:「幫我設計一個icon, 外觀看起來像是終端機圖示,但中間有一個英文字G,填色是代表gemini品牌色的漸層色」

    下圖是模型選用Auto時產出來的結果:
    https://ithelp.ithome.com.tw/upload/images/20251023/20135750wFNoGhj5kA.png

    請他修正多次,結果仍然是這樣

    後來我把模型切成GPT-5,這是同樣跟他反覆兩三次之後修改的結果:
    https://ithelp.ithome.com.tw/upload/images/20251023/20135750Jl72AkIysk.png

    後來又切成claude-4.5-sonnent 模型
    https://ithelp.ithome.com.tw/upload/images/20251023/201357504OC2eBQTwe.png

    有比較好了,G的文字是成功的,只是不清楚為什麼他要選擇黃綠色而已

    心得上是微妙在產SVG方面,是google的能力比較好一點
    不過我也沒有大量測試驗證,只是目前為止的心得而已

    以上!感謝大家的閱讀!


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言