HapInS Developers Blog

HapInSが提供するエンジニアリングの情報サイト

【プロンプトエンジニア】 あなたの聞き方は上手ですか?

はじめに

あなたは何エンジニアですか?

積んできたキャリア、得意分野によって、
以下エンジニアに当てはまるのではないかと思います。

・インフラエンジニア
・ソフトウェアエンジニア
・ネットワークエンジニア
・セキュリティエンジニア
・データベースエンジニア
クラウドエンジニア
などなど。。

今回はここ数年の間で、
飛躍的に進歩を遂げている生成AI の相棒こと、
プロンプトエンジニアに触れてみたいと思います。

目次

・プロンプトエンジニアとは
・プロンプトとは
・プロンプトで使える文例集
・【実践】ChatGPT を用いて改修コードを引出し、使ってみた。
・ChatGPT(3.5)に聞いてみた & 回答 ①
・ChatGPT(3.5)に聞いてみた & 回答 ②
・ChatGPT(3.5)の回答② を使ってみた
・おわりに

プロンプトエンジニアとは

www.nri.com

プロンプトとは

www.softbank.jp

プロンプトに含めると良い要素は以下。(上記から抜粋)
①:コンテキスト
②:具体的な要求
③:形式や制約

プロンプトで使える文例集

prompt.quel.jp

・効果的なプロンプトの書き方
prompt.quel.jp

・コードを教えてもらう
prompt.quel.jp

【実践】

ChatGPT を用いて改修コードを引出し、使ってみた。

■前提
・改修対象:自作のツール(VBA
  ・フォルダ名とファイル名を一覧表示するツール

・改修内容:
  ・変更前:フォルダパスを直接入力する操作(テキスト入力)
  ・変更後:ボタン押下後、ダイアログ画面を出力させ、フォルダを選択させる

・生成AI:ChatGPT(3.5)

■操作概要(既存の動き)
・操作①:
 フォルダ名とファイル名の一覧を取得したいフォルダパス
 (例:プロジェクトフォルダ)を「 セル:A3 」に直接入力。

・操作②:
「 フォルダ名・ファイル名取得 」 ボタン押下。

・結果が以下に出力される:
 ・セル:A10 以降 ・・ フォルダ名またはファイル名のみを表示
 ・セル:B10 以降 ・・ フォルダパスを含めたフォルダ名またファイル名を表示

初期画面

操作①、② を実施

結果出力

■改修内容:
 ・変更前:フォルダパスを直接入力する操作(テキスト入力)
 ・変更後:ボタン押下後、ダイアログ画面を出力させ、フォルダ選択させる

■■ ChatGPT(3.5)に聞いてみた & 回答 ① ■■

【プロンプト入力】
VBAコードで、フォルダ選択できる機能(ボタン)を書いてください。

【ChatGPT(3.5)回答】
VBA でフォルダ選択ダイアログを表示するには、
まず、通常、Windows API を使用する方法が一般的です。

以下は、VBA コードでフォルダ選択ダイアログを表示する方法です。

Option Explicit

#If VBA7 Then
    Declare PtrSafe Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDListA" (ByVal pidl As LongPtr, ByVal pszPath As String) As Long
    Declare PtrSafe Function SHBrowseForFolder Lib "shell32" Alias "SHBrowseForFolderA" (lpbi As BROWSEINFO) As LongPtr
#Else
    Declare Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
    Declare Function SHBrowseForFolder Lib "shell32" Alias "SHBrowseForFolderA" (lpbi As BROWSEINFO) As Long
#End If

Type BROWSEINFO
    hOwner As LongPtr
    pidlRoot As LongPtr
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As LongPtr
    lParam As LongPtr
    iImage As Long
End Type

Public Function GetFolderDialog() As String
    Dim bi As BROWSEINFO
    Dim pidl As LongPtr
    Dim path As String * 260
    Dim result As Long

    bi.lpszTitle = "フォルダを選択してください"
    bi.ulFlags = &H1

    pidl = SHBrowseForFolder(bi)
    If pidl <> 0 Then
        SHGetPathFromIDList pidl, path
        GetFolderDialog = Left(path, InStr(path, vbNullChar) - 1)
    Else
        GetFolderDialog = ""
    End If
End Function

このコードは、VBA でフォルダ選択ダイアログを表示するための関数が提供されます。
以下のステップでこの関数を使用できますGetFolderDialog

1. ExcelなどのVBAを実行中のアプリケーションで新しいモジュールを作成します。
2. 上記のコードを新しいモジュールに貼り付けます。
3. VBAコード内で、GetFolderDialog関数を呼び出すことで、
 フォルダ選択ダイアログを表示し、選択されたフォルダのパスを取得できます。

以下は、VBAコード内でGetFolderDialog関数を呼び出す例です

Sub SelectFolder()
    Dim selectedFolder As String
    selectedFolder = GetFolderDialog()

    If selectedFolder <> "" Then
        MsgBox "選択されたフォルダパス: " & selectedFolder
    Else
        MsgBox "フォルダが選択されませんでした。"
    End If
End Sub

このコードを実行すると、ボタンをクリックするとフォルダ選択ダイアログが表示され、
選択されたフォルダのパスがメッセージボックスに表示されます。

■■ ChatGPT(3.5)に聞いてみた & 回答 ② ■■

【プロンプト入力】
■質問概要
VBAのコードを書いてください。
■質問詳細
以下を実現するVBAのコードを書いてください。
1:シート上にボタンを配置
2:ボタンを押下
3:ダイアログ画面が表示
4:ダイアログ画面にはフォルダを選択可能な機能を有している
5:ダイアログ画面からフォルダを選択
6:選択されたフォルダパスを「セル:A3」に入力する
■条件
VBAのコードは簡潔に記載されたもの
■回答形式
VBAコード

【ChatGPT(3.5)回答】
以下は、Excel VBAを使用して指定された要件を満たすコードの例です。

Sub SelectFolderAndInputPath()
    Dim folderDialog As FileDialog
    Set folderDialog = Application.FileDialog(msoFileDialogFolderPicker)
    
    With folderDialog
        .Title = "フォルダを選択してください"
        .ButtonName = "フォルダを選択"
        If .Show = -1 Then ' ダイアログで「フォルダを選択」がクリックされた場合
            Sheets("シート名").Range("A3").Value = .SelectedItems(1)
        End If
    End With
    Set folderDialog = Nothing
End Sub

このコードをExcelVBAエディタで新しいモジュールに貼り付け、
ボタンのマクロとして実行できます。

ボタンをクリックすると、フォルダ選択ダイアログが表示され、
選択されたフォルダのパスがセルA3に入力されます。
として、「シート名」を実際のシート名に置き換えてください。

■■ ChatGPT(3.5)の回答② を使ってみた ■■

ツール(VBA)に生成したコードを追加、シート名を修正


以下実施 ・・・ 詳細は省略
・ボタン配置
・配置したボタン(フォルダパス指定)と AI 生成したコードを紐付ける

「 フォルダパス指定 」 ボタン押下

フォルダを選択 → 「 フォルダを選択 」 ボタン押下

「 セル:A3 」にフォルダパスが設定される

「 フォルダ名・ファイル名取得 」 ボタン押下

おわりに

プロンプト(聞き方)によって、
得られる回答に大きな違いがあることが見て取れました。

最初に手間(テクニック)を掛けておくことで効率良く対処できることは、
生成AI に限らず、開発を依頼するベンダー先等への対応としても、
大切になる要素ではないかと再確認させられる内容でした。