chatGPTで要件のドキュメントからコードを生成してみる

目次

マーケター、エンジニアを月1時間からジョインできるプラットフォーム

airteamは月1時間からマーケターやエンジニアに相談できるプラットフォーム。 雇うのはハードル高いけどプロをチームに入れたい。そんな経営者のためのサービスです。 相談にのる方も募集しています。

タスクなしだから月一時間からジョイン可能

作業はなくオンライン相談メイン。 月1時間からさっと経験者に継続的に相談できます。

多様な経験者を雇用するより何倍も早くチームに

あらゆるジャンルの経験者がいるので あなたのチームのノウハウの選択肢が広がります。

NDAはすでに締結済み、契約もスムーズ

契約の煩雑なやりとりはなく、NDAはすでに締結済み、書面のやりとりはありません。

chatGPTを使ってコードをどれくらいかけるか実験してみます。今、マーケターやエンジニアに月1万から相談できるプラットフォーム、airteamでaircardという経歴やスキルを1ページにまとめられる機能を作っています。そこでシークレット機能というものを作る際のコードをchatGPTに生成してもらいます。

要件、仕様

まずは今回の要件と仕様です。

概要

  • aircardで一般には公開したくないプロジェクトや経歴をパスワードがないと見れないようにする

定義

  • aircard発行者・・・aircardを発行したユーザー。合言葉を設定する側。
  • aircard閲覧者・・・aircardを閲覧するユーザー。

要件

  • 合言葉を知っている人だけが全部の経歴を見れるように
  • 一部の経歴を隠せるように
  • 未ログインでも閲覧できるように(アカウント作成が面倒なので

仕様

  • aircard発行者が合言葉を発行する
  • aircard発行者が経歴ごとにシークレットモードで隠すかどうかを設定する
  • aircard閲覧者がaircardを閲覧した際に合言葉を入れるとページ遷移。
  • /aircards/:aircard_url/合言葉に遷移し、隠された部分(経歴など)が見れる
  • 合言葉を入れると未ログインでも閲覧できる
  • urlの末尾の合言葉とaircard dbのsecret keyを照合し、あっていたら表示
  • あっていないかったら弾く
  • ページはnoindex

対象app

  • 最初は経歴appのみが対応。経歴のみ一部分隠せるようにする
  • aircard全体適用は一旦なし。将来aircard自体、パスなしでないと見れないようにするかも
    • その際はaircard db自体にsecretのbooleanを持つ(secret appカラムとは別

経歴app

  • careersにsecretカラムを追加して、trueなら非表示
  • 何も見せないほうがいい。存在することも見えないように
  • career editとnewで設定できるように

テスト1:ただ要件を投げてみる

まずは上記の用件と仕様をもとに実装内容、コードを提案してと投げてみる。しかし、入れているgemの前提が違ったりうまく意図したコードが来なかった。これは当たり前でchatGPTにはgemや他の実装内容がわからないのでそことの整合性を取れない。

人でもできないのでできなくて当たり前。

テスト2:前提条件を補足

そこで前提条件を色々入れていった。gemや構成、railsのバージョンなど。正直めちゃ大変なのでこれだったら自分で考えた方が早い。

実装方針を提案してもらってからコードを生成する

一応入れ終わると少し良くなったがそれでも下記のように別に作らなくていいところを熱く提案されてしまう。

また、実装方針も結構ちょこちょこ違ってたりするので部分的に修正して何度も全体を調整するように指示。コードと実装方針を一気に提案してもらうと手直しが大きくなるのでまずは実装方針を提案してもらい、いい感じならその実装方針でコードを生成してと投げる。

いくつかの実装方針をstep by stepで調整していくといい感じに出てきた。しかし、これだと自分で考えた方が早いので却下。

テスト3:コードを書いてもらいたいところを限定

色々やってきての課題としては下記。

  • コードを全体的に書いてもらうとなると前提条件の共有がめんどい
  • 必要ないところをめちゃ長く提案される可能性がある

実装方針は正直、まだ相談するのが面倒だなと思った。前提条件を入れるのが大変なので。そのため実装方針まではこちらでまとめて部分的にやり方を聞くにとどまると思う。

例えばvalidation部分を下記で質問

これは意図したものが一発で返ってきた。

結論:copilot Xを待ちたい

色々頑張ったけどやはり前提条件を教えるのが面倒。。。開発を下記のフェーズで分けた場合、

  • 実装方針
  • 仕様策定
  • コーディング

実装方針までは自分で決めた方が早い。ここが一番前提条件次第になるため。

しかし、実装方針を決めて部分的に仕様やコードを聞くのは結構いい回答がくる。

将来、この前提条件をドキュメントやコードを読んですっ飛ばしてくれるcopilot Xならこの問題を解決して実装方針からサッと答えてくれそう。