ChatGPTで効率的に開発を進める:プログラマーやシステムエンジニア向けガイド

ChatGPTで効率的に開発を進める

プログラマーやシステムエンジニア向けガイド

はじめに

プログラマーやシステムエンジニアの皆さん、日々の開発業務でコードの記述やUIの作成に多くの時間を費やしていませんか?私も、そんな悩みを抱えている一人です。しかし、最近ではChatGPTを活用して作業を効率化する方法を見つけました。今回は、具体的な実例を交えながら、ChatGPTを使ってUIを生成し、さらに機能を追加する流れを紹介します。

それでは、実際のやり取りを見ていきましょう!


ChatGPTとのやり取り例

まず、検索画面に必要な「名前」「カテゴリー」「日付」を入力できるフォームを作ってみます。ChatGPTにBootstrap 5を使って、シンプルな検索フォームのHTMLを依頼してみます。

1.検索フォームの生成

私の質問
「Bootstrap 5を使って、名前、カテゴリー、日付で検索できる検索フォームのHTMLを生成してください。」

ChatGPTの回答
「もちろんです!以下が、Bootstrapを使用したシンプルな検索画面のHTMLコードです。」

<form class="form-inline">
  <div class="form-group mb-2">
    <label for="nameInput" class="sr-only">名前</label>
    <input type="text" class="form-control" id="nameInput" placeholder="名前を入力">
  </div>

  <div class="form-group mx-sm-3 mb-2">
    <label for="categorySelect" class="sr-only">カテゴリー</label>
    <select class="form-control" id="categorySelect">
      <option value="">すべてのカテゴリー</option>
      <option value="1">カテゴリー1</option>
      <option value="2">カテゴリー2</option>
      <option value="3">カテゴリー3</option>
    </select>
  </div>

  <div class="form-group mx-sm-3 mb-2">
    <label for="dateInput" class="sr-only">日付</label>
    <input type="date" class="form-control" id="dateInput">
  </div>

  <button type="submit" class="btn btn-primary mb-2">検索</button>
</form>

最初のリクエストで、かなり基本的な検索フォームがすぐに生成されました。
これだけでも、Bootstrapを使った簡潔なUIが短時間で手に入るのはとても便利ですね。
次に、検索結果を表示するテーブルも追加してみましょう。

2.検索結果を表示するテーブルの生成

私の追加質問
「検索結果を表示するためのテーブルを生成してください。項目はID、名前、カテゴリー、日付です。」

ChatGPTの回答
「了解しました!検索結果を表示するためのテーブルを追加したHTMLコードです。Bootstrapのテーブルクラスを使ってシンプルな表示形式にしています。」

<table class="table table-bordered mt-3">
<thead>
<tr>
<th>ID</th>
<th>名前</th>
<th>カテゴリー</th>
<th>日付</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>アイテム1</td>
<td>カテゴリー1</td>
<td>2024/09/12</td>
</tr>
<tr>
<td>2</td>
<td>アイテム2</td>
<td>カテゴリー2</td>
<td>2024/09/11</td>
</tr>
<tr>
<td>3</td>
<td>アイテム3</td>
<td>カテゴリー3</td>
<td>2024/09/10</td>
</tr>
</tbody>
</table>

これで、検索結果を表示するためのテーブルが完成しました。
ID、名前、カテゴリー、日付がそれぞれ表示される形になっています。
一般的な検索画面にはソート機能が備わっているので、次にソート機能を追加していきましょう。

3.テーブルにソート機能を追加

私の追加質問
「このテーブルにソート機能を追加してください。各列をクリックすると昇順・降順がわかるアイコンも付けてください。」

ChatGPTの回答
「もちろんです!以下のコードで、ソート機能を追加し、アイコンでソートの状態を表示できます。」

<!-- ソート機能付きテーブル -->
<table class="table table-bordered mt-3">
<thead>
<tr>
<th onclick="sortTable(0)" class="sortable">ID <i class="bi bi-chevron-expand"></i></th>
<th onclick="sortTable(1)" class="sortable">名前 <i class="bi bi-chevron-expand"></i></th>
<th onclick="sortTable(2)" class="sortable">カテゴリー <i class="bi bi-chevron-expand"></i></th>
<th onclick="sortTable(3)" class="sortable">日付 <i class="bi bi-chevron-expand"></i></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>アイテム1</td>
<td>カテゴリー1</td>
<td>2024/09/12</td>
</tr>
<tr>
<td>2</td>
<td>アイテム2</td>
<td>カテゴリー2</td>
<td>2024/09/11</td>
</tr>
<tr>
<td>3</td>
<td>アイテム3</td>
<td>カテゴリー3</td>
<td>2024/09/10</td>
</tr>
</tbody>
</table>

<!-- ソート機能のJavaScript -->
<script>
function sortTable(n) {
var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
table = document.querySelector("table");
switching = true;
dir = "asc";
var headers = table.querySelectorAll("th i");

// 全てのヘッダーアイコンをリセット
headers.forEach(function(icon) {
icon.classList.remove("bi-chevron-up", "bi-chevron-down");
icon.classList.add("bi-chevron-expand");
});

// ソート方向に応じたアイコンの変更
while (switching) {
switching = false;
rows = table.rows;
for (i = 1; i < (rows.length - 1); i++) {
shouldSwitch = false;
x = rows[i].getElementsByTagName("TD")[n];
y = rows[i + 1].getElementsByTagName("TD")[n];
if (dir == "asc") {
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
shouldSwitch = true;
break;
}
} else if (dir == "desc") {
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
shouldSwitch = true;
break;
}
}
}
if (shouldSwitch) {
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
switching = true;
switchcount++;
} else {
if (switchcount == 0 && dir == "asc") {
dir = "desc";
switching = true;
} else {
// ソートが完了したらアイコンを更新
if (dir == "asc") {
headers[n].classList.remove("bi-chevron-expand");
headers[n].classList.add("bi-chevron-up");
} else {
headers[n].classList.remove("bi-chevron-expand");
headers[n].classList.add("bi-chevron-down");
}
}
}
}
}
</script>

