我在 JISOU 學習中,Heyho-。
作為學習 React 的一環,我從個人應用的構思到 MVP 建立,再到應用開發進行了全過程。
在約一個月的有限時間內,透過「從 0 到 1 的創造」這次首次經驗,我獲得了許多學習和啟發。
本文將總結應用的概述、開發過程、所遇到的困難以及所採取的創新措施。
這次創建的是「可以根據家裡調味料提出替代品的應用」。
例如當「沒有豆瓣醬」時,AI 會提議「味噌+七味辣椒+芝麻油」等,
通過組合家中現有的調味料來提供替代的點子。
我平時喜歡烹飪,但有以下幾個煩惱:
「即使購買調味料,最終也無法用完而被丟掉」
「在查詢替代調味料時,卻出現家中並不擁有的調味料」
每個家庭擁有的調味料各不相同。
因此我想,如果有「只根據自己家裡現有調味料提出替代方案的應用會很方便」,
便開發了這款應用。
這款應用解決了以下幾個問題:
此外,通過註冊飲食限制(如:素食、無麩質等)和過敏資訊,
也能提供適合自己的替代方案。
使用 Supabase Auth 實現以 Google 帳戶登入。
登入後,將能處理用戶專屬的數據。
每位用戶可以選擇「家中擁有的調味料」和「飲食限制(過敏、素食等)」。
調味料採用勾選框形式,最小化用戶的輸入負擔。
帶入註冊時的信息,輸入想要替代的食材後點擊搜索按鈕,將利用 Gemini API 生成替代建議。
搜索結果會即時反映為歷史記錄。
類別 | 使用技術 |
---|---|
前端 | React / TypeScript / Vite |
認證與資料庫 | Supabase (Auth, Postgres) |
測試 | Vitest/React Testing Library |
部署 | Firebase Hosting |
樣式設計 | TailwindCSS / shadcn/ui |
CICD | Github Actions |
AI 工具 | Gemini API |
在此次的 AI 提案部分,我使用了 Gemini API。
原因是我在之前參加的黑客松中曾經使用過 Gemini,
因此想要將這些知識應用到自己的應用中去實現 AI。
雖然 ChatGPT 也能實現相同的功能,但
這次我重視的是「如何將 AI整合到自己的應用中」。
選擇 Gemini 使我能具體體驗到 API 鍵的設置、請求的發送和響應的處理等,
對於 AI 在應用中的實現流程有了更深入的了解。
我的目的是學習「如何整合 AI」,而不是僅僅關注結果的精確度,
這是與直接使用 ChatGPT 的一個重要區別。
這是我首次自己設計 MVP(最小可行產品),
實施時遇到許多問題,例如「我想添加這個功能,但現在的資料表設計無法支持」。
最終需要進行重新設計和大幅度的資料表結構變更,
我深刻感受到預先建立良好的數據結構的重要性。
但另一方面,當我試圖在設計上做到完美時,卻發現自己很難展開行動。
因此我覺得首先應該製作出可運行的產品,然後再慢慢改進
這種 MVP 思維至關重要。
通過小步驟逐漸成長,開發進程能更加積極向前推進,這是我發現的一個亮點。
我實現了以 Google 登入的功能,但在刷新時會話資訊卻無法保持,
畫面從登入狀態還原回登出狀態的現象令我困擾不已。
在查找原因的過程中,我意識到自己並未理解會話的機制。
因此我從頭學習這一機制,最終通過 onAuthStateChange 監控狀態,
並將其存入 sessionStorage,成功解決了這個問題。
這次經驗讓我深刻感受到,前端開發中認證和會話管理的理解不可或缺。
在這次開發過程中,我自己查找並實現了課程或教材中未提及的技術(Supabase Auth、Gemini API 整合等)。
一開始遇到很多困難,但因為有一個「讓我的應用運作所需的技術」的明確目標,自然而然地提升了我的學習動機。
我注意到一旦目標明確,理解的速度就會顯著提高。
迫於需要學習,使我獲得了“知識與實感並存”的體驗。
最開始的時候,我只想到像「TODO 應用」或「食譜應用」這類已存在的想法。
即使意識到「向用戶提供價值」、「與他人區別開來」這一主題,卻常常模糊到無法進展。
通過與講師的磋商,我終於從內心深處引出新的理念。
從這次經驗中我學會了思考創意的方式,
培養了在日常生活中關注不便之處的習慣,並開始考慮「這個問題在其他領域是如何解決的」。
在開發初期,我常常想將所有想做的功能都添加進來,
但結果是做的事情變得太多,導致動力下降。
然而,在我意識到「首先要完成最基本的功能」後,
即使是小規模的、可運行的東西也讓我體會到了成就感,從而提升了開發的動力。
這段經驗讓我意識到,小步驟開發並逐步成長是持續個人開發的關鍵。
與其追求完美,不如先行動,隨後自然會顯現出下個挑戰。
這樣的思維方式我希望未來的開發中依然能夠秉持。
這次我設定了「在 1 個月內完成」的期限來推進開發。
結果是這個設定的期限成為了強大的推進力。
有了限制時間後,更能意識到優先次序,
並且能全神貫注於「現在該做的事」,這是這次的一個好處。
如果沒有期限,我覺得機能會無止境增添而無法完工。
這次經驗讓我覺得設定期限也是設計的一部分。
短時間內完成一次釋出,然後不斷改進,
這樣的循環能更快速地促進學習。
不僅限於調味料,希望能夠提出烹飪器具的替代方案。
我考慮增加一個功能,利用 AI 提供基於日用品的替代方案。
目前只能選擇已註冊於資料庫的調味料,
希望能讓用戶能夠自己新增調味料。
另外,當調味料數量增加時,也希望能改善搜尋和勾選的介面。
由於此次開發將期間設定為一個月,因此僅限於 Google 登入,
我希望能讓用戶能夠使用姓名或電子郵件等方式進行註冊。
半年前我還沒有使用過 React 或 TypeScript,完全沒有開發經驗,但
這次,竟然能夠自己完成個人應用,讓我感到非常驚訝。
通過這次開發,我體會到「從開發中獲得的涵養,遠超過學習技術本身」的道理。
設計、學習、動力、時間管理等,都是必須要親手操作過才能理解的內容。
透過這次經驗,我學會了即使是小規模,也要先試著把它做成型的勇氣,
以及將問題轉化為學習的心態的重要性。
我的技術仍然不成熟,但我期待在持續的個人開發中磨練自己的技能,
希望能夠作為一名工程師不斷成長。
在程式設計輔導 JISOU,我們正在招募新成員。
不如在日本首屈一指的輸出社群中提升自己的職業生涯?
有興趣的朋友,歡迎查看我們的官方網站!
▼▼▼