【エンジニア向け】Chat GPTを使って業務効率化!活用例を紹介

【エンジニア向け】 Chat GPTを使って業務効率化! 活用例を紹介 その他
スポンサーリンク

はじめに

ぴんくうさぎ
ぴんくうさぎ

Chat GPTを使いこなして効率よく仕事できるようになりたいなあ…

みどりがめ
みどりがめ

ぼくはChat GPTを使わない日がないくらい日常的に使っているよ!

この記事ではChat GPTの業務での活用方法をいくつか紹介するよ!

前提条件

本記事では以下を前提としています。

  • Chat GPTに登録済みであること
    Chat GPTの登録手順等は解説しておりません。
    まだ、登録していない方は以下から登録してください。
Introducing ChatGPT
We’ve trained a model called ChatGPT which interacts in a conversational way. The dialogue format ma...

  • Chat GPTの基本的な使い方を把握していること
    「質問する→返答が返ってくる」一連の操作方法を習得していることを前提としています。

  • 無料版を使用
    本記事で紹介している出力結果はChat GPTの無料版から得られたものです。
    有料版では同じインプットでもより詳細な情報が得られると思います。

質問時のコツ

  • できる限り具体的な内容で質問する
    具体的な内容ほど返答の精度があがります。

  • 箇条書きを活用する
    細かい条件等は箇条書きで付け加えてあげると良いでしょう。

  • 役割を与える
    Chat GPTに役割を与えると精度が上がります。
    例)あなたはプロのバックエンドエンジニアです。未経験からバックエンドエンジニアになるためのロードマップを分かりやすく教えてください。

  • 複数回やり取りする
    Chat GPTは前の質問内容を記憶しています。一回のやり取りで終わらず、段階的にやり取りした方が精度が高まります。

  • 回答が長く切れてしまった場合「続きを書いて」と返答する
    回答が長いと回答内容が途中で切れてしまうことがあります。「続きを書いて」と返答することで出力が再開されます。

質問時の注意点

  • 返答内容が100%正しいとは限らない
    たたき台として考え、ちゃんと内容を理解した上で使用するようにしましょう。
  • 会社の情報、個人情報などは入力しない
    内容を一般化、抽象化するなどして活用しましょう。

プログラミング

主にPG向けの活用方法です。

変数名、関数名

<strong>質問者</strong>
質問者

PHPで2つの数の足し算をするための変数名、関数名5つ考えてください。

PHPで2つの数の足し算をするための変数名と関数名の候補を以下に挙げます。

変数名の候補:

  1. $num1
  2. $num2
  3. $result
  4. $sum
  5. $total

関数名の候補:

  1. addNumbers
  2. calculateSum
  3. sumTwoNumbers
  4. addValues
  5. computeTotal

例えば、以下のように変数と関数を組み合わせて足し算の処理を実装できます

<?php

function addNumbers($num1, $num2) {
    $result = $num1 + $num2;
    return $result;
}

$number1 = 10;
$number2 = 20;

$sum = addNumbers($number1, $number2);
echo "The sum of $number1 and $number2 is: $sum";

?>

上記の例では、addNumbers 関数が2つの数を受け取り、それらを足し合わせて結果を返すシンプルな足し算の関数です。このように、異なる変数名と関数名の組み合わせを使って、同じ機能を実現することができます。

コード生成

<strong>質問者</strong>
質問者

あなたはプロのJavaScriptエンジニアです。
以下の条件でJavaScriptでページング機能を作るコードを教えてください。

・初心者でも分かりやすいようにコメントを付与する
・Bootstrapを使う

もちろん、以下は初心者にも分かりやすいようにコメントを付与したJavaScriptでのページング機能の例です。また、Bootstrapを使用してページングコントロールをスタイリングします。

まず、HTMLにはページング用のコンテナとして<ul>要素を用意し、各ページへのリンクを<li>要素で作成します。

<!-- ページングコンテナ -->
<ul id="pagination" class="pagination justify-content-center"></ul>

次に、JavaScriptのコードを以下のように作成します。

