こんにちは。三代です。
今回はAI駆動開発やバイブコーディングと言われる手法で簡単な社内ツールを自作する方法を紹介したいと思います。
初級編では特殊なツールを用いずChatGPT等の皆さんの使い慣れたツールで、
中級編ではAI機能内臓のエディターで、
上級編はエージェント型AIを使用した、より高度な開発手法を採用し、その実用性についてシェアしていきたいと思います。
上級編についてはまだ業界自体が発展中であり、ベストプラクティスが定まっていないため記事化するのはもう少し先になるかもしれませんが、今のうちに初級編からスタートすることで、上級編の理解が楽になるかと思いますので是非一緒に進めていきましょう!
まずAI駆動開発を知らない方もいらっしゃると思うので、言葉の定義や概要から解説していきたいと思います。
AI駆動開発(バイブコーディング)ってなに?
AI駆動開発というのは、従来人間が行っていたプログラミングのタスクの大半をAIにまかせてプログラミングを行う開発手法のことをいいます。
バイブコーディングという言葉は海外発祥の似た意味を持つ言葉であり、バイブス(雰囲気)にまかせてコーディングしちゃおう!という意味です。
厳密な言葉定義こそ定まっていないですが、業界の雰囲気的には以下の違いがあるとされています。
AI駆動開発
AIにコードを書かせるが、最終的には人間がチェックをしAcceptするかを判断する。人間はプログラム全体の構造について大部分を把握している。
バイブコーディング
AIが作ったコードをテストして動作したならそれで全てOKとする。(生成されたコードをそこまでチェックしないor全く見ない。)
厳密にはプログラミングとコーディングも違う
私自身も曖昧に使いがちですが、改めて確認するとプログラミングは広義な意味、コーディングはより狭義な意味で使われています。
一言で言うとコーディングは「書くこと」、プログラミングは「考えること+書くこと」です。
やりたいことをどう実現するのか、アーキテクチャ(構造)から考えて開発を行うのがプログラミングとなります。
なぜ定義から入るのか
私自身もこのAI駆動開発の分野を学び始めて約1年半になりますが、この定義を理解した上で知識を得るのと、そうでないのとで明らかに理解に差があると感じたため、初めにお伝えさせていただきました。
AIは何でもできると考えられがちですが、AIを使いこなしている人ほど、何ができないかをとことん理解しています。限界を知っているからこそ、限界ギリギリまで任せて、それを超える範囲の仕事を自分でやることで、クオリティと効率化を両立できるわけです。
これを今回のテーマのAIによる開発に置き換えるならば、AIが容易にこなせる内容であれば、コーディングではなくプログラミングを任せる。AI駆動開発ではなく、バイブコーディングでOKということになります。
一方で複雑で厳密な開発を求められる場合は、AIで行うのはコーディングであり、手法としてはAI駆動開発になるわけです。
重要な部分なのでもう少し噛み砕いで解説します。
AIが全体の仕様について把握しきれるほどシンプルな構成であれば、どのようなアーキテクチャか、という部分から全部まるっとAIに任せてしまうバイブコーディングが可能です。そして任せる分野としてはプログラミング(ここでは仕様を考る+書く)全体になります。
一方で複数のファイルを扱う複雑なプログラムの場合はAIがすべてを把握しきれなくなるため、人間がプロマネとしてAIに指示を出す必要があります。この場合人間は構造をしっかり把握し手綱を握る必要があるため、コードを確認しながら進めるAI駆動開発になります。そして任せる分野としては、指示した部分のコードを書くだけなのでコーディングとなります。(考える部分は人間の仕事)
以下、スライドにまとめましたのでぜひ覚えておいてください。
全部AIでできるって言ったじゃん!と絶望する方が出ないように、かつ重要な学びのチャンスをスキップされないためにも期待値調整としての注意書きでした(笑)
AIができない範囲のことをできると過信して任せて、全然うまくいかずに挫折する人がとても多いので、そうならないように注意しましょう!
いざ実践!文字起こしツールを作ってみよう
こういう時にユースケースでTodoアプリを作る記事はよくありますが、使えないアプリだとモチベーションが上がらないと思いますので、少しだけ難易度は上がりますが、実際にAIを組み込んだ日常で使えるツールを作ってみましょう!
記事を書く時に、書きたい内容を数分間ボソボソ喋って、それを文字起こしし、校正AIに突っ込んで記事を書いている人もいると聞きます。その前段階の文字起こしに使えるAIツールを自作してみたいと思います。
使うもの
OpenAI APIアカウント (ChatGPT Plusではありません。)
ChatGPT Plus以上の課金アカウント
Python環境
小銭(AIを使うので多少なりとも料金が発生します。クレジットカードのご用意を。)
OpenAIアカウントの作成APIキー取得
https://platform.openai.com/docs/overview
こちらのページに行き右上のSign Upからアカウント作成してください。
作成後は数ドルで良いので課金しておいてください。
ログイン後Dashboardが開くと思うので左のサイドバーからAPI Keysを探します。


