「非CTOリーダーの私」がChatGPTでテーブル設計をしてみた

「ChatGPTに仕事を奪われる日がくる!」

「ChatGPTで論文が書けた!すごい!」

「ChatGPTが医学試験に合格できた!」

連日世界を賑わすChatGPT。

ここ最近プライベートで嗜みむ一方で、業務でも効率よく使えているので現在のChatGPTとして記事にまとめておくことにする。

正直ここまでAIと対話ができるというのは驚きを隠せない。
情報の正確性、回答の柔軟性、回答の速度、いずれも僕の想像を超えていた。

前置きを長くする必要はないので早速本題に移る。

今回ChatGptを利用するユーザーの属性

僕の簡単な自己紹介を含めてChatGPTを使うユーザー属性をおさらいしておく

  • BtoC向けのWebサイトを運営する開発チームのリーダー
  • 運営サイトは100万人を超える
  • 2年前までは偏差値45くらいのエンジニア(システム?そんなもん動けば良いじゃん)
  • プログラムを目的とせず、あくまで手段と割り切るスタンス
  • コーディングよりは設計が好き、設計も詳細よりは基本、基本より概要、概要よりモック、概要よりも企画
  • 「マーケティング、データ分析、システム全般を浅く理解する」ことに舵をきりはじめる

要は非CTOという立場でエンジニア集団をまとめる立場にいる人間だ。

これまでは動くことに重きをおいたシステムばかりを作った経験から理想的なインフラ、理想的な設計というのは得意としない。
だけど失敗多きエンジニア人生だったから、しくじり先生的な視点で「こうすると詰むよ?」という教訓は共有することができる。それを強みとしている。

非CTOといえど概要的な設計はする。というより方向性を示すという言い方がふさわしい。
簡単には以下の流れで指示を出す。


やりたいことは○○だ

その理由は○○だからだ

私の知っている開発知識から考えると○○と○○を使えばできそうだと思っている

技術選定は任せる

私の設計を根拠を交えて論破し、ブラッシュアップしてほしい

健闘を祈る

このスタンスはかなり楽と言って良い。
私は15年ほどやってきたエンジニア人生を全く誇りに思ってない。
なので設計を100%否定されたとてほぼノーダメージで済む。
そのため、疑われることを前提に仕事の依頼をできるとのいうは心理的負担が低いということにつながる。
これが変に意固地になって「俺の設計にケチをつけるのか!」といった感情論を持ち込んでしまうと負の連鎖が起きてしまう。
私はマウントに必死になってユーザーを置いてけぼりにしてしまうだろう。
チームメンバーからの信頼を損ねるだろう。
チーム全体の指揮は下がりサービスが良からぬ方向にいくだろう。

ユーザーやチームメンバー、誰かを傷つけてしまうくらいなら不要なプライドは捨てるべきだと思っている。

さて、前置きが長くなってしまったが今回ChatGPTを扱うユーザの属性を理解してもらえたところで、次はChatGPTとの対話の記録を紹介しようと思う。

ChatGPTにデータベースの設計をお願いしてみた

ChatGPTと対話する前に知っておいてほしいことがある。

それはChatGPTにどういった立場で回答してほしいのかを最初にすり合わせておくこと。

これをエンジニアっぽっく表現すると

ChatGPTにプロンプト(指示)を伝える

となる。
具体的には以下のような感じ。

技術的な問題解決を図るCTOになりきってください

するとChatGPTは以下のような回答をする。

>はい、承知しました。

まず、技術的な問題解決を図るためには、問題の発生原因を正確に把握し、それに対して最適な解決策を導き出すことが重要です。そのためには、以下のステップを踏んで対処することが必要です。

問題の特定:問題が発生した状況、頻度、原因などを分析し、問題の特定を行います。これには、ログの解析、ユーザからのフィードバックの収集、関連する技術的な問題を調査することが含まれます。
...
割愛

こういったプロンプトを使ってChatGPTに○○の専門家としてなりきってもらうことが重要になる。

より精度を高めたければ以下のようにプロンプトを書き足していく。

①○○になりきってください
②そして私は○○と○○を提供します
③そして私に○○を返してほしいのです

さて、前提を理解した上で設計までの対話を続けていく。

webサービスにアンケートフォームを設置しようと考えています。
このDB設計をお願いします
>アンケートフォームのDB設計に必要なテーブルやカラムを以下に示します。

