# 通知設計書 11-アップデート完了メッセージ（更新成功）

## 概要

本ドキュメントは、Oh My Zshのアップデート処理において、更新が成功した際にユーザーに表示される完了メッセージの設計を記載する。

### 本通知の処理概要

この通知は、Oh My Zshの更新処理が正常に完了し、新しいバージョンに更新された場合にユーザーに成功メッセージを表示する機能である。

**業務上の目的・背景**：Oh My Zshは定期的に新機能やバグ修正が行われるOSSプロジェクトであり、ユーザーが最新版に更新することでセキュリティや機能面での恩恵を受けられる。更新成功時に明確なフィードバックを提供することで、ユーザーは更新が正常に完了したことを確認でき、安心して作業を継続できる。

**通知の送信タイミング**：`omz update`コマンドの実行後、git pullによるコード取得が成功し、かつローカルのHEADコミットが更新前と異なる場合（実際に新しいコミットが適用された場合）に送信される。

**通知の受信者**：ターミナル上でOh My Zshを使用しているユーザー。更新コマンドを実行した本人に直接表示される。

**通知内容の概要**：「Hooray! Oh My Zsh has been updated!」というメッセージがOh My Zshのロゴ（レインボーカラーのASCIIアート）とともに表示される。また、changelogの確認方法やSNSアカウント、Discordサーバー、グッズショップへのリンクも併せて表示される。

**期待されるアクション**：ユーザーは更新が成功したことを確認し、`omz changelog`コマンドで変更内容を確認するか、そのまま作業を継続する。

## 通知種別

ターミナル標準出力（STDOUT）への直接表示

## 送信仕様

### 基本情報

| 項目 | 内容 |
|-----|------|
| 送信方式 | 同期（コマンド実行時に即座に表示） |
| 優先度 | 高（更新完了の確認は重要） |
| リトライ | なし（ターミナル出力のため） |

### 送信先決定ロジック

更新コマンドを実行したターミナルセッションに直接出力する。受信者の選定ロジックは不要。

## 通知テンプレート

### ターミナル出力の場合

| 項目 | 内容 |
|-----|------|
| 送信元 | upgrade.sh |
| 表示色 | BLUE（メッセージ本文）、RAINBOW（ロゴ） |
| 形式 | プレーンテキスト + ANSIエスケープシーケンス |

### 本文テンプレート

#### defaultモード

```
         __                                     __
  ____  / /_     ____ ___  __  __   ____  _____/ /_
 / __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \
/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / /
\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/
                        /____/

Hooray! Oh My Zsh has been updated!

You can see the changelog with `omz changelog`
To keep up with the latest news and updates, follow us on X: @ohmyzsh
Want to get involved in the community? Join our Discord: Discord server
Get your Oh My Zsh swag at: CommitGoods Shop
```

#### minimalモード

```
Hooray! Oh My Zsh has been updated!
```

#### silentモード

出力なし

### 添付ファイル

| ファイル名 | 形式 | 条件 | 説明 |
|----------|------|------|------|
| なし | - | - | ターミナル出力のため添付ファイルなし |

## テンプレート変数

| 変数名 | 説明 | データ取得元 | 必須 |
|--------|------|-------------|-----|
| message | 更新結果メッセージ | upgrade.sh内で設定 | Yes |
| RAINBOW | レインボーカラー配列 | ANSIエスケープシーケンス | No（defaultモードのみ） |
| BLUE | 青色エスケープシーケンス | ANSIエスケープシーケンス | Yes |
| RESET | リセットエスケープシーケンス | ANSIエスケープシーケンス | Yes |

## 送信トリガー・条件

### トリガー一覧

| トリガー種別 | トリガーイベント | 送信条件 | 説明 |
|------------|----------------|---------|------|
| コマンド実行 | `omz update`コマンド実行 | git pull成功かつHEAD変更あり | ユーザーが手動で更新を実行 |
| 自動更新 | 自動更新モード（auto）での更新 | 同上 | 設定された頻度で自動実行 |
| プロンプト応答 | 更新プロンプトでY/y/Enter入力 | 同上 | 更新確認で同意した場合 |

### 送信抑止条件

| 条件 | 説明 |
|-----|------|
| verbose_mode=silent | サイレントモードでは表示しない |
| HEADが変更されていない | 既に最新版の場合は別メッセージを表示 |
| git pull失敗 | エラーメッセージを代わりに表示 |

## 処理フロー

### 送信フロー

