Skip to content

[Phase 5] UX改善:ロゴ・カラー出力・エラーハンドリング #33

@yellow-seed

Description

@yellow-seed

Parent Issue: #28
Depends on: Phase 4 issue

目的

セットアップスクリプトのユーザー体験を向上させ、よりフレンドリーで分かりやすいものにする。

実装内容

1. ロゴ/バナーの表示

  • ASCII アートのロゴ作成
    declare -r DOTFILES_LOGO='
         _       _    __ _ _           
     __| | ___ | |_ / _(_) | ___  ___ 
    / _` |/ _ \| __| |_| | |/ _ \/ __|

| (| | () | || | | | _/_
_
,
|_/ _|| |||_||___/
'

- [ ] `main()` 関数の開始時に表示

### 2. カラー出力
- [ ] カラーコードの定義
```bash
declare -r COLOR_RESET='\033[0m'
declare -r COLOR_RED='\033[0;31m'
declare -r COLOR_GREEN='\033[0;32m'
declare -r COLOR_YELLOW='\033[0;33m'
declare -r COLOR_BLUE='\033[0;34m'
declare -r COLOR_CYAN='\033[0;36m'
  • ログ出力関数の作成
    function log_info() {
        echo -e "${COLOR_BLUE}${COLOR_RESET} $*"
    }
    
    function log_success() {
        echo -e "${COLOR_GREEN}${COLOR_RESET} $*"
    }
    
    function log_warning() {
        echo -e "${COLOR_YELLOW}${COLOR_RESET} $*"
    }
    
    function log_error() {
        echo -e "${COLOR_RED}${COLOR_RESET} $*" >&2
    }
  • 既存の echo をカラー出力関数に置き換え

3. プログレス表示

  • 各処理ステップの進捗表示
    log_info "Detecting OS..."
    log_success "OS detected: macOS (arm64)"
    
    log_info "Installing Homebrew..."
    log_success "Homebrew installed"
    
    log_info "Setting up chezmoi..."
    log_success "Dotfiles applied"
  • スピナーアニメーション(オプション)

4. エラーハンドリングと後処理

  • at_exit() 関数の実装
    AT_EXIT=""
    
    function at_exit() {
        AT_EXIT+="${AT_EXIT:+$'\n'}"
        AT_EXIT+="${*?}"
        trap "${AT_EXIT}" EXIT
    }
  • 一時ファイルの自動削除
  • エラー時のクリーンアップ処理
  • トラップハンドラの設定

5. より詳細なエラーメッセージ

  • エラー発生箇所の明確化
  • 解決方法のヒント表示
  • ログファイルへの出力(オプション)

6. シェルの再起動

  • restart_shell_system() 関数の実装
    function restart_shell_system() {
        log_success "Setup completed!"
        log_info "Restarting shell..."
        
        # chezmoi からシステム情報を取得
        local system
        system=$(chezmoi data | jq -r '.chezmoi.os')
        
        # ログインシェルとして再起動
        exec "${SHELL}" -l
    }
  • セットアップ完了後の自動再起動(オプション)

7. 対話的な確認(オプション)

  • TTY環境での確認プロンプト
    function confirm() {
        if is_ci_or_not_tty; then
            return 0
        fi
        
        read -p "$* (y/N): " -n 1 -r
        echo
        [[ $REPLY =~ ^[Yy]$ ]]
    }

実装後のイメージ

     _       _    __ _ _           
   __| | ___ | |_ / _(_) | ___  ___ 
  / _` |/ _ \| __| |_| | |/ _ \/ __|
 | (_| | (_) | |_|  _| | |  __/\__ \
  \__,_|\___/ \__|_| |_|_|\___||___/

ℹ Setting up dotfiles from https://github.com/yellow-seed/dotfiles.git
ℹ Detecting OS...
✓ OS detected: macOS (arm64)
ℹ Installing Homebrew...
✓ Homebrew installed successfully
ℹ Installing packages from Brewfile...
✓ Packages installed
ℹ Setting up chezmoi...
✓ Dotfiles applied
✓ Setup completed!
ℹ Restarting shell...

テスト

  • TTY環境でのカラー表示確認
  • 非TTY環境でのカラーコード非表示確認
  • エラー時のクリーンアップ処理確認
  • at_exit() トラップの動作確認
  • ログ出力関数の動作確認

完了条件

  • すべてのチェックボックスが完了
  • カラー出力が正しく表示される
  • エラーハンドリングが適切に機能
  • ユーザー体験が向上している
  • テストが通過
  • PRがマージされている

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions