Bashログ出力
Bashスクリプトのための構造化ログパターン。カラーサポート、絵文字アイコン、CI/CD統合を備えています。
基本的なログ関数
シンプルでポータブルなログ実装:
# 色の定義
declare -A colors=(
[green]=$'\033[0;32m'
[red]=$'\033[0;31m'
[yellow]=$'\033[1;33m'
[blue]=$'\033[0;34m'
[reset]=$'\033[0m'
)
declare -A emojis=(
[success]='✅'
[error]='❌'
[warning]='⚠️'
[info]='ℹ️'
[debug]='🐛'
)
# ログ関数
print_success() {
printf '%b %b%b%b\n' "${emojis[success]}" "${colors[green]}" "$*" "${colors[reset]}"
}
print_error() {
printf '%b %b%b%b\n' "${emojis[error]}" "${colors[red]}" "$*" "${colors[reset]}" >&2
}
print_warning() {
printf '%b %b%b%b\n' "${emojis[warning]}" "${colors[yellow]}" "$*" "${colors[reset]}"
}
print_info() {
printf '%b %b\n' "${emojis[info]}" "$*"
}
print_debug() {
[[ -n "${DEBUG:-}" ]] && printf '%b %b%b%b\n' "${emojis[debug]}" "${colors[blue]}" "$*" "${colors[reset]}"
}
ログレベル
設定可能なログレベルを実装します。
TTY検出
非対話型環境では色を無効にします:
setup_colors() {
if [[ -t 1 ]] && [[ -z "${NO_COLOR:-}" ]]; then
# ターミナルはカラーをサポート
COLOR_RED=$'\033[0;31m'
COLOR_GREEN=$'\033[0;32m'
COLOR_YELLOW=$'\033[1;33m'
COLOR_BLUE=$'\033[0;34m'
COLOR_RESET=$'\033[0m'
else
# カラー非サポート
COLOR_RED=''
COLOR_GREEN=''
COLOR_YELLOW=''
COLOR_BLUE=''
COLOR_RESET=''
fi
}
# CI環境は多くの場合カラーをサポート
detect_color_support() {
if [[ -n "${CI:-}" ]] || [[ -n "${GITLAB_CI:-}" ]] || [[ -n "${GITHUB_ACTIONS:-}" ]]; then
return 0 # CI環境、カラーを有効化
elif [[ -t 1 ]]; then
return 0 # ターミナル、カラーを有効化
else
return 1 # カラー非サポート
fi
}
GitLab CI 折りたたみセクション
GitLab CIで折りたたみ可能なログセクションを作成:
section_start() {
local section_key="\${1:-section}"
local section_header="\${2:-$section_key}"
local collapsed="\${3:-true}"
if [[ -n "${GITLAB_CI:-}" ]]; then
printf "\e[0Ksection_start:%s:%s[collapsed=%s]\r\e[0K%s\n" \
"$(date +%s)" "$section_key" "$collapsed" "$section_header"
else
printf '\n=== %s ===\n' "$section_header"
fi
}
section_end() {
local section_key="\${1:-section}"
if [[ -n "${GITLAB_CI:-}" ]]; then
printf "\e[0Ksection_end:%s:%s\r\e[0K" "$(date +%s)" "$section_key"
else
printf '\n'
fi
}
# 使用例
section_start "build" "アプリケーションのビルド"
make build
section_end "build"
GitHub Actions グループ化
進行状況インジケーター
構造化ステップログ
Shlocksmith ログライブラリ
完全なCI統合を備えた包括的なログ出力には、shlocksmithログライブラリを使用します。
特徴
- 20以上のログレベル関数(log_info、log_error、log_warningなど)
- ステップベースのログ(log_step_start、log_step_pass、log_step_fail)
- TTY検出によるカラーと絵文字サポート
- GitLab CIセクション管理
- TUI用のボックス描画文字
- キーと値のペア書式
利用可能な関数
# 基本ログ
log_info "情報メッセージ"
log_warning "警告メッセージ"
log_error "エラーメッセージ"
log_debug "デバッグメッセージ" # DEBUGが設定されている場合のみ表示
log_notice "通知メッセージ"
log_fatal "致命的エラー" # スクリプトを終了
# ステップベースのログ
log_start "プロセス名"
log_step_start "ステップ説明"
log_step_pass "成功メッセージ"
log_step_fail "失敗メッセージ"
log_step_skip "スキップメッセージ"
log_step_done "完了メッセージ"
log_done "プロセス完了"
# 結果
log_pass "テスト合格"
log_fail "テスト不合格"
log_result "結果詳細"
log_success "成功メッセージ"
# CIセクション
section_start "section_id" "セクションタイトル"
section_end "section_id"
使用例
#!/usr/bin/env bash
source /path/to/log_functions.sh
log_start "デプロイメントプロセス"
section_start "deps" "依存関係のインストール"
log_step_start "パッケージをインストール中"
if apt-get install -y package; then
log_step_pass "パッケージがインストールされました"
else
log_step_fail "パッケージのインストールに失敗しました"
fi
section_end "deps"
log_done "デプロイメント完了"
追加リソース
スクリプト
- log_functions.sh - 完全なshlocksmithログライブラリ
色参照表
| コード | 色 |
|---|---|
\033[0;30m | 黒 |
\033[0;31m | 赤 |
\033[0;32m | 緑 |
\033[0;33m | 黄 |
\033[0;34m | 青 |
\033[0;35m | マゼンタ |
\033[0;36m | シアン |
\033[0;37m | 白 |
\033[1;XXm | 太字バリアント |
\033[0m | リセット |