1.アンケートテーブル
アンケートID(Primary Key)
タイトル
説明
公開日時
締め切り日時
作成日時
更新日時
2.質問テーブル
質問ID(Primary Key)
アンケートID(Foreign Key)
質問文
質問項目の種類(テキスト、ラジオボタン、チェックボックス、ドロップダウンなど)
必須回答フラグ
作成日時
更新日時
3.回答テーブル
回答ID(Primary Key)
アンケートID(Foreign Key)
回答者IPアドレス
回答日時
回答者情報(任意)
各質問の回答内容

上記のテーブルを作成することで、アンケートフォームの回答結果を管理することができます。回答テーブルでは、アンケートIDと回答者IPアドレスを利用して、各回答がどのアンケートフォームの回答結果であるかを識別し、回答者情報と各質問の回答内容を格納します。回答テーブルは、回答者が回答するたびに新しいレコードを追加する形式でデータを保存します。

また、必要に応じて、ユーザーアカウントテーブルや質問選択肢テーブル、回答統計情報テーブルなどを追加することもできます。ユーザーアカウントテーブルは、回答者情報をより詳細に管理するために利用されます。質問選択肢テーブルは、ラジオボタンやチェックボックス、ドロップダウンなどの選択肢を管理するために利用されます。回答統計情報テーブルは、回答結果を集計するために利用されます。これらのテーブルは、アプリケーションの仕様や要件に応じて必要に応じて追加することができます。

これが瞬時に回答されるのは素晴らしい。
だけどもこの構成だと、どのアンケートに関する回答かはわかっても、どの質問に関する回答なのかがわからない。続けて質問してみる。

この構成だとどの質問への回答なのかわからないですよね
確かに、質問に対する回答がどの質問に対するものかわからないため、改善が必要です。以下のような修正を行うことができます。

質問テーブルに、質問の順序を表すカラムを追加する。
順序カラム:質問順序を表す整数値。
回答テーブルに、質問IDを格納するカラムを追加する。
質問IDカラム:回答が対象となる質問のIDを格納する整数値。
上記の修正を行うことで、質問項目の回答がどの質問に対するものかを識別できるようになります。具体的には、回答テーブルの各レコードに質問IDを追加し、回答テーブルと質問テーブルをアンケートIDと順序カラムで結合することで、回答内容と対応する質問を特定できます。

この回答からわかるように、ChatGPTはステートフル(前回の回答を引き継ぐ)で対話が可能だということ。
LINEのbot機能はステートレスであることからもステート(状態)をフル(維持)できていることは単純に凄い。

このような対話を繰り返すことで、より精度を上げてデータベースの設計は可能になる。
また、物理名に迷った場合も相談可能だ。

必須回答フラグ、の物理名は何が良いですか?
>必須回答フラグに対する物理名は、いくつかの選択肢がありますが、以下のようなものが良いでしょう。

is_required: "必須かどうか" を表すフラグです。
required_flag: "必須フラグ" を直訳した名前です。
answer_required: "回答が必要かどうか" を表す名前です。
これらの物理名は、テーブル設計のルールに合わせて命名することが重要です。また、命名したフィールド名は、理解しやすく、後から追加・変更が容易であることが望ましいです。

うん、素晴らしい。
このような対話を10ターンくらい繰り返し、サービスの運用に耐えうるデータベースの設計ができた。

総評としては、非CTOの私の相談にのってくれる良きパートナーという存在だった。

まとめ

ChatGTPの回答からもわかるように、
こちらの伝達を行間を読んで100%の回答してくれる、という神の領域にはまだ達していない。

というのも人は言葉と本意は別であったり、それを喋り方や声のトーン、表情などと組み合わせて伝えたりもするため、人が望むAIの形態にはどう考えても達しようがないと思われる。
それは人間が不完全な生き物であるが故なのかもしれない。

なので現状におけるChatGPTとの関係性は補完関係くらいに考えておくのが丁度良いのではないかと思っている。
AIと言えど、現状におては過去のわれわれ人類が残してきたナレッジを集約し、ベクトルで正しいと導き出したものを回答することを核としているからだ。

引用元などは辿れるようではあるが、引用を組み合わせて回答されてしまえばそれが正しいものであるかどうかは結局人の判断に委ねられてしまう。
だとすれば、AIの回答は正しいとは思わずに単に自分の知識の補完的に触れ合うのが良い距離感だと思うのである。

AIに置き換わる職種、業務が今後でてきても不思議ではない。

便利であることに熱狂してしまいがちであるが、犯罪の温床にもなりかねない側面を持つ以上はリスクから目を背けるわけにはいかない。

さてさて。

より便利な世の中になっていく中で人は考えることすら放棄してしまったら、我々は何にエクスタシーを感じるようになるのだろうか。

それでは、また。