# 非機能要件定義書

## 概要

本ドキュメントは、Oh My Zsh（Zshシェル用の構成管理フレームワーク）の非機能要件を定義するものです。Oh My Zshはコマンドラインインターフェース（CLI）ツールであり、ウェブアプリケーションやサーバーサイドシステムとは異なる特性を持ちます。シェルの起動時間、プラグイン読み込み性能、セキュリティ、保守性に焦点を当てて要件を定義します。

## 性能要件

### レスポンスタイム

| 処理種別 | 目標値 | 備考 |
| --- | --- | --- |
| シェル初期化 | 500ms以内 | oh-my-zsh.sh読み込みからプロンプト表示まで |
| プロンプト描画 | 100ms以内 | 非同期処理対応による体感速度向上 |
| 補完機能応答 | 200ms以内 | zcompdumpのコンパイル済みキャッシュ使用時 |
| 更新チェック | 2秒以内 | GitHub API接続タイムアウト設定: 2秒 |
| 非同期Git情報取得 | バックグラウンド処理 | async_prompt.zsh使用時 |

### スループット

| 項目 | 目標値 | 備考 |
| --- | --- | --- |
| プラグイン読み込み数 | 制限なし | 性能はプラグイン数に応じて線形低下 |
| テーマ数 | 150以上対応 | bundled themes |
| 履歴保存件数 | 最大50,000件 | HISTSIZE設定値 |
| 履歴ファイル保存件数 | 最大10,000件 | SAVEHIST設定値 |

## 可用性要件

| 項目 | 目標値 | 備考 |
| --- | --- | --- |
| 稼働率 | 99.9%以上 | ローカル実行のため外部依存は更新機能のみ |
| 計画停止時間 | なし | ローカル実行ツールのため |
| 障害復旧時間（RTO） | 即時 | 手動更新またはアンインストール/再インストール |
| 目標復旧時点（RPO） | N/A | ステートレス動作、設定ファイルはユーザー管理 |
| オフライン動作 | 完全対応 | 更新チェック以外の全機能はオフラインで動作 |

### 更新・保守サイクル

| 項目 | 設定値 | 備考 |
| --- | --- | --- |
| デフォルト更新チェック間隔 | 13日 | zstyle ':omz:update' frequencyで変更可能 |
| 最短更新チェック間隔 | 0日（毎回） | 推奨されない |
| 更新ロック有効期間 | 24時間 | 同時更新防止のロックファイル自動削除 |

## セキュリティ要件

### 権限管理

| 要件 | 実装内容 |
| --- | --- |
| 補完ディレクトリ権限チェック | compauditによる不安全なディレクトリ検出と警告 |
| グループ・その他書き込み権限禁止 | group/other writableディレクトリからの補完読み込み拒否 |
| 安全な補完読み込み | compinit -iオプションによるセキュアモード |
| 補完セキュリティバイパス | ZSH_DISABLE_COMPFIX=trueで無効化可能 |

### コード実行セキュリティ

| 要件 | 実装内容 |
| --- | --- |
| Zshバージョン検証 | 非Zshシェルからの実行防止 |
| エミュレーションモード検出 | Zshエミュレーションモードでの実行拒否 |
| インストールスクリプト検査 | マニュアル検査手順をドキュメント提供 |
| サードパーティプラグイン分離 | custom/ディレクトリによる隔離 |

### セキュリティインシデント対応

| 項目 | 内容 |
| --- | --- |
| 脆弱性報告窓口 | security@ohmyz.sh またはGitHub Security Advisories |
| サポートバージョン | masterブランチの最新コミットのみ |
| 迅速対応体制 | INCIDENT_RESPONSE_PLAN.mdに基づく対応 |
| CVSSスコアリング | CVSS v3.1による脆弱性評価 |

### サプライチェーンセキュリティ

| 要件 | 実装内容 |
| --- | --- |
| GitHub Actions Harden | step-security/harden-runnerによる監査 |
| 依存関係更新 | Dependabotによる週次自動チェック |
| OpenSSF Scorecard | サプライチェーンセキュリティの継続評価 |
| アクションピン留め | 全GitHub ActionsはSHAでピン留め |

## 拡張性要件

### プラグインシステム

| 要件 | 実装内容 |
| --- | --- |
| カスタムプラグイン | $ZSH_CUSTOM/plugins/でユーザー定義プラグイン対応 |
| プラグイン上書き | 同名のカスタムプラグインでビルトインを上書き可能 |
| 補完関数拡張 | fpathへの自動追加でカスタム補完対応 |
| 関数・補完ディレクトリ | functions/とcompletions/の自動読み込み |

