# 画面設計書 16-omz shop

## 概要

本ドキュメントは、Oh My Zshのグッズショップをブラウザで開くCLIコマンド `omz shop` の画面設計書です。

### 本画面の処理概要

`omz shop` コマンドは、Oh My Zshの公式グッズショップ（CommitGoods）をデフォルトブラウザで開くためのコマンドインターフェースです。

**業務上の目的・背景**：Oh My Zshはオープンソースプロジェクトであり、グッズの販売はプロジェクトの維持・運営を支援する手段の一つです。本コマンドは、ユーザーがワンコマンドでショップにアクセスできるようにすることで、プロジェクトへのサポートを促進します。コマンドラインから直接ショップにアクセスできることで、開発者にとって自然なワークフローの中でプロジェクトを支援する機会を提供します。

**画面へのアクセス方法**：ターミナルで `omz shop` を実行することでアクセスします。

**主要な操作・処理内容**：
1. ショップURLを設定
2. 情報メッセージを表示
3. open_commandでブラウザを起動
4. ショップページをデフォルトブラウザで開く

**画面遷移**：
- 遷移元: omzコマンドのサブコマンドとして呼び出し
- 遷移先: デフォルトブラウザでCommitGoodsショップページを開く

**権限による表示制御**：特になし。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 6 | omzコマンド | 主機能 | omzコマンドの統合CLIインターフェースを通じてショップを開く |
| 21 | omz shop | 主機能 | Oh My Zshグッズショップをブラウザで開く |
| 47 | open_command | 補助機能 | クロスプラットフォーム対応のopen/xdg-openラッパーを使用してブラウザを起動 |

## 画面種別

コマンドラインインターフェース（ブラウザ起動）

## URL/ルーティング

```
omz shop
```

引数は不要です。

### 開くURL

```
https://commitgoods.com/collections/oh-my-zsh
```

## 入出力項目

### 入力項目

なし

### 出力項目

| 項目名 | 型 | 説明 |
|--------|-----|------|
| 情報メッセージ | テキスト | ショップを開く旨のメッセージ |
| URL | テキスト | ショップのURL |

## 表示項目

| 表示項目 | 表示条件 | 説明 |
|----------|----------|------|
| 開始メッセージ | 常時 | "Opening Oh My Zsh shop in your browser..." |
| URL表示 | 常時 | ショップURL |

## イベント仕様

### 1-メッセージ表示

ショップを開くことを通知するメッセージを表示します。

- _omz::logを使用して情報メッセージを出力
- 緑色のテキストで表示（info レベル）

### 2-ブラウザ起動

open_commandを使用してデフォルトブラウザでショップを開きます。

- open_commandはクロスプラットフォーム対応のユーティリティ関数
- macOS: `open` コマンド
- Linux: `xdg-open` または類似のコマンド
- Windows (WSL): 適切なWindowsコマンド

## データベース更新仕様

本コマンドはデータベースを使用しません。外部URLを開く操作のみを行います。

## メッセージ仕様

| 種別 | メッセージ | 表示条件 |
|------|----------|----------|
| 情報 | "Opening Oh My Zsh shop in your browser..." | 常時 |
| 情報 | "https://commitgoods.com/collections/oh-my-zsh" | 常時 |

## 例外処理

| 例外状態 | 処理内容 |
|----------|----------|
| ブラウザがない | open_commandがエラーを返す可能性 |
| open_command失敗 | システム依存のエラーメッセージ |

## 備考

- CommitGoodsはOh My Zshの公式グッズ販売パートナーです
- open_commandはlib/functions.zshで定義されています
- 本コマンドはネットワーク接続を必要とします（ブラウザでのページ読み込み）

---

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

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

### 推奨読解順序

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

まず、ショップ機能で使用される定数を理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | cli.zsh | `lib/cli.zsh` | shop_url変数の値 |

**読解のコツ**: シンプルな関数なので、コードの流れを追うのは容易です。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | cli.zsh | `lib/cli.zsh` | omz関数（3-21行目）がエントリーポイント |

**主要処理フロー**:
1. **行3-8**: コマンドライン引数の確認
2. **行15-18**: サブコマンド関数の存在確認
3. **行20**: _omz::shopを呼び出し

#### Step 3: shopコマンドの実装を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | cli.zsh | `lib/cli.zsh` | `_omz::shop`関数（726-733行目）がメインの実装 |

**主要処理フロー**:
- **行727**: shop_url変数にURLを設定
- **行729-730**: _omz::logで情報メッセージを表示
- **行732**: open_commandでブラウザを起動

#### Step 4: open_commandユーティリティを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | functions.zsh | `lib/functions.zsh` | open_command関数の実装（クロスプラットフォーム対応） |

**読解のポイント**:
- macOSでは `open` コマンドを使用
- Linuxでは `xdg-open` や類似コマンドを検出
- WSLではWindows側のブラウザを起動

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

```
omz shop
    │
    ├─ omz [lib/cli.zsh:3-21]
    │      └─ _omz::shop [lib/cli.zsh:726-733]
    │             │
    │             ├─ _omz::log [lib/cli.zsh:137-162]
    │             │      └─ print -P (色付きメッセージ)
    │             │
    │             └─ open_command [lib/functions.zsh]
    │                    └─ open / xdg-open / etc.
    │                           └─ デフォルトブラウザ
    │
    └─ _omz [lib/cli.zsh:23-112] (補完関数)
```

### データフロー図

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

(なし) ─────────▶ shop_url設定
                        │
                        ▼
                  _omz::log ───────────────────────▶ 情報メッセージ表示
                        │
                        ▼
                  open_command ────────────────────▶ ブラウザ起動
                        │
                        ▼
                  デフォルトブラウザ ──────────────▶ ショップページ表示
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| cli.zsh | `lib/cli.zsh` | ソース | omz shopコマンドの実装 |
| functions.zsh | `lib/functions.zsh` | ソース | open_command関数の実装 |
| oh-my-zsh.sh | `oh-my-zsh.sh` | ソース | functions.zshのsource |
