初めまして、上條遥都(はるじょー)と申します 長岡技術科学大学工学部情報経営システム工学分野の3年生です 趣味は、プログラミング、ファッション、香水、運動、水族館で、最近はとくに香水にはまってます! 先月、MUCHAさんの北極星という香水を購入したのですが、鼻を抜ける涼やかな香りと淑やかなお茶のような香りが綺麗に調和していて、秋冬の気分を一段階上げてくれる香水でした! 宣伝ではまったくないんですが、ほんとうにいい匂いで10ml、4000円ほどで買えるのでお手頃です笑笑
開発がしたかったので、NUTMEGのデザインコンペで発表されていたサービスをアプリとして開発しました ついでに試してみたいAIサービスがあったので、使ってみたら作業効率爆上がりで、4時間で9つほど機能開発が完了し、開発の裏で作業ができたので、マルチタスクをしながら体感4倍ほどの効率で作業ができるという夢のような体験をしたという話です AIサービスを使うために月額:boom:$25:boom:を契約したので、サブスク地獄に両足を突っ込むこととなりましたが、非常に楽しい体験でした!!
開発したい!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ので、NUTMEGのデザインコンペで発表されていたものをアプリとして形に起こすことにしました:fire::fire::fire:
まず、長岡技術科学大学の新入生にNUTMEGの説明をする"NUTMEG ROOM"というサービスを開発することに決め、発表者の許可を取りました。 なぜ、このサービスを作ろうと思ったのかというと、同じ機能で恋愛シミュレーションゲームが作れそうだったからです笑 近いうちに"NUTMEG ROOM~LOVE EDITION~“リリースしてブログ書きます:smirk:
次に、NUTMEG内で技術に触れる機会を増やすため発表者を勧誘し、機能とフロントのデザインで役割を分けて開発を行う計画を立てました:sunglasses: 実は、1月から開発スタートの予定だったのですが、12/4に企業様主催のNIFPというLT会へ登壇する運びとなったので、予定を繰り上げて機能開発だけ行ったという流れになります
ここからは、実際にリリースするまでにやったことを書き連ねていきたいと思います 主に
という流れで開発を進めました 以下ではそれぞれの項目について具体的にお話していきたいと思います
デザインコンペで使用されたスライドから、要素のまとまりと、ボタンやまとまりごとの機能を抽出して、仕様書の形式に沿って書き出しました
以下実際に書いた仕様書です
こんな感じで、ある程度大雑把に仕様をまとめ、仕様書として書き出しました
https://docs.replit.com/category/getting-started まず、Replit Agentに登録し$25払いました Replit Agentは「コーディングの民主化」をミッションに掲げており、誰でも簡単にアプリケーションを作れる環境を提供してくれるらしいです 1か月$25のサブスクは高いですが、試してみたかったので必要経費です…でも高い…
お金を払い終わったら、プロジェクトの作成に入ります
Titleを"NUTMEG ROOM"に変更し、“Create Repl"を選択
すると…
こんな感じで、Next.jsの開発環境が構築できました:clap::clap:
さほど手間をかけることなく、開発環境が構築できるのはありがたい限りです
仕様書作成は事前にやっていたので、ここまでの所要時間は15分ほどです
ついに来ました、本題の"AIによる効率化"のお時間です:muscle:
こんな感じで、AIに仕様書を食べさせます
後から思ったんですけど、“以下の仕様書にしたがって、Webアプリを開発してください"とかの方がより意図に沿う出力をしてくれた気がします:sob:
まあ、なんにせよ出力が帰ってきました
まず、ディレクトリ構造(ファイルの配置図みたいな感じ)から出力してくれます
ちょっと専門用語が多いので、慣れてないと:question::question:って感じになるので、導入ハードルを下げるためにこの辺のフォローが欲しいところではあります
/pages
/api
hello.ts // APIのエンドポイント
index.tsx // スタート画面
home.tsx // ホーム画面
room.tsx // 部屋画面
/components
Tab.tsx // タブコンポーネント
Character.tsx // キャラクターコンポーネント
ChatBox.tsx // チャットボックスコンポーネント
/public
/images // キャラクターの立ち絵などの画像
/styles
globals.css // グローバルスタイル
次に基本的な画面とコンポーネント(要素のまとまり)のコードを出力してくれます 仕様書を食べてもらっただけで、次の6つのコードを出力してくれました
基本画面:
コンポーネント:
また、実装できていない機能について以下のように注意事項として教えてくれました
注意事項:
ここまで、丁寧に教えてくれるのはありがたいですね 次は、実際に教えてもらったコードを入力します
まず、コードを書き込むために、index.tsxなどのファイルを作成します。
右上の+ボタンからファイルを追加し、index.tsxという名前を付けます
そして、上で教えてもらったディレクトリ構造に沿うように"pages"フォルダにindex.tsxを移動します
そして、index.tsxを選択すると、こんな感じになります
この状態で、AI君が出してくれたコードを見てみると右上にInsertというボタンが出てきました
それを押すとあら不思議、コードが全部入力されました:congratulations:
めっちゃ便利…
便利すぎたので流石に全部これで入力しました笑
そして、エラーが出ないことと、コードの動きを追いながらちゃんと動くかを確認しました
始めてからここまでで、大体30分くらいです
さて、いよいよAI君のお手並み拝見ですね
教えてもらったコードそのままでバグなく動作するか確認してみましょう
普通に動きました
ページが存在するボタンを押せばページ遷移しますし、コンポーネントもちゃんと認識してます
AI君、僕の10倍以上賢いんじゃないか
AI君が優秀すぎて30分でたたき台が出来てしまったので、ここからは追加の機能を実装していきたいと思います
メイン機能がなぜか実装されていなかったので、AIへのチャット質問機能を実装します
例のごとくAI君にお願いしていきましょう
とりあえず、出されたコードをコピーして動かしてみましょう
動きません、、、
こんなエラーが出ました
原因は"openai api"とやらをインポートしていなかったからのようです
インポートしてみたら動きましたが、チャットボットから"unidefined"と返ってきます:cry:
一旦、実装されたコードのチャットボットに関する部分を全部読んでみました
その上で、AIに聞いてみても、Qiitaで調べたコードを見てみても明らかにおかしい部分はとくになかったです
これは非常に由々しき事態です….
どうしたものかと思っていたのですが、AI君がデバッグログを出したらいいんじゃない?と言ってくれました
確かに…ログ見れば大体わかるじゃん…
ということで、デバッグログを確認し、バグを修正します
エラーコードを見つけました
これはライブラリを使ったときあるあるの"公式リファレンスを参照しないとわからなそうなエラー"です
なので、公式リファレンスを見に行きます
はい、何の成果も得られませんでした:sob:
AI君に聞いてみて、とりあえず使おうとしているモデルが対応している書き方と違うよってことなのかなというところまでは理解出来ました
ちなみに、こう書いても動きませんでした笑
こういうときは、stack overflowに訪問しましょう
英語版知恵袋みたいな感じなので、日本語よりも技術系の情報があふれています
https://stackoverflow.com/questions/76917525/openai-api-error-module-openai-has-no-exported-member-configuration
それっぽい情報が見つかりました
AI君は"V3"という古いバージョンの書き方をしていたのですが、実はインストールしたのが"V4"で、新しいバージョンの書き方をしなければいけなかったようです
ということで、これに倣って書き直しました
その結果、別のエラーが帰ってくるようになりました:clap::clap:
データのタイプが違う的なことを言われています
なので、上記コードを
こんな感じにしたら、無事別のエラーに変わりました
一生解決してくれません:angry:
今日は機嫌が悪い日なんでしょうか
エラーによると"ChatCompletion"とやらがないと言っているので、該当してそうな部分を"completion"に変更します
これでようやく動きました:clap:
エラーなく動くようになったので、バグがないかテストしてみます
ちゃんと返答がかえってくる…!!
ということで、何回かラリーをして挙動に変な部分がなかったので、チャットボットの機能完成です!!
ここまでで、大体1時間半程度かかっています エラーの解決に30分以上かかっているので、エラーがなければ1時間ほどでチャットボットまでは完成したことになります 爆速で嬉しい限りです:yum:
あとはこれを好きなだけ繰り返します 今回は時間が限られていたので、
の9つの機能だけ作ってプロトタイプ完成ということにしました
2~9の機能全部で大体2時間半かかったので、チャットボットとあわせて4時間ほどで完成したことになります じゃあ、なぜタイトルが5時間なのかというと、お風呂の時間とご飯の時間にもAIに指示を出して結果を待っており、その時間も含めているからです 裏で別のことをしながら、爆速開発ができるのは本当に革命的で、実質マルチタスクと言っても過言ではないかなと思います:sunglasses:
誰でも動かせるようにプロトタイプをWeb上に公開しようと思ったんですけど、まあ面倒な作業なんですよね
と思っていたら、、、
開発画面の右上にDeployというボタンがあります
気になるので、押してみます
なんか、お金の話とワークスペースの話をされました
とりあえず、おすすめされたWebアプリに最適的なことを言っているワークスペースを選びます
なんかワークスペースのパワーとお金の話をしていますがサブスク分は使えるみたいなので、サブスク分を超えない範囲の設定を行います
これでデプロイが完了しました
爆速…!!革命的…!!
ということで、以下のリンクからプロトタイプが使えるようになりました https://nutmeg-room-harujo.replit.app/ 放置するだけでお金かかるみたいなので、サブスクの解約をしたらVercelにデプロイしなおそうと思います
ここからはAIと一緒に開発してみた感想です
まず、学生的に、1か月$25は高いです 理系学生でバイトの時間があまりとれないので、あまりにも痛い出費です とりあえず、今月は使い倒して一旦解約したいと思います
次に、AIを適切に使うと作業効率爆上がりするなと感じました 脳みそが2つ3つあるようなものなので、当たり前といえばそうなんですけど、頭で理解するのと体感するのでは実感や感動が全然違います また、実際にやってみることで利点、欠点が見えてくるので、より適切に使えるようになると思います
そして、プロトタイプを作るときに便利です 簡単な機能なら5分くらいでプロトタイプとして見せられる状態までいくので、開発とテストのサイクルが今まで以上に高速化すると考えられます さらに、機能の実装までが早いのでアジャイル開発でも利点があるなと感じました Replit Agentを使ったアジャイル開発、すごくやってみたいです笑
あと、一人開発でも仕様書は書き得なのかなと思いました 開発指針となるので、そもそも書いた方が良いのはそうなんですけど、書いておくことで今回のようにAI君に指示を出して開発してもらう的なことも出来るので、選択肢を増やす意味でもメリットがあるなと思います
以上、AIと一緒に5時間でアプリ開発した話でした
一人ハッカソン形式でやってみた感想としては、1日未満でハッカソンするのはやめたほうがいいと思いました笑 せめて2日は欲しいし、クオリティを求めるなら1週間くらいないと困るかもという感じですね それでも、新しい技術に触れる機会としては非常に有用ですし、これを機にNUTMEGに一人ハッカソン文化を広めていけると嬉しい限りです
また今後、AIを活用する力は社会的に重要なものとなってくるので、AIにアクセスしやすい環境を用意し、活用のハードルを下げていける役目を担えれば良いなと思っております