PR表記: 当記事にはアフィリエイトリンクが含まれます。商品の購入は自己判断でお願いします。

「Pythonで自動化したいけど、何から始めればいいかわからない」という方向けに、すぐに使える実践的なコード例を紹介します。ファイル整理、Excel操作、Web情報取得など、日常業務でよくあるタスクを取り上げます。

前提: Python環境の準備

Python 3.9以上が必要です。macOSの場合は以下でインストールできます。

# Homebrewでインストール
brew install python

# バージョン確認
python3 --version

Windowsの場合はpython.orgからインストーラーをダウンロードしてください。

1. ファイルの自動整理

ダウンロードフォルダの中身を拡張子ごとに分類するスクリプトです。

from pathlib import Path
import shutil

def organize_downloads():
    """ダウンロードフォルダを拡張子別に整理する"""
    downloads = Path.home() / "Downloads"

    # 拡張子とフォルダ名の対応
    categories = {
        "images": [".jpg", ".jpeg", ".png", ".gif", ".webp"],
        "documents": [".pdf", ".doc", ".docx", ".txt", ".csv"],
        "videos": [".mp4", ".mov", ".avi", ".mkv"],
        "archives": [".zip", ".tar", ".gz", ".rar"],
    }

    moved_count = 0
    for file in downloads.iterdir():
        if not file.is_file():
            continue

        suffix = file.suffix.lower()
        for folder_name, extensions in categories.items():
            if suffix in extensions:
                dest_dir = downloads / folder_name
                dest_dir.mkdir(exist_ok=True)
                shutil.move(str(file), str(dest_dir / file.name))
                moved_count += 1
                print(f"移動: {file.name} -> {folder_name}/")
                break

    print(f"\n完了: {moved_count}件のファイルを整理しました")

if __name__ == "__main__":
    organize_downloads()

2. Excelファイルの自動処理

openpyxlを使ったExcelファイルの読み書きです。

pip install openpyxl
from openpyxl import load_workbook
from pathlib import Path

def summarize_excel(filepath: str):
    """Excelファイルの各シートの行数を集計する"""
    wb = load_workbook(filepath, read_only=True)

    for sheet_name in wb.sheetnames:
        ws = wb[sheet_name]
        row_count = ws.max_row
        col_count = ws.max_column
        print(f"シート: {sheet_name} -> {row_count}行 x {col_count}列")

    wb.close()

# 使い方
summarize_excel("report.xlsx")

CSVからExcelへの変換

import csv
from openpyxl import Workbook

def csv_to_excel(csv_path: str, excel_path: str):
    """CSVファイルをExcelに変換する"""
    wb = Workbook()
    ws = wb.active

    with open(csv_path, "r", encoding="utf-8") as f:
        reader = csv.reader(f)
        for row in reader:
            ws.append(row)

    wb.save(excel_path)
    print(f"変換完了: {csv_path} -> {excel_path}")

csv_to_excel("data.csv", "data.xlsx")

3. Webページの情報取得

requestsとBeautifulSoupを使った基本的なスクレイピングです。

pip install requests beautifulsoup4
import requests
from bs4 import BeautifulSoup

def get_page_title(url: str) -> str:
    """指定URLのページタイトルを取得する"""
    response = requests.get(url, timeout=10)
    response.raise_for_status()

    soup = BeautifulSoup(response.text, "html.parser")
    title = soup.find("title")

    return title.text.strip() if title else "タイトルなし"

# 使い方
title = get_page_title("https://example.com")
print(f"タイトル: {title}")

注意: Webスクレイピングを行う際は、対象サイトの利用規約とrobots.txtを必ず確認してください。過度なリクエストはサーバーに負荷をかけるため、適切な間隔(1秒以上)を空けましょう。

4. 定期実行との組み合わせ

作成したスクリプトを定期実行するには、macOSならlaunchd、LinuxならcronやSystemdが使えます。

# macOSでの例: 毎日9時にスクリプトを実行
# ~/Library/LaunchAgents/com.example.organize.plist を作成

launchdの詳しい設定方法はlaunchd完全ガイドを参照してください。

5. スクリプトのエラーハンドリング

自動化スクリプトはエラーが発生しても止まらないようにするのが大切です。

import traceback
from datetime import datetime

def run_with_logging(func, log_path: str = "/tmp/automation.log"):
    """関数を実行し、エラーがあればログに記録する"""
    try:
        func()
    except Exception as e:
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        error_msg = f"[{timestamp}] ERROR: {e}\n{traceback.format_exc()}\n"

        with open(log_path, "a") as f:
            f.write(error_msg)

        print(f"エラーが発生しました。ログ: {log_path}")

# 使い方
run_with_logging(organize_downloads)

まとめ

Pythonの標準ライブラリと少しの外部パッケージだけで、日常業務の多くを自動化できます。まずは小さなタスクから始めて、少しずつスクリプトを増やしていくのがおすすめです。

自動化スクリプトの作り方やAIを活用した効率化の事例は、AI副業ラボでも紹介しています。

よくある質問(FAQ)

Q1: Pythonの初心者でも自動化スクリプトは書けますか?

この記事で紹介しているコードはコピペで動作するように書いています。Python基礎(変数、関数、forループ)がわかれば十分です。わからない部分はChatGPTやGeminiなどのAIに聞きながら進められます。

Q2: 自動化スクリプトが途中でエラーになったらどうなりますか?

エラーハンドリング(try/except)を入れておけば、エラーが発生してもスクリプト全体が止まることを防げます。記事内の run_with_logging 関数のようにログを残す仕組みを入れておくと、後から原因を調べやすくなります。

Q3: スクレイピングは法的に問題ありませんか?

対象サイトの利用規約とrobots.txtに従う必要があります。個人的な情報収集であっても、規約で禁止されている場合は行わないでください。また、過度なアクセスは業務妨害になる可能性があります。常識的な間隔(1秒以上)を空けてアクセスしましょう。


参考書籍: Python自動化を体系的に学びたい方に。

Python実践入門(Amazon)