<!-- JavaScriptコード -->
<script>
// ページングのための設定
const itemsPerPage = 5; // 1ページに表示するアイテムの数
const data = [/* ここにページング対象のデータを入力 */]; // ページング対象のデータを配列として用意

// ページング機能の実装
function createPagination() {
  const paginationContainer = document.getElementById("pagination");
  paginationContainer.innerHTML = ""; // ページングを再構築する前に初期化

  const totalPages = Math.ceil(data.length / itemsPerPage); // 総ページ数を計算

  for (let page = 1; page <= totalPages; page++) {
    const li = document.createElement("li");
    const link = document.createElement("a");

    // Bootstrapのスタイルを適用
    li.classList.add("page-item");
    link.classList.add("page-link");
    
    link.textContent = page; // ページ番号をリンクのテキストとして設定
    link.href = "#"; // リンク先をダミーの "#" に設定
    link.addEventListener("click", function () {
      showPage(page); // クリックしたページ番号に応じて該当ページを表示
    });

    li.appendChild(link);
    paginationContainer.appendChild(li);
  }
}

function showPage(pageNumber) {
  const startIndex = (pageNumber - 1) * itemsPerPage;
  const endIndex = startIndex + itemsPerPage;

  // ページング対象のデータを抽出して表示する処理(例: コンソールに表示)
  const currentPageData = data.slice(startIndex, endIndex);
  console.log(currentPageData);
}

// ページングの初期化
createPagination();

</script>

このコードでは、itemsPerPagedataの変数にそれぞれ1ページに表示するアイテムの数とページング対象のデータを設定します。そして、createPagination()関数がページングコントロールを生成し、showPage(pageNumber)関数がクリックしたページ番号に対応するデータを抽出して表示します。

バグ修正

<strong>質問者</strong>
質問者

あなたはプロのPHPエンジニアです。
以下のコードが動きません。修正すべき箇所を教えてください。

<?php

function addNumbers($num1, $num2) {
    $sum = $num1 + $num2;
    return $result;
}

$number1 = 10;
$number2 = 20;

$sum = addNumbers($number1, $number2);
echo "The sum of $number1 and $number2 is: $sum";

?>

問題点は、関数 addNumbers($num1, $num2) の中で $sum 変数を使用して足し算の結果を代入している点ですが、関数の最後に return $result; となっています。修正するには、以下のように $result$sum に変更してください。

<?php

function addNumbers($num1, $num2) {
    $sum = $num1 + $num2;
    return $sum; // $result を $sum に修正
}

$number1 = 10;
$number2 = 20;

$sum = addNumbers($number1, $number2);
echo "The sum of $number1 and $number2 is: $sum";

?>

テストコード

<strong>質問者</strong>
質問者

あなたはプロのJavaScriptエンジニアです。
3つの数の足し算をするための関数を作成してください。

また、作成した関数のテストコードを作成してください。

もちろん、3つの数を足し合わせるJavaScriptの関数を作成します。関数名は addThreeNumbers としましょう。また、テストコードも用意します。

以下が関数とテストコードの例です:

// 3つの数を足し合わせる関数
function addThreeNumbers(num1, num2, num3) {
  return num1 + num2 + num3;
}

// テストコード
function testAddThreeNumbers() {
  // テストケース1
  const result1 = addThreeNumbers(1, 2, 3);
  console.log("Result 1:", result1); // 1 + 2 + 3 = 6

  // テストケース2
  const result2 = addThreeNumbers(10, 20, 30);
  console.log("Result 2:", result2); // 10 + 20 + 30 = 60

  // テストケース3
  const result3 = addThreeNumbers(-5, 10, 3);
  console.log("Result 3:", result3); // -5 + 10 + 3 = 8
}

// テストコードの実行
testAddThreeNumbers();

上記のコードでは、addThreeNumbers 関数を定義して3つの数を足し合わせる処理を行っています。また、testAddThreeNumbers 関数でテストケースを用意し、console.log を使って計算結果を表示しています。

テストコードを実行すると、以下のような結果が得られるはずです:

Result 1: 6
Result 2: 60
Result 3: 8

これで関数が正しく動作しているか確認できます。テストコードは関数の動作を検証する際に非常に役立ちます。新しいケースを追加したい場合は、testAddThreeNumbers 関数内に新しいテストケースを追加してください。