その後画面右上のCreate new secret keyからAPIキーを作成します。

名前はなんでもよいですが、今回はPMAJ_testとしましょう。

ここでシークレットキーが表示されます。このキーはとても大切なものですので流出しないように取り扱い注意です。間違ってもこの画像の用に公開してはいけません。(私は削除済みのため安全)
またこのシークレットキーはこのタイミングでコピーしてどこかに保存しておかないと二度と表示できません。わからなくなってしまったら再発行すれば良いですが、めんどくさいので安全なメモ帳などに貼り付けて起きましょう。
Python環境の構築
Windowsの方はAnacondaがおすすめです。
上記リンク先から左側のDistribution Installersのwindows版をダウンロードしていただき、インストーラーに沿ってインストールしてください。
Macの方はHomebrewを使ってpythonの最新バージョンをインストールすることをおすすめします。
Pythonのインストール方法でどうしても躓いてしまった方は、ChatGPTに状況を説明して環境に合ったインストール方法を尋ねてみてください。よっぽど珍しいケースでなければ解決するはずです。また今後のステップでも基本的にエラーや問題はすべてChatGPTに聞いて解決していくスタイルになるので、慣れておいてください。
なんて聞けばいいかわからない場合は、なんて聞けばいいかを聞いて下さい。(冗談ではなく)
実装開始
プログラミングで一番大変なのは環境構築です。ここまで到達した方はもう50%は完了したと思っていただいてOKです。また実際にここまで読み進めている方は、ある程度コンピューターに詳しいモチベーションのある方のはずなので、少し説明を簡易的にして進めていきます!
ChatGPTにやりたいことを相談する
AIを使ったどんな開発においても、常にベストプラクティスとされていること、それは開発前の要件定義をAIと揉むことです。開発初心者の方だと、プログラム全体への解像度が低く、粒度の洗いリクエストしかできません。そのまま〇〇を作って、と依頼をすると、意図しないものが出来上がってしまいます。そのため「〇〇を作りたいんだけど要件定義の作成を手伝って」などと言い、どんなことがしたいのかを掘り下げてもらい要件定義書の作成を手伝ってもらいましょう。以下は私の例です。
https://chatgpt.com/share/686c0e7e-8904-8012-aea3-1219b08a4688
チャット履歴ではo3が生成した要件定義書が見えないので別途こちらに貼ります。
https://chatgpt.com/canvas/shared/686c0e64089c8191b653c39ea59e73b7
ポイント
ここで重要なのは要件定義書ではなく、要件定義書を作成するためにできるだけニーズを言語化している部分です。
Pythonの単一ファイルで制作したい。出力はoutput.txtに、など実際に開発する、使用するシーンを想像してなるべく解像度高く指示をします。その上で取りこぼした細かい部分をAIが補完してくれるイメージです。
AIが補完してくれた要件定義書を作成し、自分の意図と違う内容が含まれていた場合はラッキーだと思ってください。
開発前に気がつけて、時間を無駄にせずに済みましたね、ということです。(これだけでとてつもない時間が浮きます。)
今回のケースでも、AIはお人好しで、私が単一ファイルでの開発と伝えているのに別のファイルを2つ作ろうとしていたので、それを辞めるよう指示しました。
今回は簡単なプログラムなのでそこまで重要に感じないかもしれませんが、複雑なプログラムの場合、この最初の壁打ちの有無で、開発のやり直し(出戻り)を大きく減らせるため、ベストプラクティスとされています。
Python単一ファイルにする理由や、txtで出力を指定する理由などは経験値も入ってくるので最初からできるわけではありませんが、繰り返していくと、あーこうしておけばよかった。。。と思うことも増えてきて、それが経験値となりこの様に事前に手を打つこともできるようになってきます。
余談ですがなぜこの指示を入れたのかを書いておきます。
Python単一ファイル指定について
ChatGPTを使う場合、複数のファイルを横断的に編集することができません。基本的に1つのファイルを「全部消して、全部書き直して」といった作業の繰り返しになります。理由は、変更前と変更後での差分がわからないからです。AIに〇〇メソッドだけこのコードにして、と言われても、言われた通りにコードをリプレイスできる方は少ないはずです。であれば、最初から修正が適応されたフルコードを出させるほうがヒューマンエラーがなくなる、という結論にたどり着き、結局は全部消して、全部書いてということを繰り返すことになるわけです。
そのためファイルA、ファイルBとあり、それぞれがお互いのコードを読み込んで動くようなコードになると複雑さが増し、管理不能になります。故に単一ファイルでの実装と縛ることで、複雑さを回避しています。
txtファイルへの出力について
小難しいターミナルに出力されても見づらかったり、コピペしづらい等、普段通りの使い方をしたい場合に、シンプルにテキストファイルで結果が見えるほうが楽だったため、そうしています。これは人それぞれかもしれませんね。
いざコーディング開始!
それでは早速、上記で作成した要件定義書をChatGPTでo3に対してリクエストし、実際のプログラムを作成してもらいましょう!
チャット履歴はこちら
https://chatgpt.com/share/686c1389-bfd0-8012-8619-6aa1a67d582d
とりあえず1回目生成されたコードを保存し、実行してみます。
asuka@AsukanoMac-mini PMAJ_test % python transcribe.py sample.mp3
openai パッケージがインストールされていません。
$ pip install openai何やらエラーが出たようですね。openaiパッケージがインストールされていないそうです。
優しく日本語で出ていますね。単一pythonファイルなのに必要なライブラリのインストールチェックまで行ってくれています。これにはびっくりですね!
では言われた通りpip install openaiでopenaiのライブラリをインストールしましょう。
インストール後、再度実行すると何やらまたエラーが
asuka@AsukanoMac-mini PMAJ_test % /Users/asuka/.pyenv/versions/3.9.18/bin/python /Volumes/m2ssd/src_ssd/PMAJ_test/transcribe.py
usage: transcribe.py [-h] [--output OUTPUT] AUDIO_FILE
transcribe.py: error: the following arguments are required: AUDIO_FILEオーディオファイルを指定しろというエラーのようです。まだ音声も何も用意していないので当然です。
このようにして出たエラーに対して一つ一つ対処してくのがAI駆動開発になります。
用意した読み上げ音声を、audio_file.mp3という名前でpythonファイルと同じフォルダに入れておきます。

