メインコンテンツへスキップ
見出し画像

個人開発でここまでやる?モダンなAIアプリ「Nomad Core」を支える技術スタックと開発環境の裏側 🛠️

    こんにちは、くまぱるです!🐻

    昨日は「Nomad Core」という個人開発アプリをいよいよスタートするよというお話をさせていただきました。温かい反応をいただけてとても嬉しかったです!

    さて昨日は「よし、作るぞ!」と気持ちを新たにしたわけですが、実際に手を動かすにあたって、まず最初に決めたのが「どんな開発環境で進めていくか」という土台作りでした。

    画像

    今回の開発で使っている私の母艦PCは、こんな感じの構成にしています!💻✨

    • 機種: MacBook Air

    • チップ: M5チップ(10コアCPU / 10コアGPU)

    • メモリ: 32GB

    • ストレージ: 1TB

    ちなみにProではなくAirを選んだのは、やっぱりあの軽快にどこへでも持ち運んで使えるフットワークの軽さが大好きだからです。🌟

    そんなお気に入りのAirに、メモリもストレージもてんこ盛り盛りな構成を用意したわけですが、これだけパワフルだと色々な開発ツールを直接ゴリゴリ入れても余裕で動かせそうなんですよね……。

    個人開発のアプリを作るとき、つい「自分の母艦PCのOSに直接PythonやNode.jsをインストールして動かせば手っ取り早い」と思いがちですよね。実際、私も最初はそう考えていました。

    でも今回は、自分の生活や仕事をまるっと支えるオールインワンアプリだからこそ、思い切って「すべての環境をDockerコンテナで構築することにした」んです。

    あえてそこまで徹底してコンテナ環境を整えたのには、主に次のような理由があります。

    1. なぜ「Dockerコンテナ」をフル活用するのか?(母艦を守り、干渉を防ぐ開発環境) 🐳

    画像
    • ローカルPCの環境を汚さない・壊さない(干渉の防止): 母艦となるローカルPCの環境を一切汚さず、プロジェクトごとに完全に独立したきれいな空間を保てます。

    • ローカルとクラウドのギャップをゼロに: 「ローカルでもクラウドでも、まったく同じ構成で動かす」という方針を貫き、移行時は環境変数(.env)の切り替えだけで済むようにしています。

    • 複数サービスの管理が圧倒的にラク: PostgreSQL(pgvector)やRedis、SeaweedFS(S3互換ストレージ)、Caddyなどの複雑な連携も、パワフルな母艦環境を活かして docker compose up -d の一撃ですべてが気持ちよく立ち上がります。

    2. 全体を支える強力な技術スタック&ツール群 ⚙️

    Nomad Coreの軸となっている主な技術スタックと、選りすぐりのツールたちはこちらです。

    画像
    • フロントエンド: Next.js (React / TypeScript) + Tailwind CSS + shadcn/ui(PWA対応でスマホ・PC両対応)

    • バックエンド API: FastAPI (Python 3.12) + SQLAlchemy + arq(非同期処理やAI連携、OCRを強力にサポート)

    • データベース: PostgreSQL 16 + pgvector(リレーショナルデータからベクトル検索まで1台でこなす。将来的にはRAG的なデータ活用も視野に)

    • ストレージ & 配信: SeaweedFS(ローカル)からS3互換ストレージへのシームレスな移行、Caddyによる自動HTTPS化

    • AI・OCR: Gemini APIを主軸に据え、ローカルのPaddleOCRやTesseractを補助として活用

    3. 「個人開発の枠を超える」妥協なきテストとCI/CDの仕組み 🧪

    「品質をしっかりと担保し、壊れると困る部分を徹底的に守る」ために、テストと自動化の仕組み(CI/CD)も妥協なく設計しました。

    画像
    • 単体・結合テスト (pytest / pytest-asyncio): 金額の計算や暗号化、データの分離(他人のデータにアクセスできないかなど)といったクリティカルなロジックを厚くテスト。

    • フロントエンド・E2Eテスト (Vitest / Playwright): 画面のロジックテストに加え、夜間にPlaywright(Chromeの仮想認証器など)を使ってパスキー認証からチャット・確定までの主要な流れを自動検証。

    • GitHub Actions による自動化: コードのプッシュやPRごとにテストや型チェック、Trivy による脆弱性スキャン、gitleaks による秘密情報の誤コミット防止を自動実行。さらに今後は、毎晩のイメージビルドや脆弱性スキャンの自動化も組み込んでいくつもりです!

    • 「同じイメージをどこでも使う」デプロイ戦略(CDへの布石): ローカルでもクラウドでもまったく同じコンテナイメージをそのまま使い回し、環境の違いは環境変数(.env)の切り替えだけで吸収する設計にしています。今は自分のMac(Stage 0)ですが、ゆくゆくは自宅サーバーやVPS(Stage 1)、将来的にはCloud Runなどのマネージドサービス(Stage 2)へと、同じイメージのままシームレスに移行していく計画です🚀

    4. AI(Gemini API)との距離感と強固なセキュリティ 🔒

    個人情報やお金、健康データといったデリケートな情報も扱うからこそ、安全性とプライバシーの担保には妥協していません。

    画像
    • AIは提案し、確定するのは人: AIが抽出したデータはあくまで「提案(下書き)」とし、最終確認は人間が行うことで誤爆を防ぎます。

    • 機密レベル(L1〜L3)の厳格な分離: お金や健康などの高機密データ(L2・L3)は、設定や無料・有料のプランに応じて外部AIに送信しない仕組みを徹底しています。

    • マルチレイヤーの暗号化: 利用者ごとの鍵(KeySet)による項目単位の暗号化や、ファイルごとのエンベロープ暗号化により、万が一の際もデータがしっかりと保護される設計に。

    5. 何でもAIに頼らない!「GitHub Project」を活用した人とAIの作業分担 🧑‍💻🤖

    今回の開発で特に意識している大きなポイントが、「すべてをAIに丸投げするのではなく、自分自身も操作やフローに慣れるための作業分担をしっかり行う」ということです。

    AI(Claude Codeなど)と人間が二人三脚で進めるために、次のようなチーム開発さながらのフローを取り入れています

    画像
    1. GitHubのIssueとProjectsで管理: やるべきことを細かなIssueに落とし込み、Projectsのボード(やること・作業中・確認中・完了)で進捗を可視化。

    2. IssueごとのブランチとPR: 「何のために、なぜこの変更をするのか」を明確にするため、Issueごとにブランチを切り、PR(プルリクエスト)を出す。

    3. マージ前のCI検証: PRを出すことで、マージ前にGitHub ActionsのCIが自動で走り、テストやセキュリティチェックをクリアしているか確認する。

    4. 人の手によるレビューとマージ: 最終的にCIが通ったことを確認し、自分の手でマージボタンを押し、ブランチを綺麗に片付ける。

    AIは強力な「壁打ち相手」であり実装のパートナーですが、「どのIssueをどう進めるか」「本当にやりたいことが形になっているか」「テストがちゃんと通るか」のコントロールは人間が握るようにしています。コードの細部まで僕は完全に一人で理解できる訳ではありませんが、AIと一緒に動きを確認しながら進めることで、自分自身の操作やGit運用のスキルもしっかり磨かれていく感覚があって楽しいです😊

    6. おわりに ☕

    昨日スタートしたばかりのNomad Coreですが、「自分が一番長く、安心して心地よく使い倒せるシステムをどう作るか」を突き詰めた結果、Dockerによるクリーンな環境分離、手厚いテスト設計、妥協のないセキュリティ、そしてGitHubを活用した健全な人・AI間のタスク分担に行き着きました。

    「自分の母艦PCを汚さず、モダンな環境と堅牢なテスト体制、そしてAIとのスマートな協業でバリバリ開発したい!」という方の参考になれば嬉しいです✨

    ちなみに、個人開発をしながらAIと進めていると「もっとこうした方がいいよ!」というナイスなアプローチや、自分たちのちょっとした勘違い・見落としもまだまだあると思います。
    もし「もっと良い方法があるよ!」といったツッコミやご指摘などがあれば、ぜひコメントなどで教えていただけたらとっても嬉しいです!

    Nomad Coreの開発はまだまだ始まったばかり。また面白い工夫や気づきがあればnoteでシェアしていきたいと思います!

    画像

    💬 ぜひ、みなさんの意見や想いも聞かせてもらえたら嬉しいです。今後の執筆の原動力となりますので、感想や応援をお待ちしています!それでは、また次の記事で。。。 🐻


    あなたへのおすすめ