```mermaid
flowchart TD
    A[omz update実行] --> B[git pull --rebase実行]
    B -->|成功| C{HEAD変更あり?}
    B -->|失敗| D[エラーメッセージ表示]
    C -->|Yes| E[message変数に成功メッセージ設定]
    C -->|No| F[最新版メッセージ設定]
    E --> G{verbose_mode?}
    F --> G
    G -->|default| H[ロゴ+メッセージ+リンク表示]
    G -->|minimal| I[メッセージのみ表示]
    G -->|silent| J[表示なし]
    H --> K[終了]
    I --> K
    J --> K
    D --> K
```

## データベース参照・更新仕様

### 参照テーブル一覧

| テーブル名 | 用途 | 備考 |
|-----------|------|------|
| なし | - | データベースは使用しない |

### 更新テーブル一覧

| テーブル名 | 操作 | 概要 |
|-----------|------|------|
| なし | - | データベースは使用しない |

### ファイル更新

| ファイル | 操作 | 概要 |
|---------|------|------|
| .zsh-update | UPDATE | LAST_EPOCHを現在日時に更新 |
| oh-my-zsh.lastVersion | UPDATE | 更新前のコミットハッシュを保存 |

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 対処方法 |
|----------|---------|---------|
| git pull失敗 | ネットワークエラー、マージコンフリクト等 | エラーメッセージを表示し、終了コード非0で終了 |
| ターミナル非対応 | tty接続なし | 色なしでメッセージ出力 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし |
| リトライ間隔 | - |
| リトライ対象エラー | - |

## 配信設定

### レート制限

| 項目 | 内容 |
|-----|------|
| 制限なし | ターミナル出力のため制限不要 |

### 配信時間帯

制限なし（ユーザーがコマンドを実行したタイミングで即座に表示）

## セキュリティ考慮事項

- メッセージには機密情報は含まれない
- ANSIエスケープシーケンスによる表示制御のみ
- 外部サービスへのリンクはハイパーリンク対応ターミナルでのみ有効

## 備考

- verbose_modeは`zstyle ':omz:update' verbose`で設定可能
- defaultモードではレインボーカラー（7色）でOh My Zshのロゴを表示
- truecolor対応ターミナルでは24bitカラー、それ以外は256色を使用

---

## コードリーディングガイド

本通知を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

まず、表示に使用される変数とカラーコードの定義を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | upgrade.sh | `tools/upgrade.sh` | RAINBOW配列、色変数（RED, GREEN, BLUE等）の定義（160-192行目） |

**読解のコツ**: ANSIエスケープシーケンス（`\033[38;2;R;G;Bm`）でtruecolor、`\033[38;5;Nm`で256色を設定している。

#### Step 2: エントリーポイントを理解する

処理の起点となるファイル・関数を特定する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | upgrade.sh | `tools/upgrade.sh` | メイン処理フロー（245-283行目） |

**主要処理フロー**:
1. **245行目**: `git pull --quiet --rebase`で更新を取得
2. **247行目**: HEADコミットの比較で実際に更新があったか確認
3. **250行目**: 更新ありの場合、message変数に「Hooray! Oh My Zsh has been updated!」を設定
4. **265-279行目**: verbose_modeに応じてメッセージを出力

#### Step 3: 出力処理を理解する

verbose_modeごとの出力分岐を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | upgrade.sh | `tools/upgrade.sh` | defaultモードの出力（266-276行目） |
| 3-2 | upgrade.sh | `tools/upgrade.sh` | minimalモードの出力（277-278行目） |

**主要処理フロー**:
- **266-271行目**: レインボーカラーでASCIIアートを出力
- **273行目**: BLUEカラーでメッセージを出力
- **274-276行目**: SNS、Discord、ショップのリンクを出力

### プログラム呼び出し階層図

```
omz update (cli.zsh)
    │
    └─ tools/upgrade.sh
           │
           ├─ git pull --rebase (245行目)
           │
           ├─ git rev-parse HEAD (247行目)
           │      └─ コミット比較で更新有無を判定
           │
           ├─ message変数設定 (250行目)
           │
           └─ printf出力 (265-279行目)
                  ├─ [default] ロゴ + メッセージ + リンク
                  ├─ [minimal] メッセージのみ
                  └─ [silent] 出力なし
```

### データフロー図

```
[入力]               [処理]                    [出力]

git pull結果 ───▶ HEADコミット比較 ───▶ message変数設定
                       │
                       ▼
verbose_mode ────▶ 出力分岐処理 ─────▶ ターミナル標準出力
                       │                    │
                       │                    ├─ [default] RAINBOW + BLUE text
                       │                    ├─ [minimal] BLUE text
                       │                    └─ [silent] なし
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| upgrade.sh | `tools/upgrade.sh` | ソース | アップデート処理のメイン実装 |
| check_for_upgrade.sh | `tools/check_for_upgrade.sh` | ソース | 自動更新チェックと更新呼び出し |
| cli.zsh | `lib/cli.zsh` | ソース | omzコマンドのCLIインターフェース |