現在このような状態です。
APIキーはコード内に貼り付けの箇所が示されていたので、そこに貼り付けました。
==== 設定 ====
OpenAI API キーをここに貼り付けてください(先頭/末尾の空白に注意)
API_KEY: str = "xxxxxxxxxxxxxxxxxxxxxxxx"
それでは再度実行してみましょう。
asuka@AsukanoMac-mini PMAJ_test % python transcribe.py audio_file.mp3
入力検証中…
文字起こし中…
OpenAI にリクエスト送信中…
Transcription finished. Output saved to output.txtpython transcribe.py audio_file.mp3 というコマンドで音声ファイルを指定しています。
そして最終的にはoutput.txtというファイルが作成されました。
私が読み上げファイルを作成しましたが、読み上げ時に使った手元のメモの文字と今回OpenAIから返ってきた文字起こしの内容を比較してみましょう。
メモ
文字起こしのテストをしています。一般的な文字起こしツールよりもAIを使った文字起こしツールの方が文脈を考慮した文字起こしができるため、特別な固有ワードに対しての変換や、普通の漢字の変換もより正確になり、結果として誤字率が下がります。
AI文字起こしの結果
文字起こしのテストをしています。一般的な文字起こしツールよりもAIを使った文字起こしツールの方が、文脈を考慮した文字起こしができるため、特別な固有ワードに対しての変換や、普通の漢字の変換もより正確になり、結果として誤字率が下がります。
https://lab.hidetake.org/diff
こちらのサイトを使わせていただき、文章比較を行った結果、出力された文章には適切な位置に読点が追加されたのみで、漢字の変換やその他の文字に関しては一致率100%でした。

