エンジニアが考えるChatGPTに質問する際の効果的なコツ

AI
スポンサーリンク

こんにちは、ice_soiです!
フリーランスエンジニアをしています。
最近ChatGPTの勢いすごいですね!みんな仕事で使っています!
僕も普段からよく使いますが、質問の仕方で意図した回答が帰って来たり来なかったりすることがあります。

ChatGPTは、OpenAIが開発した自然言語処理のモデルです。ChatGPTを使って質問をする際には、いくつかのコツを押さえることが重要です。
今回は、ChatGPTを使っての質問の仕方のコツについてご紹介しますので、この記事が参考になればと思います!

どんな質問の仕方がよい?

ChatGPTに質問する時にはいくつか押さえておく部分があります。
  • 質問を明確にする
    ChatGPTは自然言語処理のモデルですが、質問を曖昧にすると回答が得られにくくなります。質問する前に、自分が何を知りたいのか明確にすることが大切です。
  • 質問の前に背景を説明する
    ChatGPTは一般的な知識を持っているものの、特定のコンテキストを持っていない場合があります。質問する前に、背景を簡単に説明しておくと回答が得られやすくなります。
  • 質問に適切な文脈をつける
    ChatGPTに対して質問する際には、適切な文脈をつけることが大切です。たとえば、データベースに関する質問をする場合は、どのようなデータベースを使用しているか、どのような目的で使用しているかなどの情報を付加すると回答が得られやすくなります。

欲しい回答に応じた質問の仕方

ちょっとしたことを聞くのであれば凝った聞き方をしなくても回答がもらえます。
例えば下記のような質問ならよさげな回答をくれます。
  • Javaで料金の計算をするメソッド名を考えてください。
  • Reactでリストが2つあるコンポーネントを出力してください。
ただ、あまり質問が具体的ではないと意図した内容ではない回答が帰ってきます。
例えば、「ToDoアプリを作ってください。」みたいな内容です。
その場合は下記のように聞いてあげると具体的に答えてくれます。
質問の概要
 ユーザーが自分のタスクや予定を管理するためのToDoアプリの仕様を考えてください。
質問の詳細
 下記の要件を満たしてください。
  ユーザーは、ToDoリストにタスクを追加できる。
  ユーザーは、ToDoリストに表示されるタスクの詳細を確認できる。
  ユーザーは、ToDoリストに表示されるタスクを編集できる。
  ユーザーは、ToDoリストに表示されるタスクを削除できる。
  ユーザーは、ToDoリストに表示されるタスクを完了できる。
 ToDoアプリは、以下のコンポーネントから構成されます。
  フロントエンド: React.js
  バックエンド: Node.js
  データベース: MySQL
質問の回答
 データベースのテーブル構成を出力してください。
 各画面の画面項目をリストで出力してください。
質問の備考
 ログイン画面は不要です。
 セキュリティ、可用性は考慮しなくてよいです。
上記のように聞いた場合下記のような回答を返してくれます。

データベースのテーブル構成:

以下のようなテーブル構成が考えられます。

  1. tasksテーブル
    • id: タスクのID
    • title: タスクのタイトル
    • description: タスクの詳細説明
    • is_completed: タスクが完了したかどうかを示すフラグ
    • created_at: タスクが作成された日時
    • updated_at: タスクが最後に更新された日時

各画面の画面項目:

  1. タスク一覧画面
    • タスク一覧: 登録されているタスクが表示される
    • タスク追加ボタン: 新しいタスクを追加するためのボタン
    • タスク編集ボタン: タスクを編集するためのボタン
    • タスク削除ボタン: タスクを削除するためのボタン
    • タスク完了ボタン: タスクを完了するためのボタン
  2. タスク追加画面
    • タスクタイトル入力欄: タスクのタイトルを入力するためのテキストボックス
    • タスク詳細入力欄: タスクの詳細説明を入力するためのテキストボックス
    • タスク追加ボタン: タスクを追加するためのボタン
  3. タスク編集画面
    • タスクタイトル入力欄: 編集するタスクのタイトルを変更するためのテキストボックス
    • タスク詳細入力欄: 編集するタスクの詳細説明を変更するためのテキストボックス
    • タスク更新ボタン: タスクを更新するためのボタン
  4. タスク削除画面
    • タスク削除確認メッセージ: 削除するタスクについて確認するためのメッセージ
    • タスク削除ボタン: タスクを削除するためのボタン
  5. タスク完了画面
    • タスク完了確認メッセージ: 完了するタスクについて確認するためのメッセージ
    • タスク完了ボタン: タスクを完了するためのボタン