その他

その他にも以下のような使い方が考えられます。色々と試してみてください。

  • 理解できないコードの解説
    ネットで検索して出てきたコードが理解できないことって結構ありますよね。そんなときはChat GPTに解説してもらい効率よく理解していきましょう。

  • コードレビュー
    実装したコードをレビューしてもらうこともできます。
    いつか人間がレビューする必要がなくなる時がくるのでしょうか…..

  • リファクタリング
    保守性の高いコード、可読性の高いコードなど観点を明確にして質問すると良いでしょう。

上流工程

主に上流工程の担当者向けの内容です。

要件の洗い出し

<strong>質問者</strong>
質問者

あなたは数々のプロジェクト経験を経たプロジェクトマネージャーです。

デリバリーシステムを作成したいです。システムを作成するために必要と思われる要件を洗い出してください。

デリバリーシステムを作成するために必要な要件を洗い出す際に考慮すべきポイントを以下に示します。これらの要件は一般的なものであり、具体的なプロジェクトの要件に応じて調整する必要があります。

  1. 注文管理機能:
    • 注文の受付と処理
    • 注文ステータスの追跡 (受付中、調理中、配達中、完了など)
  2. メニュー管理機能:
    • 商品の追加・削除・編集
    • カテゴリ分けされたメニューの表示
  3. 顧客情報管理機能:
    • 顧客の登録・編集
    • 顧客情報の表示 (履歴、お気に入りなど)
  4. 配達員情報管理機能:
    • 配達員の登録・編集
    • 配達員のスケジュール管理
  5. 在庫管理機能:
    • 商品の在庫管理 (数量やステータスの追跡)
  6. 支払い・請求管理機能:
    • 顧客への支払い方法の提供
    • 請求書の作成と管理
  7. 注文追跡機能:
    • 顧客に注文ステータスの通知 (SMS、Eメールなど)
  8. レポートと分析機能:
    • 売上レポート
    • 注文分析
    • 顧客行動分析
  9. セキュリティ機能:
    • ユーザー認証とアクセス制御
    • 機密情報の暗号化
  10. モバイルアプリの開発 (オプション):
    • 顧客向けの注文アプリ
    • 配達員向けの配達管理アプリ
  11. 多言語サポート:
    • 複数の言語での対応 (ローカライズ)
  12. プラットフォーム対応:
    • ウェブブラウザ、スマートフォン、タブレットなど複数のプラットフォームで動作すること
  13. ユーザーフィードバック機能:
    • 顧客の評価やレビューの収集
  14. サポート機能:
    • 顧客からの問い合わせ対応とサポート
  15. ログと監査機能:
    • ユーザーアクションのログ記録
    • 監査機能でセキュリティやトラブルの原因を特定

これらは一般的な要件の一部であり、実際のプロジェクトではさらに詳細な要件が必要になる場合があります。プロジェクトのスコープ、予算、お客様のニーズなどを考慮して、より具体的で詳細な要件定義を行うことが重要です。また、要件定義のプロセスではステークホルダーとのコミュニケーションを重視し、適切な要件を洗い出すことが大切です。

ユースケース洗い出し

<strong>質問者</strong>
質問者

デリバリーシステムのユースケースを列挙してください。
また、併せてユースケース図を作成してください。

デリバリーシステムのユースケースを以下に列挙します。ユースケースは一般的な機能やアクションを表現したもので、システムの振る舞いやユーザーの行動を把握するのに役立ちます。

  1. 注文する (Place Order)
  2. 注文をキャンセルする (Cancel Order)
  3. 注文ステータスを追跡する (Track Order Status)
  4. メニューを閲覧する (View Menu)
  5. 商品を検索する (Search Items)
  6. カートに商品を追加する (Add Item to Cart)
  7. カートから商品を削除する (Remove Item from Cart)
  8. カート内の商品を確認する (View Cart)
  9. 支払いを行う (Make Payment)
  10. 請求書を確認する (View Invoice)
  11. 顧客情報を管理する (Manage Customer Information)
  12. 配達員情報を管理する (Manage Delivery Personnel)
  13. 在庫を管理する (Manage Inventory)
  14. レポートを表示する (View Reports)
  15. 顧客に通知する (Notify Customer)
  16. ユーザー認証とアクセス制御 (User Authentication and Access Control)
  17. サポートを要求する (Request Support)

