この記事は、Zennに投稿した以下の記事の再投稿になります
はじめに
今まで面倒だと思っていた作業をどうにかChatGPTくんに代わりにやってもらおうと試行錯誤した結果を、せっかくなので紹介してみようと思い記事にしています。
作ったプロンプトはいくつかあって、一気に全部書くと読みにくくなりそうなので1つずつ記事にしていきます。
第一話「キー名を考えてもらおう!」
さて、今回のタイトルは「キー名を考えてもらおう!」です。意図としては、入力として渡した値に適したキー名をChatGPTに出力してもらおう、というものです。
「キー名?何の?」って感じですよね。もう少し具体的に、何をさせようとしていたのか説明します。
「前置きはいいから早くプロンプトが見たい!」という方は、次の章まで飛ばしてもらって大丈夫です。
みなさんは、以下のようなyamlファイルを見たことがあるでしょうか。
out_of_stock: 在庫が不足しています
failed_order_complete: 注文に失敗しました
access_disabled: このページにアクセスすることはできません
見たことがなくても、このファイルに何をさせたいのかなんとなくわかるかもしれないですね。
これは、エラーメッセージとして使用したいテキストを1つのファイルに集約し、ハッシュとして扱いたい時に使用するyamlファイルです。SymfonyのYamlコンポーネントを用いることで、キー名に対応するメッセージを文字列で取得することが可能になります。
# コード上では、この「キー名」を指定してメッセージを取得させる
[キー名]: [メッセージ]
こうすることで、コード上にメッセージをベタ書きせずにキー名で取得したものを表示させることができます。
ところで、このキー名ですが、極端な話a
とかb
みたいなものでも問題ないんですよね。ですが、それだとキー名がどんなメッセージと紐づいているのかコード上でわかりにくくなってしまいますから、きちんと意味のある言葉にするのが普通だと思います。
私はこのキー名を考える作業をちょっと苦手に感じています。
というのも、上記の例くらい単純なエラーだったらそんなに時間がかからないんですが、エラーメッセージ自体が長い場合は英訳や要約に少し時間がかかってしまい、英語が苦手な私にとっては結構なストレスになるのです。
日本語のメッセージからキー名を出力してくれるジェネレータのようなものも触ってみましたが、細かいルールが決められなかったり既存のキー名との共通性を持つことができなかったりするため、結局ほぼ毎回人間が手直しする必要があり、便利とは言えませんでした。
そこで思いついたのが、ChatGPTに考えてもらう方法です。ChatGPTなら細かいルールの指定ができるし、例として既存のキー名を与えれば共通性のあるキー名の出力も可能なのではないかと思ったわけです。
さて、前置きが長くなりましたが、次の章から実際に作成したプロンプトと実行例を紹介していきます。
完成したプロンプトの紹介
この章では、試行錯誤の末に完成したプロンプトと、その実行例を紹介していきます。早速、プロンプトを紹介します。
- 入力
エラーメッセージに使用されるテキストのパラメータをyamlファイルにまとめます。
以下は、その例です。out_of_stock: 在庫が不足しています failed_order_complete: 注文に失敗しました access_disabled: このページにアクセスすることはできません
入力としてエラーメッセージを渡すので、あなたはそれに合うキー名を考えて出力してください。
ヒントとしてエラーメッセージを実際に表示する場面についてこちらから説明する場合があります。参考にしてください。
出力の際は、以下のルールを守ってください。
- できるだけ冗長性を減らすこと
- キー名は英語で表記すること
また、より精度の高い出力結果を得るために必要な情報があれば質問してください。
- 出力
エラーメッセージを渡された場合に、それに合ったキー名を出力するためには、エラーメッセージとキー名の対応関係を把握する必要があります。もし、エラーメッセージを表示する場面についての具体的な説明があれば、それに基づいてより適切なキー名を提供することができます。
例えば、ウェブサイトのフォームで入力されたデータが正しくない場合、フォームの各項目に対応するエラーメッセージが表示される場合があります。この場合、以下のようなキー名が考えられます。
name_invalid: 名前が無効です email_invalid: メールアドレスが無効です password_short: パスワードは8文字以上で入力してください password_mismatch: パスワードが一致しません age_invalid: 年齢が無効です
また、アクセス制御に関するエラーの場合は以下のようなキー名が考えられます。
access_denied: アクセスが拒否されました login_required: ログインが必要です permission_denied: 権限がありません
注文処理に関するエラーの場合は以下のようなキー名が考えられます。
payment_failed: 支払いに失敗しました item_unavailable: 商品が利用できません cart_empty: カートが空です
こんな感じで、ルールを教えると最初にいくつか「こんな感じで出力しますよ」といった感じで例を挙げてくれます。
実際にキー名を出力してもらう
ルールを教えたので、早速キー名を出力してもらいましょう。
エラーメッセージを入力してみます。
- 入力
このメールアドレスは使用できません
- 出力
以下は、入力されたエラーメッセージに合わせたキー名の例です。
email_unavailable: このメールアドレスは使用できません
このように、使用できないメールアドレスを指定した場合
email_unavailable
というキー名を使用することができます。
ちゃんと入力したメッセージに合ったキー名を考えてくれましたね。
2つ入力すると、出力も2つ返してくれます。
- 入力
・形式が間違っているため、この名前は使用できません
・形式が間違っているため、このメールアドレスは使用できません
- 出力
以下は、入力されたエラーメッセージに合わせたキー名の例です。
name_format_error: 形式が間違っているため、この名前は使用できません email_format_error: 形式が間違っているため、このメールアドレスは使用できません
このように、名前やメールアドレスの入力フォームで、形式が間違っている場合に出力されるエラーメッセージの場合、それぞれ
name_format_error
、email_format_error
というキー名を使用することができます。
こんな感じです。キー名のフォーマットが揃っているのがいいですね。
上記の例のように2つ一気に入力するとこうなりますが、1つずつ入力すると、それぞれname_unavailable_invalid_format
、email_invalid_format
が出力されます。キー名のフォーマットを揃えたい場合は、複数一気に入力するといいようです。
最後に
入力したメッセージからキー名を考えてもらうプロンプトを紹介しました。
今回はエラーメッセージに対するキー名でしたが、ちょっとプロンプトを書き換えれば変数名、関数名、定数名と何でも出力できそうですよね。
ジェネレータっぽいWEBサイトもありますが、キャメルケースやスネークケースなどを自由に指定できなかったり、フォーマットが揃わなかったりと若干不便だったので、細かいルールを指定できるChatGPTはめちゃくちゃ便利だと思います。私と同じようにキー名を考えるのが苦手な方は、是非一度使ってみてください。
また、冒頭にも書きましたが、これ以外にもプロンプトを作成しているので、順次同じようにブログにして紹介していきます。書いたらこのブログにもリンクを紐づけますので、興味を持っていただけたら読んでいただけると幸いです。時間見つけて頑張って書きます。