ChatGPTプロンプト集

ChatGPTのプロンプト集。

231 views

はじめに

あなたはプログラマーです。次に指示するプログラムを作成してください。

使用するWEBフレームワーク

CakePHP4を使用する。
CakePHP4のインストールとDBの設定は完了済みの前提で説明すること。
ただし、modelクラスやentityクラスは作成していないため、必要に応じて作成すること。

実装におけるアーキテクチャ

CakePHP4のコードは、クリーンアーキテクチャに基いて実装すること。

入力フォーム

ビューからコントローラーへの入力フォームはCakePHP4で定義されている"モデルの無いフォーム"を使用すること。

UseCase

ユースケースは、CakePHP4で提供されているサービスクラス(依存性の注入)で実現すること。
サービスに関しては以下のURLを参考にすること。
依存性の注入 (DI)

DataAccess

クリーンアーキテクチャのデータアクセスはCakePHP4のモデルクラスを使用すること。

Entity

クリーンアーキテクチャのエンティティはCakePHP4のエンティティクラスを使用すること。

ViewModel

コントローラーからViewに渡すためのデータはViewModelを作成して渡すこと。

レスポンシブ

ViewはBootstrap5を使用して実装すること。

用語の定義

用語 説明
部分一致 検索キーワードを含む文字列を検索すること。
完全一致 検索キーワードと一致する文字列を検索すること。

作成するプログラムの概要

samplesテーブルが定義されている。

項目名 説明
id INT 主キー
name varchar(255) 名前を入力する
update_at DATETIME型 データが更新された時間を入力する
create_at DATETIME型 データが追加された時間を入力する

samplesテーブルに対して、次の操作を行えるようにしたい。

  • 表示と検索
  • 新規追加
  • 編集
  • 削除

各操作について説明する。

表示と検索の詳細

表示と検索の詳細について説明する。
[URL]
samples/index

Viewのテンプレートを以下に示す。
[templates/samples/index.php]
検索ボックスはモデルの無いフォームを使用して検索できること。

<?php
/**
 * @var \App\View\AppView $this
 * @var iterable<\App\Model\Entity\Sample> $samples
 * @var \App\Form\SearchForm $searchForm
 */
?>
<div class="samples index content">
    <?= $this->Html->link(__('新規追加'), ['action' => 'add'], ['class' => 'btn btn-primary float-end']) ?>
    <h3><?= __('Samplesテーブル') ?></h3>

    <!-- 検索ボックスの追加 -->
    <div class="search-box mb-3">
        <?= $this->Form->create($searchForm, ['type' => 'get', 'class' => 'd-flex']) ?>
        <?= $this->Form->control('search', [
            'label' => false,
            'value' => $search,
            'class' => 'form-control me-2',
            'placeholder' => '名前で検索'
        ]) ?>
        <?= $this->Form->button(__('検索'), ['class' => 'btn btn-primary']) ?>
        <?= $this->Form->end() ?>
    </div>

    <div class="table-responsive">
        <table class="table table-striped table-bordered">
            <thead>
            <tr>
                <th><?= $this->Paginator->sort('id') ?></th>
                <th><?= $this->Paginator->sort('name', '名前') ?></th>
                <th><?= $this->Paginator->sort('create_at', '作成日') ?></th>
                <th><?= $this->Paginator->sort('update_at', '更新日') ?></th>
                <th class="actions"><?= __('操作') ?></th>
            </tr>
            </thead>
            <tbody>
            <?php foreach ($samples as $sample): ?>
                <tr>
                    <td><?= $this->Number->format($sample->id) ?></td>
                    <td><?= h($sample->name) ?></td>
                    <td><?= h($sample->create_at) ?></td>
                    <td><?= h($sample->update_at) ?></td>
                    <td class="actions">
                        <?= $this->Html->link(__('詳細'), ['action' => 'view', $sample->id], ['class' => 'btn btn-primary btn-sm']) ?>
                        <?= $this->Html->link(__('編集'), ['action' => 'edit', $sample->id], ['class' => 'btn btn-secondary btn-sm']) ?>
                        <?= $this->Form->postLink(__('削除'), ['action' => 'delete', $sample->id], ['confirm' => __('Are you sure you want to delete # {0}?', $sample->id), 'class' => 'btn btn-danger btn-sm']) ?>
                    </td>
                </tr>
            <?php endforeach; ?>
            </tbody>
        </table>
    </div>
    <div class="paginator">
        <ul class="pagination justify-content-center">
            <?= $this->Paginator->first('<< ' . __('first'), ['class' => 'page-item']) ?>
            <?= $this->Paginator->prev('< ' . __('previous'), ['class' => 'page-item']) ?>
            <?= $this->Paginator->numbers(['class' => 'page-item']) ?>
            <?= $this->Paginator->next(__('next') . ' >', ['class' => 'page-item']) ?>
            <?= $this->Paginator->last(__('last') . ' >>', ['class' => 'page-item']) ?>
        </ul>
        <p><?= $this->Paginator->counter(__('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')) ?></p>
    </div>
</div>


samplesテーブルの次のデータを表形式で表示する。
・id
・name

idの表示テーブルの列名は"id"と表示する。
nameの表示テーブルの列名は"名前"と表示する。

初期表示では、idの降順に表示する。
1ページあたりの表示上限数は10件としたページネーションを行う。

表示テーブルの上段には検索ボックスを設け、次の検索ができる。
ユーザーは、次のフォームに名前を入力することで、該当するレコードを検索できる。

ラベル名:名前
入力:テキストボックス

入力された文字列がnameに含まれているものを検索する。
ページ送りが行われた場合、検索条件は引き継ぐ。

表示画面には新規追加ボタンがあり、クリックすると新規追加画面に遷移する。

新規追加の詳細

URL:samples/add
ユーザーは"名前"のフォームに入力した名前を新規に追加できる。
samplesテーブルのnameに入力された名前を保存する。
新規追加した時刻をcreateatとupdateatに保存する。
戻るボタンを押した場合、前の表示画面に戻る。

編集の詳細

URL:samples/edit
ユーザーは"名前"のフォームに入力した名前をを編集できる。
samplesテーブルのnameの文字列を入力された名前で更新する。
新規追加した時刻でupdate_atを更新する。
編集は、表示画面から"編集ボタン"から遷移する。
戻るボタンを押した場合、前の表示画面に戻る。

削除の詳細

URL:samples/delete
samplesテーブルから指定したレコードを1件削除する。
削除は、表示画面の"削除ボタン"から削除できる。
削除する前に"削除しますか?"のメッセージをダイアログに表示し、OKボタンが押された場合に削除する。

その他

検索、表示、追加、編集、削除で日本語が扱えるようにすること。

ChatGPTの出力

上記の内容を踏まえてソースコードを作成してください。
回答は作成するファイル名ごとに、次の形式で回答してください。
それ以外は回答しないでください。見出しやまとめは不要です。
マークダウンで記述しないでください。

[@ファイル名@]
src/Controller/SamplesController.php

[@ソースコード@]
<?php
    echo "Hello";

Page 1 of 1.



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626