以下が上記のユースケースを表現したユースケース図です:

                   +----------------------+
                   |    デリバリーシステム   |
                   +----------------------+
                   |                      |
                   +--------^-------------+
                            |
                            |
+-------------------+     |     +------------------------+
|   メニューを閲覧    |<----+---->|  注文する             |
+-------------------+          +------------------------+
                                 |
                                 |
                        +--------+------+
                        | 注文をキャンセルする   |
                        +--------------+
                                 |
                                 |
                 +---------------+---------------+
                 | 注文ステータスを追跡する   |
                 +---------------+---------------+
                                 |
                                 |
              +------------------+------------------+
              | カートを確認する                      |
              +------------------+------------------+
                                 |
                                 |
+-----------------+              |              +---------------------+
| 在庫を管理する      |              |              |  支払いを行う        |
+-----------------+              |              +---------------------+
                                 |
                                 |
                  +--------------+------------+
                  | カートに商品を追加する    | 商品をカートから削除する|
                  +--------------+------------+
                                 |
                                 |
          +------------------+------------------+
          | 商品を検索する                           |
          +------------------+------------------+
                                 |
                                 |
+-----------------+              |              +---------------------+
| 配達員情報を管理する   |              |  請求書を確認する    |
+-----------------+              |              +---------------------+
                                 |
                                 |
                 +---------------+---------------+
                 | 顧客情報を管理する           |
                 +---------------+---------------+
                                 |
                                 |
           +---------------------+-------------------+
           | 購入履歴を確認する                     |
           +---------------------+-------------------+
                                 |
                                 |
                      +----------+-----------+
                      | レポートを表示する     |
                      +----------+-----------+
                                 |
                                 |
              +------------------+------------------+
              | 顧客に通知する                      |
              +------------------+------------------+
                                 |
                                 |
            +--------------------+-----------------------+
            | ユーザー認証とアクセス制御           |
            +--------------------+-----------------------+
                                 |
                                 |
                       +---------+----------+
                       | サポートを要求する         |
                       +----------------------+

アーキテクチャ

<strong>質問者</strong>
質問者

デリバリーシステムを構築する際のアーキテクチャ構成を考えてください。

条件は以下とします。
・インフラはAWSを使用する
・できる限り運用コストを下げる
・マイクロサービスを意識する

デリバリーシステムのアーキテクチャをAWSを使用し、運用コストを下げるためにマイクロサービスアーキテクチャを採用する方法を考えましょう。マイクロサービスアーキテクチャは、システムを小さな疎結合なサービスに分割し、それらを個別に開発・デプロイ・スケールできるアプローチです。

以下は、AWSを使用したデリバリーシステムのマイクロサービスアーキテクチャの構成例です。

  1. ユーザーインターフェースサービス:
    • ユーザーが注文を行い、注文ステータスを追跡するためのフロントエンドを提供するサービス。
    • Amazon S3 + Amazon CloudFrontで静的コンテンツをホスティング。
  2. 注文管理サービス:
    • 注文を受け付け、注文の作成・キャンセル・ステータス変更を処理するサービス。
    • Amazon API Gateway + AWS Lambda + Amazon DynamoDBで実装。
  3. メニューサービス:
    • 商品情報とメニュー情報を管理するサービス。
    • Amazon API Gateway + AWS Lambda + Amazon RDS (MySQL)で実装。
  4. 在庫管理サービス:
    • 商品の在庫情報を管理するサービス。
    • Amazon API Gateway + AWS Lambda + Amazon DynamoDBで実装。
  5. 支払いサービス:
    • 顧客の支払い処理を担当するサービス。
    • Amazon API Gateway + AWS Lambda + サードパーティ決済サービスで実装。
  6. 顧客情報管理サービス:
    • 顧客情報の登録・編集・表示を管理するサービス。
    • Amazon API Gateway + AWS Lambda + Amazon DynamoDBで実装。
  7. 配達員情報管理サービス:
    • 配達員情報の登録・編集・スケジュール管理を行うサービス。
    • Amazon API Gateway + AWS Lambda + Amazon DynamoDBで実装。
  8. 通知サービス:
    • 注文ステータスの変更や重要な情報を顧客に通知するサービス。
    • Amazon SNSを使用して実装。
  9. レポートと分析サービス:
    • 売上レポートや注文分析を提供するサービス。
    • Amazon API Gateway + AWS Lambda + Amazon Redshiftで実装。
  10. ユーザー認証とアクセス制御サービス:
    • ユーザー認証とアクセス制御を担当するサービス。
    • Amazon Cognitoで実装。
  11. 監査ログサービス:
    • ユーザーアクションの監査ログを記録するサービス。
    • Amazon API Gateway + AWS Lambda + Amazon S3で実装。
  12. データキャッシュサービス:
    • メニュー情報や注文ステータスなどのキャッシュを管理するサービス。
    • Amazon ElastiCache (Redis)で実装。

