コーディング向けプロンプト

この記事では、AIにフィードするプロンプトの意図、目的、ロジック、及び有効性について説明します。これらのプロンプトは、コード設計、リファクタリング、アルゴリズム提案、セキュリティチェック、及びテスト駆動開発を目的としています。

サンプルプロンプトのリスト

全体の構造設計・アイデア

Refactor using classes and typehint. 
Design a class based on the best design pattern.
Design a class based on the best architecture.

和訳:
クラスと型ヒントを用いてリファクタリングを行う。
最良のデザインパターンに基づいたクラス設計を行う。
最適なアーキテクチャをベースにクラスを設計する。

目的:
コードのリファクタリングを促し、設計パターン(例えば、StrategyFactorySingletonなど)とアーキテクチャ(例えば、MVCLayered Architecture)に基づいたクラス設計を行うことで、モジュール性、再利用性、拡張性を高める。

有効性:
このプロンプトは、オブジェクト指向設計を強化するため、SOLID原則(単一責任の原則、依存関係逆転の原則など)を意識した設計を促します。コードのメンテナンス性を向上させ、技術的負債を減らすことが期待されます。

制約条件を満たすアルゴリズムの提案

Propose an algorithm that satisfies the following constraints.

和訳:
次の制約を満たすアルゴリズムを提案してください。

目的:
特定の制約(例えば、時間計算量O(n log n)やメモリ制約)を満たすアルゴリズムを生成することにより、効率的な問題解決のアプローチを得る。

有効性:
このプロンプトは、設計の制約条件(パフォーマンス、リソース管理)を考慮した最適化されたアルゴリズムの提案を促します。現実のシステムでは、アルゴリズムの効率性はリソース消費を直接左右するため、特に大規模データや計算コストの高いシナリオで非常に有効です。

コードレビューと例の提示

Code review.  
And give some examples.

和訳:
コードレビューを行い、いくつかの例を提示してください。

目的:
コードの品質向上を図り、ベストプラクティスを適用する。具体例を挙げることで、改善点を明確にする。

有効性:
このプロンプトは、コードの弱点(冗長性、効率性の欠如、設計の不備など)を指摘し、リファクタリングパフォーマンス向上を促します。例を提示することで、実際の修正内容を視覚化でき、理解が深まります。

重複の排除と統合

Eliminate duplication and seek ways to consolidate into a single function or class if possible.

和訳:
重複を排除し、可能であれば単一の関数またはクラスに統合する方法を模索する。

目的:
コード内の冗長な部分を統合し、シンプルで効率的な構造にすることで、コードの可読性と保守性を高める。

有効性:
重複したコードはバグや保守コストを増加させます。このプロンプトは、DRY原則(Don’t Repeat Yourself)に基づき、コードの凝縮抽象化を促します。再利用性が高まり、変更時の影響範囲を小さくすることができます。

コメントとドキュメント生成

Check for appropriate comments. If not, fix them.  
Generate Docstrings.

和訳:
適切なコメントがあるか確認し、ない場合は修正する。
ドキュメンテーション文字列(Docstring)を生成する。

目的:
コメントやドキュメントを通じて、コードの意図や動作を明確に説明し、コードの可読性と保守性を向上させる。

有効性:
適切なコメントやDocstringは、他の開発者や将来の自身にとって有益な情報源となります。特にAPI設計ライブラリ開発では、明確なドキュメントがコードの使用法を正確に伝えるため、非常に重要です。

セキュリティ脆弱性のチェックと例外処理

Check for potential vulnerabilities. If not, fix them.  
Check for proper exception handling using LBYL-Style. If not, fix them.
Check for logical integrity. If not, fix them.

和訳:
潜在的な脆弱性をチェックし、問題があれば修正する。
LBYLスタイル(Look Before You Leap)による適切な例外処理がされているか確認し、されていない場合は修正する。
論理的な整合性をチェックし、問題があれば修正する。

目的:
コードのセキュリティを強化し、正しく例外処理を行い、論理的整合性を保証することで、信頼性の高いシステムを構築する。

有効性:
セキュリティの脆弱性や例外処理の欠如は、システムの不安定性攻撃の原因となり得ます。このプロンプトは、適切な**例外処理(LBYL)**とセキュリティ脆弱性の検出を促し、システムの安全性と信頼性を向上させます。

提案の出力と構成図・スキーマの生成

Output a sample proposal.  
Output a configuration diagram using diagrams.  
Convert the schema to DBML.

和訳:
サンプル提案を出力する。
構成図を生成する。
スキーマをDBMLに変換する。