無事データベースのテーブル構成や画面の構成や画面項目を考えてくれました!
それでは画面の項目ができたのでサンプルソースを出力してもらいましょう。
質問の概要
 タスク一覧画面のサンプルソースを出力してください。
質問の詳細
 タスク一覧画面は下記の画面項目を含めて出力してください。
  - タスク一覧: 登録されているタスクが表示される
  - タスク追加ボタン: 新しいタスクを追加するためのボタン
  - タスク編集ボタン: タスクを編集するためのボタン
  - タスク削除ボタン: タスクを削除するためのボタン
  - タスク完了ボタン: タスクを完了するためのボタン
 一覧にタスクが表示されるように出力してください。
 タスク一覧には「買い物」と「掃除」と「洗濯」を表示してください
質問の回答
 コンポーネントはReact.jsで出力してください。
 データはべた書きでよいです。
質問の備考
 データベースやバックエンドのことは考慮しなくてよいです。
React
import React, { useState } from 'react';

const initialTasks = [
  { id: 1, title: '買い物' },
  { id: 2, title: '掃除' },
  { id: 3, title: '洗濯' }
];

const TaskList = () => {
  const [tasks, setTasks] = useState(initialTasks);
  const [newTask, setNewTask] = useState('');

  const handleAddTask = () => {
    if (newTask.trim() !== '') {
      const newTaskObj = { id: tasks.length + 1, title: newTask };
      setTasks([...tasks, newTaskObj]);
      setNewTask('');
    }
  };

  const handleEditTask = (id, newTitle) => {
    const updatedTasks = tasks.map(task => {
      if (task.id === id) {
        return { ...task, title: newTitle };
      } else {
        return task;
      }
    });
    setTasks(updatedTasks);
  };

  const handleDeleteTask = id => {
    const updatedTasks = tasks.filter(task => task.id !== id);
    setTasks(updatedTasks);
  };

  const handleCompleteTask = id => {
    const updatedTasks = tasks.map(task => {
      if (task.id === id) {
        return { ...task, completed: true };
      } else {
        return task;
      }
    });
    setTasks(updatedTasks);
  };

  return (
    <div>
      <h1>タスク一覧</h1>
      <ul>
        {tasks.map(task => (
          <li key={task.id}>
            {task.title}
              <button onClick={() => handleEditTask(task.id, prompt('タイトルを入力してください', task.title))}>編集</button>
              <button onClick={() => handleDeleteTask(task.id)}>削除</button>
              {!task.completed && <button onClick={() => handleCompleteTask(task.id)}>完了</button>}
          </li>
        ))}
      </ul>
      <div>
        <input type="text" value={newTask} onChange={e => setNewTask(e.target.value)} />
        <button onClick={handleAddTask}>追加</button>
      </div>
    </div>
   );
 };

 export default TaskList;
ちゃんとタスク一覧画面のサンプルソースが出力されました!
今回は最低限の構成ですが、実際のアプリだとバリデーションなども必要になってきます。
質問の詳細のところに条件を増やせばもっと複雑なソースを出力してくれるようになります!
ここまでできれば、設計の細部の見直しやソースを実際に組み込んでいけばよいので開発作業が捗りますね!
今は試しに開発について聞いてみましたが、質問内容を変えればブログの記事や業務のワークフローなども答えてくれます!

まとめ

今回はChatGPTの質問の仕方についてまとめてみました!
単純にわからないことを聞くというだけではなく、テーブルや画面の設計をしてくれてサンプルソースまで出力して見ました。
質問をもう少し仕様書レベルまで細かく伝えてあげるともっと具体的な設計やサンプルを出力してくれます。
質問の仕方次第でエンジニアだけではなく、他の職種でも手助けになってくれると思います!
今回の記事が何かの参考になれば幸いです!最後までお読みいただきありがとうございました。
スポンサーリンク