これで、テーブルのソート機能が追加されました。列をクリックすると、昇順・降順が切り替わり、アイコンでその状態がわかるようになっています。

4.最終盤のHTMLコードと画面

ここまで作成したフォームやテーブル、ソート機能をすべてまとめた最終版のHTMLコードと、その画面表示の内容を以下に掲載して終わりにしたいと思います。

最終版HTMLコード

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>検索画面</title>
    <!-- Bootstrap 5 CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
    <!-- Bootstrap Icons -->
    <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.8.1/font/bootstrap-icons.min.css" rel="stylesheet">
</head>
<body>

    <!-- ナビゲーションバー -->
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
        <div class="container">
            <a class="navbar-brand" href="#">検索画面</a>
            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav ms-auto">
                    <li class="nav-item">
                        <a class="nav-link active" href="#">ホーム</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#">機能</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="#">お問い合わせ</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>

    <!-- 検索フォーム -->
    <div class="container mt-5">
        <h2>検索フォーム</h2>
        <form class="form-inline">
            <div class="form-group mb-2">
                <label for="nameInput" class="sr-only">名前</label>
                <input type="text" class="form-control" id="nameInput" placeholder="名前を入力">
            </div>

            <div class="form-group mx-sm-3 mb-2">
                <label for="categorySelect" class="sr-only">カテゴリー</label>
                <select class="form-control" id="categorySelect">
                    <option value="">すべてのカテゴリー</option>
                    <option value="1">カテゴリー1</option>
                    <option value="2">カテゴリー2</option>
                    <option value="3">カテゴリー3</option>
                </select>
            </div>

            <div class="form-group mx-sm-3 mb-2">
                <label for="dateInput" class="sr-only">日付</label>
                <input type="date" class="form-control" id="dateInput">
            </div>

            <button type="submit" class="btn btn-primary mb-2">検索</button>
        </form>
    </div>

    <!-- 検索結果テーブル -->
    <div class="container mt-5">
        <h2>検索結果</h2>
        <table class="table table-bordered mt-3">
            <thead>
                <tr>
                    <th onclick="sortTable(0)" class="sortable">ID <i class="bi bi-chevron-expand"></i></th>
                    <th onclick="sortTable(1)" class="sortable">名前 <i class="bi bi-chevron-expand"></i></th>
                    <th onclick="sortTable(2)" class="sortable">カテゴリー <i class="bi bi-chevron-expand"></i></th>
                    <th onclick="sortTable(3)" class="sortable">日付 <i class="bi bi-chevron-expand"></i></th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>1</td>
                    <td>アイテム1</td>
                    <td>カテゴリー1</td>
                    <td>2024/09/12</td>
                </tr>
                <tr>
                    <td>2</td>
                    <td>アイテム2</td>
                    <td>カテゴリー2</td>
                    <td>2024/09/11</td>
                </tr>
                <tr>
                    <td>3</td>
                    <td>アイテム3</td>
                    <td>カテゴリー3</td>
                    <td>2024/09/10</td>
                </tr>
            </tbody>
        </table>
    </div>

    <!-- ソート機能のJavaScript -->
    <script>
    function sortTable(n) {
        var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
        table = document.querySelector("table");
        switching = true;
        dir = "asc";
        var headers = table.querySelectorAll("th i");

        // 全てのヘッダーアイコンをリセット
        headers.forEach(function(icon) {
            icon.classList.remove("bi-chevron-up", "bi-chevron-down");
            icon.classList.add("bi-chevron-expand");
        });

        // ソート方向に応じたアイコンの変更
        while (switching) {
            switching = false;
            rows = table.rows;
            for (i = 1; i < (rows.length - 1); i++) {
                shouldSwitch = false;
                x = rows[i].getElementsByTagName("TD")[n];
                y = rows[i + 1].getElementsByTagName("TD")[n];
                if (dir == "asc") {
                    if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
                        shouldSwitch = true;
                        break;
                    }
                } else if (dir == "desc") {
                    if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
                        shouldSwitch = true;
                        break;
                    }
                }
            }
            if (shouldSwitch) {
                rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
                switching = true;
                switchcount++;
            } else {
                if (switchcount == 0 && dir == "asc") {
                    dir = "desc";
                    switching = true;
                } else {
                    // ソートが完了したらアイコンを更新
                    if (dir == "asc") {
                        headers[n].classList.remove("bi-chevron-expand");
                        headers[n].classList.add("bi-chevron-up");
                    } else {
                        headers[n].classList.remove("bi-chevron-expand");
                        headers[n].classList.add("bi-chevron-down");
                    }
                }
            }
        }
    }
    </script>

    <!-- Bootstrap 5 JS -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>

</body>
</html>

ブラウザで表示

まとめ

今回は、ChatGPTを使って検索画面の作成から、検索結果表示、機能の追加までを行いました。やり取りを進めながら不足している箇所を補完し、段階的に画面を構築できることがわかりました。
こうしたプロセスをChatGPTで効率化することで、開発のスピードが大幅に向上します。
次は、さらに高度な機能を追加してみたいですね。

コメント

タイトルとURLをコピーしました