シェルスクリプト入門：一般ユーザーも使える便利なスクリプト


## はじめに

シェルスクリプトと聞くと、サーバー管理者が使うものというイメージがあるかもしれません。
なのでサーバー管理などをしないと身につかないと思っているかもしれません。
しかし、一般ユーザーでも日常的なタスクを自動化したり効率化したりするのに便利なツールです。
今回は日常レベルで使えそうなスクリプトを紹介します。

動作はMacBookProM1・OS14.5で行っています。



## 1. ファイル整理と圧縮スクリプト

Downloadsフォルダなど、ファイルが溜まりがちなディレクトリを自動で整理するスクリプトです。

```bash
#!/bin/bash

# 整理対象のディレクトリ
TARGET_DIR="$HOME/Downloads"

# 30日以上前のファイルを圧縮
find $TARGET_DIR -type f -mtime +30 -print0 | xargs -0 tar -czvf $TARGET_DIR/old_files_$(date +%Y%m%d).tar.gz

# ファイルタイプごとにディレクトリに移動
for file in $TARGET_DIR/*; do
    if [ -f "$file" ]; then
        ext="${file##*.}"
        mkdir -p "$TARGET_DIR/$ext"
        mv "$file" "$TARGET_DIR/$ext/"
    fi
done

echo "ファイル整理が完了しました。"
```

このスクリプトは以下の処理を行います：

1. 30日以上前のファイルを圧縮
2. ファイルタイプ（拡張子）ごとにサブディレクトリを作成し、ファイルを移動

## 2. 生産性向上ツール

ポモドーロテクニックを実装したタイマーと、簡単なタスク管理機能を提供するスクリプトです。

```bash
#!/bin/bash

# ポモドーロタイマー
pomodoro() {
    work_time=1500 # 25分
    break_time=300 # 5分

    echo "ポモドーロタイマー開始"
    sleep $work_time
    notify-send "休憩時間です" "5分間休憩してください"
    sleep $break_time
    notify-send "作業再開" "次のポモドーロを始めましょう"
}

# タスクリスト管理
task_list="$HOME/.tasks"

add_task() {
    echo "$1" >> $task_list
    echo "タスクを追加しました: $1"
}

list_tasks() {
    cat -n $task_list
}

complete_task() {
    sed -i "${1}d" $task_list
    echo "タスク $1 を完了としてマークしました"
}

# メイン処理
case "$1" in
    "pomodoro")
        pomodoro
        ;;
    "add")
        add_task "$2"
        ;;
    "list")
        list_tasks
        ;;
    "complete")
        complete_task "$2"
        ;;
    *)
        echo "使用法: $0 {pomodoro|add|list|complete}"
        ;;
esac
```

このスクリプトは以下の機能を提供します：

* `pomodoro`: 25分の作業と5分の休憩を交互に行うポモドーロタイマー
* `add`: タスクの追加
* `list`: タスク一覧の表示
* `complete`: タスクの完了

## 3. システム情報収集スクリプト

システムの状態をチェックし、レポートを生成するスクリプトです。

```bash
#!/bin/bash

# レポートファイルのパス
REPORT_FILE="$HOME/system_report.txt"

# システム情報を収集
echo "システム情報を収集しています..." > "$REPORT_FILE"
echo "------------------------" >> "$REPORT_FILE"
echo "システムの概要:" >> "$REPORT_FILE"
system_profiler SPHardwareDataType >> "$REPORT_FILE"
echo "------------------------" >> "$REPORT_FILE"
echo "ディスクの使用状況:" >> "$REPORT_FILE"
df -h >> "$REPORT_FILE"
echo "------------------------" >> "$REPORT_FILE"
echo "メモリの使用状況:" >> "$REPORT_FILE"
vm_stat >> "$REPORT_FILE"
echo "------------------------" >> "$REPORT_FILE"
echo "ネットワークの設定:" >> "$REPORT_FILE"
ifconfig >> "$REPORT_FILE"
echo "------------------------" >> "$REPORT_FILE"

# レポート生成の完了メッセージを表示
echo "システムレポートが生成されました: $REPORT_FILE"
```

このスクリプトは、システムの概要、ディスク使用状況、メモリ使用状況、ネットワーク設定などの情報を収集し、1つのレポートファイルにまとめます。

## 4. ウェブスクレイピングスクリプト

特定のウェブページから定期的にデータを取得して保存するスクリプトです。

```bash
#!/bin/bash

# スクレイピングするURL
URL="https://example.com"

# 保存先のディレクトリ
SAVE_DIR="$HOME/WebScraping"

# ディレクトリが存在しない場合は作成
mkdir -p "$SAVE_DIR"

# スクレイピングを実行
while true; do
    TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
    curl -s "$URL" -o "$SAVE_DIR/page_$TIMESTAMP.html"
    echo "ページを保存しました: page_$TIMESTAMP.html"
    sleep 3600 # 1時間ごとに実行
done
```

このスクリプトは、指定したURLのウェブページを1時間ごとに取得し、タイムスタンプ付きのファイル名で保存します。

## まとめ

これらのスクリプトは、一般ユーザーでも日常的に使える便利なツールです。ファイル整理、生産性管理、システム情報の収集、ウェブスクレイピングなど、様々なタスクを自動化できます。

シェルスクリプトの基本を学び、これらのスクリプトをカスタマイズして使うことで、コンピューターの使用をより効率的にすることができます。

スクリプトを使う際は、必ず内容を理解・確認し、自己責任で実行してください。
また、定期的に実行する場合は、crontabなどのタスクスケジューラーを使うと便利です。