今まで個人で使う文字起こしツールで簡単に精度が100%に近い文字起こしツールを作ることは無理でしたが、AIの精度向上、そしてAI駆動開発の発達により、コードを一行も書くことなく、超高精度な文字起こしツールが完成しました。
今回作成し、動作したコードはこちらにおいておきます。
https://github.com/mtaro346/PMAJ_test
気になる方はダウンロードして、ご自身のAPIキーを入れていただき、実行してみてください!
まとめ
バイブコーディングするのか、AI駆動開発をするのか
今回の開発は完全にバイブコーディングを行いました。AIが書いたコードを一行もチェックしていませんし、構成の指示すらAIが考えています。バイブコーディングは劣化版AI駆動開発のように思われるかもしれませんが、アイデアをすぐに形にして動くものにして見せる※MVP(Minimum Viable Product)開発においてはとても重要な開発手法とされ、定着しつつあります。特にPoC段階のプロダクトで、まだ本当に開発を進めるかどうかわからないようなプロダクトに対して、細かく要件定義書を作成して、チームを構成して、開発プランを練って、などということは通常行いません。長くとも1週間以内で、こんな感じで動くものなんですけど、どうですか?と市場、ステークホルダーの反応を見るための開発として存在価値があります。逆に言えば、アイデアを持ったクリエイターが、プロのエンジニアに頼むまでもなくMVPが作成できるので、よりアイデアを形にしやすくなったと言えます。本格的に実装する場合にAI駆動開発か本職のエンジニアに依頼すればいいわけで、PoC段階から本職のエンジニアに依頼しなくて済むため、予算を気にせず気軽にアイデアを試せます。
ChatGPT単体では本格的な開発は難しい
ChatGPT=AIだと思っている方が多いのですが、実際はChatGPTはOpenAI社のGPT-4oやo3等LLM(大規模言語モデル)を複雑な設定なしに、チャットインターフェースで使えるようにしたサンプルユースケースのサイトに過ぎません。ChatGPTはその名の通りチャットするために作られたインターフェースのため、プログラミングには向いていません。ちょっとしたツールであれば今回のケースのように作成できますが、ここから話者分離の機能をつけたり、slackから音声ファイルを読み込んで自動でGoogle docと同期してほしい、などと機能を追加しようとすると途端に難易度が上がります。
複雑とまでいかなくとも、2つ以上のファイルに分かれてしまう初級から毛が生えた程度のプログラムであってもCursor等のエディターを使った開発をおすすめするというのが私のスタンスです。
次回の中級編ではこのCursorというAIエディターを使った開発をご紹介します。
※MVP 必要最小限の実現可能な製品 アイデアがとりあえず動く最小限の構成でまず形にすることを言う。










コメント