近期買了新電腦,陸陸續續裝了一些工具,沒想到在裝 Gemini CLI 時踩到了一直逃避的 Powershell 坑——記錄一下吧。
Why?
先來聊聊為何選擇這些工具:
Why Gemini CLI?
AI 的 CLI 工具最早推出的是 Claude Code、後來另外三大家也都有跟進,其中我任職的公司是買 Claude Code 給我們用——坦白說我認為滿好用的:
首先基本的 codebase 探索能力不錯,然後 Subagent、Skill 和 MCP 在各種不同使用情境可以互相搭配補強,還有 plugin 和 market 系統可以做標準化擴充;一直有持續在推新功能,如約一個月內的 Auto Memory、Remote Control;而且可能是因為出得早、使用者多,有許多開源的周邊工具可以輔助,像我設計 skill 和 subagent 時會開 matt1398/claude-devtools 看它的思考過程和 tools 的調用狀況。如果決定要用其中一款、假設價格相同,我會推薦 Claude Code。
啊那這次我為何選擇 Gemini CLI?因為「價格相同」的假設被打破了——去年底拿了學生身分的免費一年 Google AI Pro,僅此而已 😆;雖說光打開功能表就比 Claude Code 少了 Subagent,不過我現在還用得不多、未來有機會再分享使用的體感如何。
題外話,因為我目前的使用情境還是比較偏向用 AI 當助手或是 Pair Programming、而非純 Vibe Coding,所以還沒打算試 Google 推的 Antigravity,未來或許有機會再試試。
Why Context 7?
這次的步驟中挑了 Context7 當作第一個安裝的 MCP,它的功用是為 AI 提供查閱各 library 或 framework 官方最新文件的能力,有效避免 AI 一本正經胡說八道——當然前提是它真的有調用這個 MCP 啦。
順帶一提,Context7 官方的 完整手動安裝說明 都是寫要帶 API Key 的設定方式,不過他們 GitHub README 的 single command 安裝說明 是有明確提到註冊帳號可以拿到的 API Key 只是會提供更高的使用額度,所以即使沒有 API Key 也是可以用的;而且我體感覺得其實算夠,畢竟實務上不太會短時間內查超多文件。
Why Powershell?
呃,這應該得問 Gemini CLI 的開發團隊了,而且不只是預設、也不能改其他的……
基本上我個人是不太愛 Powershell 的,一方面初學時一直撞到 Execution Policy、看那紅字就頭痛(嘿對,這次非得面對它不可了),另一方面網路上的教學裡用到 CLI 大部分都是 Linux 或 Mac,所以我比較偏好用 Git 帶的 Git Bash; 這點可能 Claude Code 的開發團隊與我有同感 XD,Windows 上的 Claude Code 的 CLI tool 也是用 Git Bash。
但畢竟 Powershell 是 Windows 作業系統上原生的 CLI,Gemini CLI 挑選它作為 CLI tool 也是可理解;沒人想挑 cmd 對吧 😆
步驟
-
透過 npm 安裝 Gemini CLI
Terminal window npm install -g @google/gemini-cli -
首次啟動 Gemini CLI、會要求登入 Google 帳號並授權
Terminal window gemini- 選擇「Sign in with Google」,會開啟預設瀏覽器
- 登入後回到 terminal,按照提示按 R 重新啟動 Gemini CLI
-
安裝最基礎的 MCP:Context7
- 在
%USERPROFILE%/.gemini/settings.json加入以下:{"mcpServers": {"context7": {"httpUrl": "https://mcp.context7.com/mcp","headers": {"CONTEXT7_API_KEY": "YOUR_API_KEY","Accept": "application/json, text/event-stream"}}}} - 如果有在 Context7 官網註冊帳號,就把 API key 填入;沒有的話就把那行刪掉。
- 在
-
在全域設定檔
%USERPROFILE%/.gemini/GEMINI.md加入提示- 請使用繁體中文與我對話- 使用 library 相關的問題,請調用 MCP Context7 查詢最新官方文件 -
請它測試一下調用 tool 透過 Powershell 輸出中文字,我遇到兩個問題
- Execution Policy:執行一次以下指令
Terminal window Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
- Execution Policy:執行一次以下指令
- 問題
在 Windows 上預設用 powershell,直接撞到 Execution Policy 和編碼問題 = =
- Execution policy 問題:執行一次下列指令,未來此使用者可以直接執行本機裡自己寫的和網路上下載並有簽章的 ps1 腳本檔
Terminal window Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser- 不過這個「網路上下載」的判斷標準是 Windows 的內部機制,雖然可以用 Powershell 查、不過沒那麼直覺,一般而言從瀏覽器或 curl 下載的會正常判定是網路上下載,但
git clone似乎會被當成本機的。 - 另外要注意
irm | iex這種方式執行網路上的腳本是會直接繞過 Execution Policy 機制的,小心安全。
- 不過這個「網路上下載」的判斷標準是 Windows 的內部機制,雖然可以用 Powershell 查、不過沒那麼直覺,一般而言從瀏覽器或 curl 下載的會正常判定是網路上下載,但
- 編碼問題:去設定檔改為預設以 UTF-8 輸入和輸出
- 找到設定檔
Terminal window if (!(Test-Path -Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force } - 加入設定
Terminal window # 統一將編碼設定為 UTF-8[Console]::OutputEncoding = [System.Text.Encoding]::UTF8[console]::InputEncoding = [System.Text.Encoding]::UTF8$OutputEncoding = [System.Text.Encoding]::UTF8$PSDefaultParameterValues['*:Encoding'] = 'utf8'
- 找到設定檔
- Execution policy 問題:執行一次下列指令,未來此使用者可以直接執行本機裡自己寫的和網路上下載並有簽章的 ps1 腳本檔
參考資料
後記閒聊
唉呀,一不小心一轉眼、部落格又長草半年 😅
也同樣因為搬到新電腦、部落格系統也要搬,之前自己寫的 架站文章 幫了自己大忙,這就是我寫部落格的主要目的之一 XD
這半年來也是有些有趣的新學習,比如工作上幫我們部門設計了一套 Claude Code 流程、希望可以讓它讀 issue 內容和 codebase 就產生執行計劃;私人方面做了四個小工具,也是有學到一點東西。
不過衝勁都差不多在做完 MVP、至少能跑基本功能之後就弱下來了,來不及寫出部落格文章做記錄 😅,之後若又心血來潮補功能、或是用類似技術或框架做下一個小工具時可能會再分享。