### テーマシステム

| 要件 | 実装内容 |
| --- | --- |
| カスタムテーマ | $ZSH_CUSTOM/themes/でユーザー定義テーマ対応 |
| テーマランダム選択 | ZSH_THEME="random"で起動毎にランダム選択 |
| テーマ候補リスト | ZSH_THEME_RANDOM_CANDIDATES配列でフィルタリング |
| テーマ除外リスト | ZSH_THEME_RANDOM_IGNOREDで特定テーマを除外 |

### 設定カスタマイズ

| 項目 | カスタマイズ方法 |
| --- | --- |
| エイリアス無効化 | zstyle ':omz:*' aliases noで全体無効化 |
| ライブラリ単位無効化 | zstyle ':omz:lib:*' aliases noでlib無効化 |
| プラグイン単位無効化 | zstyle ':omz:plugins:git' aliases noで個別無効化 |
| 更新モード | prompt/auto/reminder/disabled/background-alpha |

## 保守性要件

### コード品質

| 要件 | 実装内容 |
| --- | --- |
| シンタックスチェック | CI/CDでzsh -nによる全ファイル構文検証 |
| コードスタイル | .editorconfig/.prettierrcによる統一 |
| ドキュメント | CONTRIBUTING.md/CODE_OF_CONDUCT.mdによるガイドライン |
| テストフレームワーク | lib/testsディレクトリによるテスト基盤 |

### 診断・デバッグ

| 機能 | 説明 |
| --- | --- |
| omz_diagnostic_dump | 環境情報の包括的な診断ダンプ生成 |
| 詳細レベル | -v/-Vオプションで詳細度調整（0-2） |
| コア再定義検出 | ビルトインコマンドの再定義チェック |
| Git状態取得 | リポジトリ状態・更新履歴の取得 |

### キャッシュ管理

| キャッシュ | 説明 |
| --- | --- |
| ZSH_CACHE_DIR | 補完キャッシュディレクトリ（デフォルト: $ZSH/cache） |
| zcompdump | 補完定義のコンパイル済みキャッシュ |
| zrecompile | zcompdumpの自動再コンパイル |
| ロックファイル | 同時コンパイル防止のmkdirベースロック |

## 運用・監視要件

### ログ管理

| 項目 | 設定 |
| --- | --- |
| コマンド履歴 | $HISTFILE（デフォルト: ~/.zsh_history） |
| タイムスタンプ記録 | extended_historyオプションで有効 |
| 重複排除 | hist_expire_dups_first/hist_ignore_dupsで最適化 |
| スペース開始コマンド除外 | hist_ignore_spaceで機密コマンド除外 |
| 履歴共有 | share_historyで複数セッション間同期 |

### 更新管理

| 項目 | 設定 |
| --- | --- |
| 更新状態ファイル | $ZSH_CACHE_DIR/.zsh-update |
| 更新ログ | $ZSH/log/配下 |
| バックグラウンド更新 | background-alphaモード（実験的） |
| 更新結果表示 | verbose設定: default/minimal/silent |

### 対応プラットフォーム

| OS | サポート状況 |
| --- | --- |
| Linux | 完全サポート |
| macOS | 完全サポート |
| FreeBSD | 完全サポート |
| Windows (WSL2) | 完全サポート |
| Android | サポート |

### 前提条件

| 要件 | バージョン |
| --- | --- |
| Zsh | 4.3.9以上（推奨: 5.0.8以上） |
| Git | 2.4.11以上（推奨） |
| curl/wget/fetch | いずれか1つ（更新機能用） |

## 備考

### 性能最適化のベストプラクティス

1. **非同期プロンプト**: `zstyle ':omz:alpha:lib:git' async-prompt`設定でGitプロンプトを非同期化
2. **プラグイン最小化**: 必要最小限のプラグインのみを有効化
3. **補完キャッシュ**: zcompdumpのコンパイル済みキャッシュを維持
4. **遅延読み込み**: 重いプラグインは必要時のみ読み込み

### 制限事項

1. **プラグインマネージャー互換性**: zpm/zinitとの一部機能（エイリアススキップ等）に互換性の問題あり
2. **関数エイリアス**: gccd/ggf/ggl等の関数として定義されたエイリアスはスキップ機能の対象外
3. **Instant Prompt**: Powerlevel9k/10kのinstant prompt機能使用時は更新表示がsilentモードに制限
