# Oh My Zsh

## 概要

Oh My Zshは、Zshシェルの設定を管理するためのオープンソースのコミュニティ主導フレームワークです。355以上のプラグインと143以上のテーマを提供し、ターミナル操作の効率化とカスタマイズを実現します。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| プラグイン管理 | 355以上の組み込みプラグインを提供。Git、Docker、AWS、Node.jsなど多様なツールに対応 |
| テーマ管理 | 143以上のテーマを同梱。プロンプトの外観をカスタマイズ可能 |
| 自動補完 | 高度なタブ補完機能を提供。コマンド履歴やファイルパスの補完を強化 |
| エイリアス管理 | 便利なエイリアスを多数提供。zstyleによる柔軟なエイリアスの有効/無効化が可能 |
| 自動更新 | 定期的な更新チェック機能を内蔵。更新頻度やモードをカスタマイズ可能 |
| カスタマイズ | customディレクトリによるユーザー独自の設定、プラグイン、テーマの追加をサポート |
| 非同期Git情報 | 非同期プロンプト機能によりGit情報の表示パフォーマンスを向上 |

## 技術スタック

### コア

- シェル: Zsh (v4.3.9以上、推奨v5.0.8以上)
- 言語: シェルスクリプト (Zsh/POSIX sh)
- VCS: Git (推奨v2.4.11以上)

### 主要ライブラリ

- lib/cli.zsh: `omz`コマンドによるOh My Zsh管理CLI
- lib/git.zsh: Gitリポジトリ情報の取得と表示
- lib/async_prompt.zsh: 非同期プロンプト機能
- lib/completion.zsh: Zsh補完システムの設定
- lib/key-bindings.zsh: キーバインディング設定
- lib/functions.zsh: ユーティリティ関数群

## ディレクトリ構成

```
ohmyzsh-master/
├── oh-my-zsh.sh          # メインエントリポイント
├── lib/                  # コアライブラリ (22ファイル)
│   ├── cli.zsh           # omzコマンド実装
│   ├── git.zsh           # Git統合機能
│   ├── async_prompt.zsh  # 非同期プロンプト
│   ├── completion.zsh    # 補完設定
│   ├── key-bindings.zsh  # キーバインド
│   └── ...
├── plugins/              # プラグインディレクトリ (355プラグイン)
│   ├── git/              # Git用エイリアス・関数
│   ├── docker/           # Docker用補完・エイリアス
│   ├── aws/              # AWS CLI用補完
│   └── ...
├── themes/               # テーマディレクトリ (143テーマ)
│   ├── robbyrussell.zsh-theme  # デフォルトテーマ
│   ├── agnoster.zsh-theme      # 人気テーマ
│   └── ...
├── custom/               # ユーザーカスタマイズ用
│   ├── plugins/          # カスタムプラグイン
│   ├── themes/           # カスタムテーマ
│   └── example.zsh       # 設定例
├── templates/            # 設定テンプレート
│   └── zshrc.zsh-template  # .zshrcテンプレート
├── tools/                # インストール・管理ツール
│   ├── install.sh        # インストールスクリプト
│   ├── upgrade.sh        # アップグレードスクリプト
│   ├── uninstall.sh      # アンインストールスクリプト
│   └── check_for_upgrade.sh  # 更新チェック
├── cache/                # キャッシュディレクトリ
├── log/                  # ログディレクトリ
├── CODE_OF_CONDUCT.md    # 行動規範
├── CONTRIBUTING.md       # コントリビューションガイド
├── LICENSE.txt           # MITライセンス
└── SECURITY.md           # セキュリティポリシー
```

## セットアップ

### 必要条件

- Zsh v4.3.9以上（推奨: v5.0.8以上）
- curl または wget
- Git v2.4.11以上（推奨）

### 対応OS

- Linux
- macOS
- Windows (WSL2)
- FreeBSD
- Android

### インストール手順

#### 自動インストール（推奨）

```sh
# curlを使用
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# wgetを使用
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```

#### 手動インストール

```sh
# 1. リポジトリをクローン
git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh

# 2. 既存の.zshrcをバックアップ
cp ~/.zshrc ~/.zshrc.orig

# 3. テンプレートから新しい.zshrcを作成
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

# 4. デフォルトシェルをzshに変更
chsh -s $(which zsh)
```

## 開発

### プラグインの有効化

`~/.zshrc`ファイル内でプラグインを設定します：

```sh
plugins=(
  git
  docker
  aws
  npm
)
```

### テーマの変更

`~/.zshrc`ファイル内でテーマを設定します：

```sh
ZSH_THEME="robbyrussell"  # デフォルト
# または
ZSH_THEME="agnoster"      # 人気テーマ
```

### カスタムプラグイン・テーマの作成

- カスタムプラグイン: `$ZSH_CUSTOM/plugins/`に`{plugin_name}.plugin.zsh`を作成
- カスタムテーマ: `$ZSH_CUSTOM/themes/`に`{theme_name}.zsh-theme`を作成

### 更新

```sh
# 手動更新
omz update

# または直接スクリプトを実行
$ZSH/tools/upgrade.sh
```

### アンインストール

```sh
uninstall_oh_my_zsh
```

### 設定オプション

```sh
# エイリアスをスキップ
zstyle ':omz:plugins:git' aliases no

# 自動更新の設定
zstyle ':omz:update' mode auto      # 自動更新
zstyle ':omz:update' frequency 7    # 7日ごとにチェック

# 非同期Gitプロンプトの無効化
zstyle ':omz:alpha:lib:git' async-prompt no
```
