メインコンテンツへスキップ
レッスン 8 / 8推定時間: 45

総合プロジェクト演習

これまで学んだテキスト処理技術を統合して、実際の業務で使える総合的なテキスト処理システムを構築します

このレッスンの学習目標

  • 複合的なテキスト処理プロジェクトを完遂できる
  • 実際の業務課題を技術的に解決できる
  • 保守性と拡張性を考慮した設計ができる
  • パフォーマンスと品質を両立したソリューションを作成できる

プロジェクト1: ログ分析システム

大規模なWebアプリケーションのアクセスログを分析するシステムを構築します。

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

システム要件

  1. リアルタイム監視

    • 新しいログエントリの即座な解析
    • 異常パターンの自動検出
    • アラート通知機能
  2. 統計レポート生成

    • 時間別/日別のアクセス統計
    • IPアドレス別の分析
    • エラー率とパフォーマンス指標
  3. データ可視化

    • CSV/JSON形式での出力
    • ダッシュボード用データの準備
#!/bin/bash
# log_analyzer_system.sh

# 設定
CONFIG_FILE="analyzer.conf"
ALERT_THRESHOLD_ERROR_RATE=5  # 5%以上でアラート

# リアルタイム解析関数
realtime_analysis() {
    tail -f /var/log/access.log | while read line; do
        # 即座にパターン解析
        echo "$line" | awk '{
            if ($9 >= 400) error_count++
            total_count++
            if (total_count % 100 == 0) {
                error_rate = (error_count / total_count) * 100
                if (error_rate > THRESHOLD) {
                    print "ALERT: Error rate " error_rate "%" | "logger -t WebAlert"
                }
            }
        }' THRESHOLD=$ALERT_THRESHOLD_ERROR_RATE
    done
}

# 統計レポート生成
generate_report() {
    local log_file="$1"
    local date=$(date +%Y-%m-%d)
    
    awk '
    BEGIN {
        print "=== Web Access Analysis Report ==="
        print "Date: " date
        print ""
    }
    {
        # IPアドレス別統計
        ip_count[$1]++
        
        # ステータスコード別統計
        status_count[$9]++
        
        # 時間別統計
        time = substr($4, 2, 11)
        gsub(/:/, " ", time)
        split(time, t, " ")
        hour_count[t[4]]++
        
        # エラー統計
        if ($9 >= 400) errors++
        total++
        
        # バイト数統計
        if ($10 != "-") bytes += $10
    }
    END {
        # Top 10 IP addresses
        print "=== Top 10 IP Addresses ==="
        PROCINFO["sorted_in"] = "@val_num_desc"
        count = 0
        for (ip in ip_count) {
            if (++count > 10) break
            printf "%15s: %d requests\n", ip, ip_count[ip]
        }
        
        # Status code distribution
        print "\n=== Status Code Distribution ==="
        for (status in status_count) {
            printf "%3s: %d (%.1f%%)\n", status, status_count[status], (status_count[status]/total)*100
        }
        
        # Error rate
        print "\n=== Error Analysis ==="
        error_rate = (errors/total)*100
        printf "Total requests: %d\n", total
        printf "Errors: %d (%.2f%%)\n", errors, error_rate
        
        # Data transfer
        print "\n=== Data Transfer ==="
        printf "Total bytes: %.2f MB\n", bytes/1024/1024
        printf "Average per request: %.0f bytes\n", bytes/total
        
        # Hourly distribution
        print "\n=== Hourly Distribution ==="
        for (h = 0; h < 24; h++) {
            hour = sprintf("%02d", h)
            printf "%s:00: %d requests\n", hour, hour_count[hour] + 0
        }
    }
    ' date="$date" "$log_file"
}

echo "ログ分析システムを構築中..."

プロジェクト2: データクリーニングシステム

複数のソースから収集されたCSVデータを統一フォーマットに変換し、品質チェックを行うシステムです。

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

データクリーニング要件

  1. データ標準化

    • 電話番号の統一フォーマット
    • メールアドレスの検証
    • 都市名の正規化
  2. 品質チェック

    • 必須フィールドの確認
    • データ型の検証
    • 異常値の検出
  3. エラーレポート

    • 問題箇所の詳細報告
    • 修正提案の生成
#!/bin/bash
# data_cleaning_system.sh

# データ品質チェックと修正
awk -F, '
BEGIN {
    OFS = ","
    print "=== Data Cleaning Report ==="
    error_count = 0
    
    # 都市名の正規化マップ
    city_map["tokyo"] = "Tokyo"
    city_map["osaka"] = "Osaka" 
    city_map["kyoto"] = "Kyoto"
    city_map["nagoya"] = "Nagoya"
}

NR == 1 {
    # ヘッダーをそのまま出力
    print > "cleaned_data.csv"
    next
}

