Vibe codingは、生成AIに「雰囲気(vibe)」でコードを書かせる開発スタイルです。
試作や検証を高速化できる一方で、提案された内容を鵜呑みにすると、後で大きな手戻りが発生する場合も。
本記事では、実際にVibe codingを試した経験をもとに、注意点と現実的な活用方法を整理します。
Vibe codingを試す無料環境
今回から、ChatGPTアプリを利用したVibe codingを試してみます。
本格的な利用にはVS Code+GitHub CopilotやCursorが人気ですが、無料の環境でもその威力を確かめることができます。
ここれでは人気のChatGPTアプリ、特にmacOS環境のChatGPTアプリはアプリとの連携機能があり、ここではChatGPT とVSCodeを連携させてコードを書いていきます。
Vibe codingを試す題材
今回は自動化の例として、ニュースサイトの巡回からX(旧Twitter)への投稿までを自動化するコードを書いていきます。
RSSフィードの取得には、FeedlyやInoreaderなどのRSSリーダーを使う方法が一般的ですが、記事を読んだ後の行動待て自動化を支援してもらいます。
まず今回はRSSフィードを読み込んでMarkdown形式で出力するコードを書いてみます。 ChatGPTに下記のような指示を出してコードを書いてもらいます。
(URLは実際のRSSフィードのものを指定しています)
https://.../index.rdf
このrssを読んでMarkdownで出力するコードを書いてください。
サンプルのため、出力した内容をURLを除いてそのまま掲載します。
import feedparser
from datetime import datetime
RSS_URL = "https://.../index.rdf"
OUTPUT_MD = "output.md"
def fetch_rss(url: str):
return feedparser.parse(url)
def entry_to_md(entry) -> str:
title = entry.get("title", "No Title")
link = entry.get("link", "")
summary = entry.get("summary", "").strip()
published = entry.get("published_parsed")
if published:
published = datetime(*published[:6]).strftime("%Y-%m-%d %H:%M")
else:
published = "unknown"
md = []
md.append(f"## {title}")
md.append(f"- URL: {link}")
md.append(f"- Published: {published}")
md.append("")
md.append(summary)
md.append("")
return "\n".join(md)
def rss_to_markdown():
feed = fetch_rss(RSS_URL)
md_lines = []
md_lines.append(f"# TechnoEdge RSS")
md_lines.append("")
md_lines.append(f"- Source: {RSS_URL}")
md_lines.append(f"- Generated: {datetime.now().strftime('%Y-%m-%d %H:%M')}")
md_lines.append("")
for entry in feed.entries:
md_lines.append(entry_to_md(entry))
with open(OUTPUT_MD, "w", encoding="utf-8") as f:
f.write("\n".join(md_lines))
print(f"saved: {OUTPUT_MD}")
if __name__ == "__main__":
rss_to_markdown()
ここまで、ChatGPTでは1分足らずで動くコードが出力されています。
VS Code上で、プロジェクトを開き、Python仮想環境を作成し、feedparserをインストールすれば実行が可能です。出力されたMarkdownファイルはVS Codeで確認することができます。
全体で見ても5分~10分程度で、動くコードが得られました。
注意すべきこと
今回は、ChatGPTはPythonでfeedparserライブラリを使ったコードを出力してきました。
2行の指示で50行程度のコードを出してくるので、ここだけを試すとAIのコード支援は良いことだらけに見えますが、実際に使い込んでいくと難しい点が多いことに気が付きます。
アウトプットの規模
生成AIは一度に処理できるトークン数にも限界があるため、一度に指示する開発の規模が大きくなると、生成AIが全体を把握しきれず矛盾や不整合が発生しやすくなります。
例えば、関数の引数や戻り値の型が不整合を起こしたり、ヒアドキュメントや文字列の構造が崩れてインデントの修正に時間を要するなどの問題が起きやすくなります。
また、見た目の動作は同じでも、以前に書いた同じ処理をまた別の処理として書いたり、似ている別のライブラリを使ったりするため保守性が低くなります。
これを防ぐような指示への追従性にも限界があるため、最初は200行程度を区切りに自分でも目を通し、段階的に指示を与えて開発を進めると良いでしょう。
言語・開発環境の選択
言語は明示的に指定しなければ、PythonやJavaScriptなど、比較的、汎用的な言語が選ばれますが、段階的にコードを拡張していくと、徐々にその言語では不都合が生じる場合もあります。
例えばPythonで開発を進めると、徐々にパフォーマンスが問題となったり、GUIアプリの表現力に限界が出てくる場合があります。
最初にある程度構想を伝えて、どのような言語が向いているか相談するのも有効です。
利用ライブラリの選択
他のLLMでも同様ですが、pythonや使用するライブラリに関する説明は特にないため、必要な場合はこちらから聞く必要があります。
また、今回のfeedparserは比較的よく使われているライブラリですが、古いライブラリや少々大仰なフレームワークの利用など、おすすめできない提案をしてくることもあります。
生成AIに提案の妥当性を確認させる
Vibe codingを利用する際は、自分の知らない知識を含む出力を見る機会が多くなります。
一般に、LLMにはカットオフの問題や、客観的な情報よりも自身の推測を優先する(いわゆるハルシネーション)傾向があるため、何らかの問題を含んでいると疑ってかかることが重要です。
自分自身で生成AIの出力を調べて確認するのも一案ですが、手間と時間がかかるため、このスタイルではVibe codingの成果物を仕上げる早さを活かせません。(自身の学習目的であれば効果的)
これらの点を踏まえる、生成AI自身に自分の提案を客観的に見て、最新情報に基づいた内容であるかを確認させる方法が有効です。
下記の点について、最新の情報をWebで調べて客観的に教えてください。
・Pythonが適している理由を教えて下さい。
・Pythonのfeedparserライブラリとは何ですか。
・現時点でよく使われているライブラリですか。
・最終更新日やメンテナンス状況はどうですか。
・将来的なサポートに問題はありませんか。
・代替ライブラリは存在しますか。
回答が不十分であったり出展が曖昧な場合は、まだ推測で回答をしている可能性もあります。
その場合は、繰り返し同じ質問をすることも有効です。
まとめ
Vibe codingは、正解を一発で出してもらうための手法ではありません。
「使い捨て」のつもりで雑に作り、早く動かし、良いところとを切り分けて蓄積していく考え方が有効です。
特に、自動化スクリプトやデータ収集の初期段階では、「まず動くコード」を短時間で得られるため、完成図をイメージしながら進められる価値は大きいでしょう。
その上で、重要な部分だけを後から検証・書き直すことで、開発全体の効率や保守性を高めるアプローチが有効です。
次回からこのコードを拡張しつつ、Vibe codingの注意点と活用方法をさらに掘り下げていきます。


