こんにちは。GienTech Consulting Japan(以下GCJ)で新規事業の検討を行っている岩佐です。
本記事では、昨今話題の生成AIについて、どのようなツールがあり、何ができるのか、また何に気をつけるべきなのかなどを実際にツールを活用しながら確かめていく過程を連載形式でお伝えしています。
Vol.5ではCursor編(前編:AIで開発しようとしたら、まず環境が立ちはだかった)をお伝えします。
※Vol.4は以下からご覧ください。
Cursor に辿り着いた
試したツールではどれも「ディスカッションができない」という壁にぶつかり、「チケットベースで AI に実装させたい」という欲求を抱えたまま、Cursor に乗り換えました。
Cursor は「最初から生成 AI との協働に特化した統合開発環境」というコンセプトで作られたエディタです。VS Code をベースにしながら、AI 機能をエディタの中核に組み込んでいます。コードベースを丸ごと読み込ませた状態で AI と会話しながら実装を進められるとのこと。「これなら今まで困っていた『全体像を把握しながら実装する』問題も解決できるんじゃないか」という期待で試し始めました。
Cursor と一緒にツールを選んだ
「自分は直接触らず、すべて Cursor から操作できる」という前提で、どのツールを使うべきかを Cursor と相談しました。
Cursor から出てきた提案が、ソース管理に GitHub・自動デプロイに GitHub Actions と Vercel・データベースに Supabase の組み合わせ。それぞれの繋ぎ方も Cursor に聞きながら整理して、この構成でやってみることにしました。
環境構築:周辺ツールで3回詰まった
GitHub 連携
リポジトリの接続は問題なく通りました。ところが「Cursor から GitHub Issue を読んで実装する」というところでつまずきました。GitHub Issue は GitHub に標準で備わるタスク管理機能で、今回は仕様書やチケット代わりに使っています。リポジトリが繋がった時点で Issue も当然読めると思っていたのですが、Issue の操作には別途 GitHub Token の発行と設定が必要でした。Token を発行して Cursor に設定して、ようやく「Issue を読んで実装してくれる」状態になりました。
Supabase
データベースをクラウドで提供する Supabase との接続でも詰まりました。Cursor が「ダイレクトコネクションで繋ぎましょう」と提案してきたので試してみたのですが、繋がりません。調べると、Supabase のダイレクトコネクションは自宅など IPv4 環境だと使えない制約があることがわかりました。有料プランに上げれば解決できるようでしたが、まだ検証段階なので無料プランのまま対応したく、別の接続方法を探しました。
Supabase にはプロキシを経由する接続方法があり、こちらは IPv4 環境でも動きます。プロキシ経由に切り替えたところ、無事に繋がりました。
接続が通った後、しばらくして Supabase から警告メールが届きました。転送量が無料プランの上限である月 5GB を超えたという内容で、確認すると 5.5GB の超過でした。
原因は法令データのバッチ処理でした。毎日 e-Gov から最新の法令データを取り込み、「前日から何が追加されたか」を確認する仕組みを作っていたのですが、差分チェックに必要なのは法令の ID を見るだけで十分なはずが、条文の全文を毎日丸ごとダウンロードしてしまっていました。法令のテキストデータは量が多く、それが一気に転送量を押し上げていたのです。
修正自体はシンプルでしたが、この時点で無料プランでの継続が難しくなり、有料プランへ切り替えることになりました。
Gemini の Grounding 機能を試したら数時間で1万円超えの請求が来た話を以前書きましたが、思えば今回もまったく同じ構図でした。「システムは動いている」「エラーも出ていない」のに、気づいたときには相当なコストが積み上がっている。バイブコーディングで AI に実装を任せていると、こういう「見えないコスト」に引っかかりやすいと改めて感じた出来事でした。
Vercel
公開先として選んだ Vercel でも、設定でひと詰まりありました。コードをプッシュしたら自動でビルドして反映される、という流れを作りたかったのですが——
手動でのデプロイは問題なく動きました。問題は自動化です。「プッシュしたら自動でデプロイしてほしい」と思って設定しましたが、無料プランでは使えない機能でした。
代わりに GitHub Actions を使う方法に切り替えました。認証情報の設定が必要で、最初の何度かはデプロイが失敗し続けましたが、設定が揃ってからはプッシュ → 自動デプロイが安定して動くようになりました。デプロイ完了と Issue クローズが一連の流れになっているので、やりっぱなしがなくなるのは地味に良い点です。
「ちょっと相談したかっただけ」問題
使い込んでいくうちに、別の課題が浮かんできました。「この辺をどうにかしたいんだよね」と言うと、そのまま実装に入ってしまう問題です。
こちらとしては「ちょっと方針を相談したい」「まずどんなアプローチがあるか聞きたい」というつもりで話しかけているのに、Cursor は即座に「では実装しますね」とコードを書き始めます。気づいたら想定外の変更がコードベースに入っていた、ということが何度もありました。
「ディスカッションができない」という問題を解決したつもりが、今度は「話しかけたら即実装しようとする」という問題に直面しました。プロンプト設定が不足しているのか、Cursor の仕様なのか、はっきりはわかりませんが、曖昧な指示だと AI が「実装しろ」と受け取ってしまうようです。
試行錯誤の結果、「チケット作って」「こういうインターフェースで」みたいに、明確に形として「何をするのか」を指示することで、勝手な実装を減らせるようになりました。完全に解決したわけではありませんが、「こういう形でお願い」と具体化させることが有効だと気づきました。
話はまだ続く。
最後に|一緒に働く仲間を募集しています
GCJでは、現在コンサルタントを積極的に採用しています。
「仕事に本気で向き合いながらも、自分らしい働き方を選べる環境で働きたい」
「フラットな環境で、自分らしく成長したい」
そんな想いを持っている方は、ぜひ一度お話ししませんか?