{
    # 各フィールドのクリーニング
    name = $1
    age = $2
    email = $3
    phone = $4
    city = $5
    
    # 名前の検証
    if (name == "" || name ~ /^[[:space:]]*$/) {
        print "ERROR line " NR ": Missing name"
        error_count++
        next
    }
    
    # 年齢の正規化
    if (age == "thirty") age = 30
    else if (age !~ /^[0-9]+$/) {
        print "ERROR line " NR ": Invalid age: " age
        error_count++
        next
    }
    
    # メールアドレスの検証
    if (email !~ /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/) {
        print "ERROR line " NR ": Invalid email: " email
        error_count++
        next
    }
    
    # 電話番号の正規化
    gsub(/[^0-9+]/, "", phone)  # 数字と+以外を削除
    if (phone ~ /^\+81/) {
        phone = "(" substr(phone, 4, 3) ") " substr(phone, 7, 4) "-" substr(phone, 11)
    }
    
    # 都市名の正規化
    city_lower = tolower(city)
    if (city_lower in city_map) {
        city = city_map[city_lower]
    }
    
    # クリーニング済みデータの出力
    print name, age, email, phone, city > "cleaned_data.csv"
}

END {
    print "Cleaning completed. Errors found: " error_count
    if (error_count == 0) {
        print "All data is clean!"
    }
}' messy_data.csv

プロジェクト3: マークダウンドキュメント生成システム

テキストファイルから自動的にマークダウンドキュメントを生成するシステムです。

機能要件

  1. 構造解析

    • 章立ての自動検出
    • 目次の生成
    • コードブロックの識別
  2. フォーマット変換

    • プレーンテキストからマークダウンへ
    • 表の自動生成
    • リンクの自動化
  3. 品質確保

    • 構文チェック
    • 一貫性の確認
#!/bin/bash
# markdown_generator.sh

generate_markdown() {
    local input_file="$1"
    local output_file="${input_file%.txt}.md"
    
    awk '
    BEGIN {
        in_code = 0
        chapter_count = 0
    }
    
    # 章タイトルの検出(全大文字の行)
    /^[A-Z][A-Z ]+$/ {
        chapter_count++
        print "\n## " $0 "\n"
        next
    }
    
    # コードブロックの検出
    /^    / || /^\t/ {
        if (!in_code) {
            print "```"
            in_code = 1
        }
        gsub(/^    /, "")
        gsub(/^\t/, "")
        print
        next
    }
    
    # コードブロック終了
    in_code && !/^    / && !/^\t/ && NF > 0 {
        print "```\n"
        in_code = 0
    }
    
    # 通常のテキスト処理
    !in_code {
        # URLの自動リンク化
        gsub(/https?:\/\/[^ ]+/, "[&](&)")
        
        # 強調の検出(*word*)
        gsub(/\*([^*]+)\*/, "**\\1**")
        
        print
    }
    
    END {
        if (in_code) print "```"
        print "\n---\n*Generated by markdown_generator.sh*"
    }
    ' "$input_file" > "$output_file"
    
    echo "Generated: $output_file"
}

最終課題: 統合テキスト処理プラットフォーム

すべての学習内容を統合した、企業レベルのテキスト処理プラットフォームを設計・実装してください。

システム要件

  1. マルチソース対応

    • ログファイル、CSV、JSON、XML
    • リアルタイムストリーム
    • バッチ処理
  2. 高度な分析機能

    • パターン認識
    • 異常検知
    • トレンド分析
  3. 自動化とスケジューリング

    • cron との連携
    • エラーリカバリー
    • 通知システム
  4. 品質保証

    • テストスイート
    • パフォーマンス監視
    • ログ監査

プラットフォーム設計のポイント:

  • モジュラー設計(各機能を独立したスクリプトに)
  • 設定ファイルによる柔軟な制御
  • エラーハンドリングの徹底
  • パフォーマンス監視の組み込み
  • ドキュメントの自動生成

コース完了

おめでとうございます!テキスト処理マスターコースを完了しました。

習得したスキル

  • 正規表現の完全理解
  • sed による高度なテキスト変換
  • awk による本格的プログラミング
  • ストリーム処理とパイプライン設計
  • 自動化システムの構築
  • 実践的な問題解決能力

さらなる発展

  1. 専門分野での応用

    • ログ解析の専門化
    • データサイエンスへの応用
    • DevOps での活用
  2. 他の言語との連携

    • Python/Perl との使い分け
    • データベースとの連携
    • Web API との統合
  3. パフォーマンス最適化

    • 大規模データ処理
    • 並列処理の活用
    • メモリ効率の改善

🎉 素晴らしい成果です!sed、awk、grep を自在に操り、複雑なテキスト処理も効率的に解決できるようになりました。学んだ技術を実際の業務で活用し、更なるスキル向上を目指してください!

さらに学習を続けるには

素晴らしい学習ペースです!次のレッスンに進むには、無料会員登録をお願いします。無料会員では各コース3レッスンまで学習できます。

無料で続きを学ぶ

各コース3レッスンまで学習可能

学習進捗の自動保存

コース修了証明書の発行