シェルスクリプトで脱・手作業!面倒な繰り返しタスク自動化入門
【実戦編】シェルスクリプトで「面倒な繰り返し作業」をゼロにする方法 皆さん、日々の開発や運用タスクの中で、「同じことを何回も手動で行っている…」という経験はありませんか?例えば、「このディレクトリ内に似た名前のファイルを大量にコピーし、それぞれに目印となる日付を付与する」「複数のログファイルから特定のパターンだけを抽出して集計する」といった作業です。 このような繰り返しのタスクこそ、シェルスクリプトの真骨頂が活きる領域です。単なる「Hello World」的な入門コードではなく、実際に手を動かして環境に組み込める実用的な自動化を実現するための視点をご紹介します。 課題提起:なぜ手作業は非効率なのか? もしあなたがWebサービスのログファイルを数時間かけて分析しなければならないとしましょう。そのログファイルが100個も存在し、それぞれから「HTTPステータスコードが4xx帯のもの」だけを抜き出して、「どのIPアドレスから何回発生したか」を知りたいとします。 手作業でこれを行うのは至難の業です。どこかでミスを誘発しやすく、時間もかかるばかりです。 実践テーマ:ログ集計のためのパイプライン構築 このような複数のファイルにわたるデータを処理する最適な方法は、シェルが持つ「パイプ ( | )」とループ構造を活用することです。単なる一連のコマンドではなく、「プロセスを連続的に流し込む」仕組みを構築します。 必要なツール ls : ファイル一覧を取得する grep : パターンマッチング(フィルタリング)を行う awk : カラム単位でのデータ処理や集計を行う 実例:指定ディレクトリ内の全ログから特定のIPアドレスと回数をカウントするスクリプト 以下のコードは、現在のディレクトリにあるすべての access.log ファイルに対して実行されることを想定した概念的なサンプルです。 #!/bin/bash # 変数定義(処理対象のディレクトリ) LOG_DIR="/var/log/api" OUTPUT_FILE="ip_count_report.txt" echo "--- ログ集計を開始します ---" > "$OUTPUT_FILE...