プロダクトコンテキスト用のドキュメント@AI用ドキュメント¶
このドキュメントはfooプロダクトのコンテキストであり、生成AIに読み込ませることを想定している。
fooプロダクトのコンテキストを生成AIに入力することで、生成AIがfooプロダクトのコンテキストに合ったアイデアを出力できるようにする。
ハイコンテキストな情報¶
ハイコンテキストな情報とは¶
生成AIが苦手とするfooプロダクト固有の情報を『ハイコンテキストな情報』に分類している。
プロダクト情報¶
本プロジェクトはマルチリポジトリのうちの一つのリポジトリ(foo-web)であるため、親ディレクトリに移動 (cd ../) し、関連コンポーネントのドキュメントやコードから情報を集めて
Remixフレームワークで構築されたSSRアプリケーションである。
| 構成要素 | 説明 |
|---|---|
foo-web |
本リポジトリで管理するコンポーネント。fooプロダクトのフロントエンドである。 |
foo-api |
別リポジトリのコンポーネントである。fooプロダクトのバックエンドである。 |
ディレクトリ構成の規約¶
fooプロダクトのディレクトリ構成と、各ディレクトリ内のファイルに実装すべきロジックは以下の通りである。
新しいロジックは、適切なディレクトリ内のファイルに実装すること。
// ここにディレクトリ構成
ファイル間の依存方向の規約¶
fooプロダクトの各ディレクトリ間の依存方向 (importの方向) は、以下のMermaid図に従うものとする。
// ここに依存関係を表すMermaid図
Mermaid図において、矢印は依存関係 (importの方向) を示している。
つまり、矢印の始点にあるディレクトリは終点のディレクトリに依存しており、始点のディレクトリから終点のディレクトリへのimportを許可する一方で、逆方向のimportは禁止である。
たとえば、modelsディレクトリ内のファイルは、同じmodelsディレクトリ内ファイルまたはrepositoriesディレクトリ内ファイルのみをimportできる。
それ以外のディレクトリ内のファイルをimportすることは禁止である。
DBテーブルの一覧¶
./prisma/schema.prismaファイルに定義されているDBテーブルの情報を以下に示す
| DBテーブル名 | 管理データ |
|---|---|
| Foo | 〇〇の設定情報 |
| Bar | △△の資格情報 |
ローコンテキストな情報¶
ローコンテキストな情報とは¶
生成AIが得意とするfooプロダクトに依らない情報を『ローコンテキストな情報』に分類している。
可読性の規約¶
- 関数名は、責務を適切に表し、動詞+名詞の形式で命名すること (例:
getUserById()) 。 - if文が複数ネストする場合は、早期リターンを用いて処理を簡潔にすること。
- グローバル変数はアッパースネークケース、それ以外の変数はローワーキャメルケースで命名すること (例:
MAX_RETRY_COUNT、userName) 。 - ほかのファイルから呼び出していない関数をプライベート関数として定義していること
拡張性・保守性の規約¶
- 複数回呼び出されるロジックのみ、関数や定数に分離すること。一度しか使用されないロジックは、呼び出し元の処理に統合すること。
- 厳密な型定義を使用し、
any型は禁止である。 - 型定義の方法は統一し、すべて
typeエイリアスで定義すること。 - 定義後に一度も使用されていない変数、定数、関数は削除すること。
- コンポーネント実装時は
React.FCの使用は禁止し、JSX.Elementを使用する - 関数の引数には型アノテーションを明示すること
信頼性の規約¶
- リクエストで受信したパラメーターには、適切なバリデーションを実装すること。
- バックエンドで例外が発生しうる処理は、
try-catchを使用してハンドリングすること。例外が発生した場合は、./barディレクトリにあるロガーで開発者向けのエラーログを出力すること。また、Reactコンポーネントではユーザー向けのエラーメッセージを表示すること。 - テストコードが存在しない場合は、正常系・異常系を網羅するテストを実装すること。E2Eテストコードは
./bazディレクトリに配置すること。 - 時間のかかる処理(外部通信、ポーリング、DB操作、ファイル操作、計算、暗号化、圧縮解凍など)は非同期で実装すること。
- 通信処理には、リトライ処理を実装すること。
安全性の規約¶
- 機密性の高い情報をログメッセージに出力することは禁止である。
- 機密性の高い情報 (ログイン資格情報やアクセストークンなど) はハードコーディングせず、
.envファイルと.env.exampleファイルに環境変数として定義するように提案すること。環境変数はRemixの環境に応じた適切な方法 (バックエンドではprocess.env.<環境変数名>、フロントエンドではuseLoaderData関数) で呼び出すこと。ただし、安全性の観点で.envファイルを生成AIに学習させたくないため、提案のみで実装は不要である。
その他¶
生成AIの読み取りから除外するファイル¶
以下のファイルは機密情報を含む可能性があり、生成AIに学習させないために読み取りを除外する。
.envファイル