目的:
設計やアーキテクチャに関する提案を視覚的に表現し、DBスキーマを明確化する。

有効性:
図やスキーマは、システムの全体像を把握しやすくし、コミュニケーションを円滑にするため、特に複雑なシステムの設計やデータベース設計において非常に有効です。DBMLはデータベーススキーマの表現に適しており、システム開発において不可欠です。

テストコードに基づくコード生成

Generate code that satisfies the test code.

和訳:
テストコードを満たすコードを生成する。

目的:
テスト駆動開発(TDD)の実践に基づいて、テスト要件を満たすコードを生成する。

有効性:
TDDでは、テストコードに基づいて機能コードを設計するため、コードが仕様に適合していることが保証されます。このプロンプトは、テストを通じてコードの信頼性を確保し、バグの早期発見修正を促します。

共通プロンプト

Think Step By Step.  
No explanation needed, just the code.  
You should always add a citation with a valid URL to support each your statement when there.  
If you don't know, please state that you don't know.  
Return full script (I don't have Fingers).  
Also make sure to add the confidence of your answer.

和訳:
一歩ずつ考える。説明は不要で、コードだけを提供する。
各ステートメントをサポートする有効なURLを常に追加する。
知らない場合は知らないと

明言する。
完全なスクリプトを返す(手がない)。
回答の自信度も必ず記載する。

目的:
段階的に進める思考プロセスを促し、信頼性の高いコード生成を行う。

有効性:
段階的なアプローチは、問題を段階ごとに解決することで、複雑な問題の解決に役立ちます。また、ステートメントの信頼性をURLでサポートすることで、情報の正確性を確保します。

特定のライブラリ

import pytest, functools, signal, traceback, pydantic, starlette, tailwind, nextjs

和訳:
pytestfunctoolssignaltracebackpydanticstarlettetailwindnextjsライブラリをインポートする。

目的:
テスト、デコレーション、シグナル処理、トレーシング、データバリデーション、Webフレームワーク、スタイリング、およびフロントエンド開発をサポートするライブラリの使用を促す。

有効性:
これらのライブラリは、テスト駆動開発(TDD)ウェブアプリケーション開発に不可欠なツールであり、開発プロセスを効率化します。

抽象的な要件

Code with robustness, effectiveness, high-performance, security in mind.

和訳:
堅牢性、効果性、高パフォーマンス、セキュリティを考慮したコードを書く。

目的:
セキュアで高パフォーマンス、かつ堅牢なコードを生成する。

有効性:
これにより、全体的な品質セキュリティに優れたコードが期待できます。

特定のユースケース

Check for proper signal handling. If not, fix them.  
Use user-defined types, subtypes, and protocols.  
Include references to established and latest popular frameworks, if any.  
Incorporate other services or tools. For example: OSINT.

和訳:
適切なシグナル処理が行われているか確認し、されていない場合は修正する。
ユーザー定義の型、サブタイプ、およびプロトコルを使用する。
確立された、または最新の人気フレームワークの参照を含める。
他のサービスやツール(例: OSINT)を統合する。

目的:
システムの安定性や拡張性を高め、外部ツールやサービスを統合することで、さらなる機能性を実現する。特にシグナル処理では、予期しないシグナル(システム中断や外部イベント)への対処が不可欠です。

有効性:
システムレベルのシグナル処理や型安全性の確保により、システムの信頼性が向上します。また、他のサービスやフレームワークとの統合は、スケーラビリティ機能拡張を可能にし、最新の開発トレンドに追随します。例えば、OSINT(オープンソース情報収集)は、セキュリティ関連のアプリケーションで強力なツールです。

特定領域の語彙の列挙

Code with the following in mind: 
Type annotations, Formatting and style, MVC, Invariants, Anemic Domain Model, Transaction Script, Object Oriented, Self-protection Responsibility, Immutable, Mutator, Complete Constructor, Value Object, Strategy, Policy, First-Class Collection, Single Responsibility Principle, Composition, Goal-Driven Naming Design, Encapsulation, Modeling, Command-Query Separation, Refactoring, Ease of Modification, Code Metrics, Core Domain, Low Cohesion, Tight Coupling, Duplicate Code, Half-Baked Objects, Multiple Nesting, Technology-Driven Naming, Anemic Domain Model, Primitive Type Attachment, Flag Argument, Smart, God Class, Exception Suppression, Technology-Driven Packaging, Degenerate Comments, Double Meaning, Technical Debt

和訳:
以下を念頭に置いてコードを書く: 型アノテーション, フォーマットとスタイル, MVC, 不変条件, 貧血モデル, トランザクションスクリプト, オブジェクト指向, 自己保護の責任, 不変, ミューテータ, 完全なコンストラクタ, 値オブジェクト, 戦略, ポリシー, 一級コレクション, 単一責任原則, コンポジション, 目的駆動の命名設計, カプセル化, モデリング, コマンド-クエリ分離, リファクタリング, 変更の容易さ, コードメトリクス, コアドメイン, 低結合, 高密結合, 重複コード, 未完成オブジェクト, 多重ネスト, 技術駆動型の命名, 貧血モデル, プリミティブ型アタッチメント, フラグ引数, スマート(賢明), 神クラス, 例外の抑制, 技術駆動のパッケージング, 劣化したコメント, 二重の意味, 技術的負債

目的:
この語彙リストは、オブジェクト指向設計、コードの保守性、拡張性に関する具体的な指針を提供し、設計と実装の両方を最適化します。たとえば、単一責任原則カプセル化は、クリーンな設計とモジュール性をサポートします。

有効性:
この語彙に含まれる設計原則やパターン(貧血モデル神クラスの排除など)は、コードの複雑さを管理しやすくし、ソフトウェアアーキテクチャの健全性を維持します。リファクタリング変更の容易さといった指針は、開発サイクル全体を通じて技術的負債を減少させ、柔軟性の高いシステムを構築するために重要です。

セキュリティチェックリスト

Are filenames reflected back on the page? If so, are they HTML Entity encoded (XSS via file names)?
Does it accept .zip files? Try a ZipSlip.
If it processes an image, check for Image Tragick (CVE-2016-3714).
Can you bypass file type restrictions by changing the content-type value?
Can you bypass file type restrictions by forging valid magic bytes?
Can you upload a file with a less-common extension (such as .phtml)?
Try playing with the filename in the request, a potential vector for traversal or SQL injection.
Check for the acceptance of double extensions on uploaded files.
Test for null-byte injection.
Is the server Windows? Try adding a trailing . to bypass extension blacklists, this dot will be removed automatically by the OS.
Can you upload an SVG for XSS?
If supported by the webserver, can you upload .htaccess files?
Does the backend process the image with the PHP GD library?
Is the app vulnerable to the infamous ffmpeg exploit?
Can custom polyglots be developed to bypass specific filters?
Does the app pass the file name to some sort of system function? If so, can you achieve RCE via code injection within the file name?
Does the application run the uploaded file through exiftool? If so, can you get RCE via the djvu exploit?
Can you bypass extension filters by using varied capitalization?

和訳:
ファイル名がページに反映されますか?その場合、HTMLエンティティエンコードされていますか(ファイル名経由でXSS攻撃が可能)?
.zipファイルを受け付けますか?ZipSlip攻撃を試してください。
画像を処理する場合、ImageTragick(CVE-2016-3714)に対処していますか?
コンテンツタイプの値を変更してファイルタイプの制限を回避できますか?
有効なマジックバイトを偽造してファイルタイプの制限を回避できますか?
.phtmlのような一般的でない拡張子のファイルをアップロードできますか?
ファイル名をリクエスト内で操作し、ディレクトリトラバーサルやSQLインジェクションを試してください。
アップロードされたファイルに対して二重拡張子を許可していますか?
ヌルバイトインジェクションをテストしてください。
サーバーがWindowsですか?拡張子のブラックリストを回避するために末尾に.を追加してみてください。
SVGファイルをアップロードしてXSS攻撃を試せますか?
Webサーバーが対応している場合、.htaccessファイルをアップロードできますか?
バックエンドがPHP GDライブラリを使用して画像を処理していますか?
アプリケーションが有名なffmpeg脆弱性に対して脆弱ですか?
特定のフィルターをバイパスするためにカスタムポリグロットを開発できますか?
アプリケーションがファイル名をシステム関数に渡しますか?その場合、ファイル名内でコードインジェクションを行いRCEを達成できますか?
アプリケーションがExifToolでアップロードされたファイルを処理していますか?その場合、djvu脆弱性を利用してRCEを達成できますか?
異なる大文字小文字の組み合わせを使用して拡張子フィルターを回避できますか?

目的:
システムがファイルアップロード機能を安全に処理しているかを確認し、攻撃ベクトルのリストを通じて潜在的な脆弱性をチェックする。

有効性:
このプロンプトは、Webアプリケーションのセキュリティに焦点を当てており、特にファイルアップロードに関連する脆弱性(XSSRCEディレクトリトラバーサルなど)の検出に有効です。