Instruction file imported from tatsuya-midorikawa/blitz-notepad (
.github/instructions/non-functional-requirement.instructions.md). Copyright stays with the author.
Non Functional Requirement
1. 機能性
- セキュリティー脆弱性がないこと
- 不具合がないこと
- 仕様を満たしていること
2. 信頼性
- クラッシュやフリーズがないこと
- データの損失がないこと
- エラーが適切に処理されること
- UI テストを必ず実施すること
- 入力テストは
日本語を利用し、文字化けなどが一切発生しないことを確認すること - 大容量ファイルの読み込みテストを実施し、クラッシュやフリーズが発生しないことを確認すること
- 文字コードの自動判定テストを実施し、UTF-8 / UTF-16 / ローカルコードページのファイルが正しく判定されることを確認すること
- 改行コードの判定テストを実施し、CRLF / LF / CR のファイルが正しく判定されることを確認すること
- 各種編集操作のテストを実施し、データの損失や不整合が発生しないことを確認すること
- 入力テストは
3. 使用性
- 直感的なユーザーインターフェースを提供すること
- ユーザードキュメントが提供されること
4. 効率性
- プログラムの起動が notepad と同程度の速さであること
- 大容量ファイルの処理が高速であること
- システムリソースの使用が最適化されていること
- レスポンスが迅速であること
- 検索処理が高速であること
- 描画処理が高速であること
5. 保守性
- コードが関数型プログラミングの原則に従っていること
- コードがモジュール化されていること
- コードがドキュメント化されていること
- コードがテストされていること
- コードがリファクタリングされていること
- コードがコードレビューされていること
- コードがクリーンであること
- コードが読みやすいこと
6. 移植性
- Windows 10/11 以降の環境 と macOS 環境で動作すること
- 将来的な Windows / macOS のバージョンアップに対応できること
7. 拡張性
- プラグイン機構を提供すること
- API を提供すること
- カスタマイズ機能を提供すること
- ユーザースクリプト機能を提供すること
- 将来的な機能追加に対応できること
8. 国際化対応
- 多言語対応のユーザーインターフェースを提供すること
- Unicode 文字の表示と編集をサポートすること
- ローカルコードページのファイルの読み書きをサポートすること
- 文字コードの自動判定機能を提供すること
9. 技術要件
- Rust + LLVM を使用して開発すること
- Windows 10/11 以降の環境では
windowsクレートを使用して Win32 API および DirectWrite/Direct2D を利用すること - macOS 環境では Cocoa の標準コントロールを使用せず、Rust コアと
core-text/core-graphicsクレートによる独自描画を実装すること - 大容量ファイルの処理には、
memmap2クレートを使用してメモリマップドファイルを利用すること - テキスト編集の内部表現には Piece Table を採用すること
- 文字コードの自動判定には、先頭数十キロバイト程度を対象とすること
- 改行コードの自動判定には、先頭数キロバイト程度を対象とすること
- 行頭オフセット配列を保持し、行番号表示や行移動の高速化を図ること
- 描画処理は、スクロール位置から算出される可視行に限定すること
- カーソル位置やクリック位置の計算は、対象行のみをレイアウト対象とすること
- マルチカーソル編集は、文書末尾側から順に処理すること
- 検索ハイライトは、可視テキストを対象とすること
- 選択語ハイライトは、200 バイトを超える範囲を対象とすること