マイクロサービスアーキテクチャでは、各サービスは個別に開発・デプロイ・スケールできるため、柔軟性とスケーラビリティが向上します。AWSのサービスを組み合わせることで、運用コストを抑えながら安定したシステムを構築できるでしょう。ただし、実際のプロジェクトでは詳細な要件やパフォーマンスの要求に応じてアーキテクチャを最適化する必要があります。

DB設計

<strong>質問者</strong>
質問者

上記デリバリーサービスのDB設計をしてください。
第3正規化まで実施するものとします。出力は表形式でお願いします。

デリバリーサービスのDB設計を第3正規化まで実施し、表形式で出力します。

テーブル: Orders (注文テーブル)

OrderID (主キー)CustomerID (外部キー)OrderDateOrderStatus
11012023-07-22In Progress
21022023-07-21Completed
31032023-07-20In Progress

テーブル: Customers (顧客テーブル)

CustomerID (主キー)CustomerNamePhoneNumberEmailAddressAddress
101John Doe555-123-4567john.doe@example.com123 Main St, Anytown
102Jane Smith555-987-6543jane.smith@example.com456 Oak Ave, Othertown
103Bob Johnson555-555-5555bob.johnson@example.com789 Elm Rd, Anycity

テーブル: Items (商品テーブル)

ItemID (主キー)ItemNameCategoryPrice
1Pizza MargheritaPizza12.99
2Sushi RollSushi18.50
3HamburgerBurger8.99

テーブル: OrderDetails (注文明細テーブル)

DetailID (主キー)OrderID (外部キー)ItemID (外部キー)Quantity
101112
102131
103223

テーブル: DeliveryPersonnel (配達員テーブル)

PersonnelID (主キー)PersonnelNameDeliveryAreaSchedule
1Mike JohnsonDowntownMonday-Friday
2Lisa SmithSuburbsTuesday-Saturday

テーブル: Payments (支払いテーブル)

PaymentID (主キー)OrderID (外部キー)AmountPaymentDate
201133.972023-07-22
202255.502023-07-21

テーブル: Reports (レポートテーブル)

ReportID (主キー)ReportNameReportContentCreationDate
1Sales Report2023-07-22
2Customer Feedback2023-07-21

テーブル: OrderStatuses (注文ステータステーブル)

StatusID (主キー)StatusName
1In Progress
2Completed
3Cancelled

テーブル: Categories (カテゴリテーブル)

CategoryID (主キー)CategoryName
1Pizza
2Sushi
3Burger

上記の表形式のデータベース設計では、各テーブルが主キーと外部キーを持ち、データの整合性が保たれています。第3正規化まで達成されているため、各テーブルのデータは重複なく効率的に管理されます。

終わりに

本記事の内容はあくまで活用例です。
本記事の内容をベースにさらに発展させ、業務効率化に活用いただければと思います。

ご覧いただきありがとうございました。ご指摘等がございましたら頂けますと嬉しいです。
引き続き、プログラミングについて定期的に発信していきますのでよろしくお願いします!
また、もしよろしければtwitterもフォローしていただけると嬉しいです!🐢

コメント