TechPlex Blog 記事一覧
プログラミング

Python自動化入門 — 退屈な作業を30分で自動化する方法【初心者向け】

ファイル整理、Excel操作、Web情報収集...毎日の面倒な作業をPythonで自動化。プログラミング未経験者でも今日から始められる実践ガイドです。

はじめに:なぜPythonで自動化なのか?

毎朝パソコンを開いて、同じフォルダのファイルを整理する。Excelのデータを別のシートにコピペする。Webサイトから最新情報をチェックしてスプレッドシートに転記する。こうした作業に、1日どれくらいの時間を費やしていますか?

もし1日30分だとすると、年間で約180時間。丸7日以上をルーティンワークに費やしている計算になります。「退屈だけど、やらなきゃいけない作業」は、実はPythonスクリプトで自動化できるものがほとんどです。

Pythonは数あるプログラミング言語の中でも、特に自動化に適しています。その理由は3つあります。

  • 1.文法がシンプルで読みやすい — 英語に近い文法で、プログラミング未経験者でも直感的に理解できます。
  • 2.ライブラリが豊富 — Excel操作、Web取得、PDF処理など、やりたいことに対応するライブラリがほぼ揃っています。
  • 3.無料で使える — Python本体もライブラリも全て無料。コストゼロで始められます。

この記事では、Python初心者でもすぐに使える5つの自動化スクリプトを、コピペで動くコード付きで紹介します。30分あれば、最初の自動化を動かせるはずです。

Pythonのインストール方法(Windows / Mac)

自動化を始める前に、まずPythonをインストールしましょう。既にインストール済みの方は、次のセクションまで飛ばしてください。

Windowsの場合

  1. Python公式サイトにアクセスし、最新版のインストーラーをダウンロードします。
  2. ダウンロードした python-3.x.x-amd64.exe を実行します。
  3. 重要:インストール画面の下部にある Add python.exe to PATH に必ずチェックを入れてください。
  4. 「Install Now」をクリックしてインストールを完了させます。

Macの場合

MacにはPythonがプリインストールされていますが、バージョンが古い場合があります。最新版をインストールするには、ターミナルを開いて以下のコマンドを実行します。

Terminal
# Homebrewがまだなら先にインストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Pythonをインストール
brew install python

インストール確認

コマンドプロンプト(Windows)またはターミナル(Mac)を開き、以下を実行します。

Terminal
python --version

Python 3.x.x と表示されれば成功です。次に、ライブラリのインストールに使う pip も確認しておきましょう。

Terminal
pip --version

バージョンが表示されればOKです。これで準備は完了。さっそく自動化スクリプトを書いていきましょう。

今日から使える自動化の実例5選

ここからが本題です。すぐにコピペして使える、実用的な5つの自動化スクリプトを紹介します。各スクリプトは独立しているので、自分に必要なものだけ試してみてください。

1

ファイル一括リネーム(osモジュール)

想定場面:大量の写真やドキュメントのファイル名を統一フォーマットに変換したい。

例えば、IMG_4521.jpgphoto_2026.jpg のようにバラバラの名前を project_001.jpgproject_002.jpg のように連番で統一します。

rename_files.py
import os

def rename_files(folder_path, prefix="file", start_num=1):
    """指定フォルダ内のファイルを連番でリネームする"""
    # フォルダ内のファイルを取得(隠しファイルを除外)
    files = sorted([
        f for f in os.listdir(folder_path)
        if os.path.isfile(os.path.join(folder_path, f))
        and not f.startswith(".")
    ])

    for i, filename in enumerate(files, start=start_num):
        # 拡張子を取得
        _, ext = os.path.splitext(filename)
        # 新しいファイル名を生成(例: project_001.jpg)
        new_name = f"{prefix}_{i:03d}{ext}"

        old_path = os.path.join(folder_path, filename)
        new_path = os.path.join(folder_path, new_name)

        os.rename(old_path, new_path)
        print(f"  {filename} -> {new_name}")

    print(f"\n{len(files)}個のファイルをリネームしました。")


# 使い方:フォルダパスとプレフィックスを指定して実行
if __name__ == "__main__":
    rename_files(
        folder_path="./photos",   # リネーム対象のフォルダ
        prefix="project",          # ファイル名のプレフィックス
        start_num=1                # 開始番号
    )
ポイント:Pythonの標準ライブラリ os だけで動くので、追加インストール不要です。:03d は3桁のゼロ埋め(001, 002, ...)を意味します。
2

Excel操作の自動化(openpyxl)

想定場面:毎月の売上データをExcelにまとめて、合計や平均を自動計算したい。

openpyxlを使えば、ExcelファイルをPythonから直接読み書きできます。Excelを開かなくてもデータ処理が完結します。

Terminal(ライブラリのインストール)
pip install openpyxl
excel_report.py
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.utils import get_column_letter

def create_sales_report(data, output_file="sales_report.xlsx"):
    """売上データからExcelレポートを自動生成する"""
    wb = Workbook()
    ws = wb.active
    ws.title = "月次売上レポート"

    # ヘッダーのスタイル設定
    header_font = Font(bold=True, color="FFFFFF", size=11)
    header_fill = PatternFill(start_color="2563EB", fill_type="solid")
    header_align = Alignment(horizontal="center")

    # ヘッダー行を書き込み
    headers = ["月", "売上(円)", "経費(円)", "利益(円)", "利益率"]
    for col, header in enumerate(headers, start=1):
        cell = ws.cell(row=1, column=col, value=header)
        cell.font = header_font
        cell.fill = header_fill
        cell.alignment = header_align

    # データ行を書き込み
    for row_idx, row_data in enumerate(data, start=2):
        month, sales, expenses = row_data
        profit = sales - expenses
        profit_rate = profit / sales * 100 if sales > 0 else 0

        ws.cell(row=row_idx, column=1, value=month)
        ws.cell(row=row_idx, column=2, value=sales)
        ws.cell(row=row_idx, column=3, value=expenses)
        ws.cell(row=row_idx, column=4, value=profit)
        ws.cell(row=row_idx, column=5, value=f"{profit_rate:.1f}%")

    # 合計行を追加
    total_row = len(data) + 2
    ws.cell(row=total_row, column=1, value="合計").font = Font(bold=True)
    for col in range(2, 5):
        letter = get_column_letter(col)
        formula = f"=SUM({letter}2:{letter}{total_row - 1})"
        ws.cell(row=total_row, column=col, value=formula)
        ws.cell(row=total_row, column=col).font = Font(bold=True)

    # 列幅を調整
    for col in range(1, 6):
        ws.column_dimensions[get_column_letter(col)].width = 15

    wb.save(output_file)
    print(f"レポートを保存しました: {output_file}")


# 使い方:売上データを渡して実行
if __name__ == "__main__":
    sales_data = [
        ("1月", 1200000, 450000),
        ("2月", 980000,  380000),
        ("3月", 1500000, 520000),
        ("4月", 1350000, 490000),
        ("5月", 1100000, 410000),
        ("6月", 1680000, 560000),
    ]
    create_sales_report(sales_data)
ポイント:openpyxlではExcelの数式(SUM等)もそのまま書き込めます。スタイル設定でヘッダーに色を付ければ、そのまま報告書として使える品質になります。
3

Web情報収集 — スクレイピング(requests + BeautifulSoup)

想定場面:ニュースサイトやブログの最新記事タイトルを定期的に収集したい。

requestsでWebページを取得し、BeautifulSoupでHTMLを解析することで、必要な情報だけを抽出できます。

Terminal(ライブラリのインストール)
pip install requests beautifulsoup4
web_scraper.py
import requests
from bs4 import BeautifulSoup
import csv
from datetime import datetime

def scrape_news(url, output_csv="news_data.csv"):
    """指定URLからニュース記事のタイトルとリンクを収集する"""
    headers = {
        "User-Agent": (
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
            "AppleWebKit/537.36 (KHTML, like Gecko) "
            "Chrome/120.0.0.0 Safari/537.36"
        )
    }

    try:
        response = requests.get(url, headers=headers, timeout=10)
        response.raise_for_status()
    except requests.RequestException as e:
        print(f"エラー: ページの取得に失敗しました - {e}")
        return

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

    # 記事のタイトルとリンクを抽出
    # ※セレクタは対象サイトに合わせて変更してください
    articles = []
    for item in soup.select("article h2 a, .article-title a"):
        title = item.get_text(strip=True)
        link = item.get("href", "")
        if title:
            # 相対URLを絶対URLに変換
            if link.startswith("/"):
                from urllib.parse import urljoin
                link = urljoin(url, link)
            articles.append({"title": title, "url": link})

    # CSVに保存
    if articles:
        with open(output_csv, "w", newline="", encoding="utf-8-sig") as f:
            writer = csv.DictWriter(f, fieldnames=["title", "url"])
            writer.writeheader()
            writer.writerows(articles)
        print(f"{len(articles)}件の記事を保存しました: {output_csv}")
    else:
        print("記事が見つかりませんでした。CSSセレクタを確認してください。")

    return articles


# 使い方:取得したいサイトのURLを指定して実行
if __name__ == "__main__":
    target_url = "https://example.com/news"
    scrape_news(target_url)
注意:Webスクレイピングを行う際は、対象サイトの利用規約と robots.txt を確認してください。過度なアクセスはサーバーに負荷をかけるため、time.sleep() で適切な間隔を空けるようにしましょう。
4

メール自動送信(smtplib)

想定場面:毎週の定例レポートや、処理完了通知を自動でメール送信したい。

Pythonの標準ライブラリ smtplibemail を使えば、Gmailなどからプログラム経由でメールを送信できます。

send_email.py
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import os

def send_email(to_addr, subject, body, attachment_path=None):
    """メールを自動送信する(Gmail使用)"""

    # Gmailの設定(アプリパスワードを使用)
    smtp_server = "smtp.gmail.com"
    smtp_port = 587
    from_addr = "your_email@gmail.com"
    # ※Googleアカウント設定で「アプリパスワード」を生成してください
    app_password = "xxxx xxxx xxxx xxxx"

    # メール作成
    msg = MIMEMultipart()
    msg["From"] = from_addr
    msg["To"] = to_addr
    msg["Subject"] = subject

    # 本文を追加
    msg.attach(MIMEText(body, "plain", "utf-8"))

    # 添付ファイルがあれば追加
    if attachment_path and os.path.isfile(attachment_path):
        with open(attachment_path, "rb") as f:
            part = MIMEBase("application", "octet-stream")
            part.set_payload(f.read())
            encoders.encode_base64(part)
            filename = os.path.basename(attachment_path)
            part.add_header(
                "Content-Disposition",
                f"attachment; filename={filename}"
            )
            msg.attach(part)

    # メール送信
    try:
        with smtplib.SMTP(smtp_server, smtp_port) as server:
            server.starttls()  # TLS暗号化を有効化
            server.login(from_addr, app_password)
            server.send_message(msg)
        print(f"メールを送信しました: {to_addr}")
    except smtplib.SMTPException as e:
        print(f"送信エラー: {e}")


# 使い方
if __name__ == "__main__":
    send_email(
        to_addr="recipient@example.com",
        subject="【自動送信】週次レポート",
        body="お疲れ様です。\n今週の売上レポートを添付します。\nご確認ください。",
        attachment_path="./sales_report.xlsx"
    )
ポイント:Gmailを使う場合は、Googleアカウントの「セキュリティ」設定からアプリパスワードを生成して使用します。通常のパスワードでは認証できないため注意してください。アプリパスワードは環境変数に保存し、コードに直書きしないのがベストプラクティスです。
5

PDF結合(PyPDF2)

想定場面:バラバラのPDFファイルを1つに結合したい。請求書や議事録の整理に便利。

PyPDF2を使えば、複数のPDFファイルを簡単に結合できます。ページの抽出や回転も可能です。

Terminal(ライブラリのインストール)
pip install PyPDF2
merge_pdf.py
from PyPDF2 import PdfMerger
import os
import glob

def merge_pdfs(input_folder, output_file="merged.pdf"):
    """フォルダ内の全PDFファイルを1つに結合する"""
    merger = PdfMerger()

    # フォルダ内のPDFファイルを名前順に取得
    pdf_files = sorted(glob.glob(os.path.join(input_folder, "*.pdf")))

    if not pdf_files:
        print("PDFファイルが見つかりません。")
        return

    print(f"{len(pdf_files)}個のPDFファイルを結合します:")
    for pdf_file in pdf_files:
        print(f"  + {os.path.basename(pdf_file)}")
        merger.append(pdf_file)

    # 結合して保存
    merger.write(output_file)
    merger.close()

    file_size = os.path.getsize(output_file) / 1024
    print(f"\n結合完了: {output_file} ({file_size:.1f} KB)")


def extract_pages(input_pdf, pages, output_file="extracted.pdf"):
    """特定のページだけを抽出する"""
    merger = PdfMerger()
    merger.append(input_pdf, pages=(pages[0] - 1, pages[1]))
    merger.write(output_file)
    merger.close()
    print(f"ページ {pages[0]}-{pages[1]} を抽出しました: {output_file}")


# 使い方
if __name__ == "__main__":
    # フォルダ内の全PDFを結合
    merge_pdfs(
        input_folder="./invoices",
        output_file="all_invoices_2026.pdf"
    )

    # 特定ページの抽出(例:3ページ目から5ページ目)
    # extract_pages("report.pdf", pages=(3, 5), output_file="pages_3_5.pdf")
ポイント:PyPDF2はPDFの結合だけでなく、ページの分割・回転・暗号化にも対応しています。大量のPDFを扱う業務では、このスクリプト1つで大幅な時短が期待できます。

次のステップ:より高度な自動化へ

基本的な自動化スクリプトが動かせるようになったら、次はさらに実用的な自動化に挑戦してみましょう。

1

スケジュール実行

Windowsの「タスクスケジューラ」やMacの「cron」を使えば、スクリプトを毎日決まった時刻に自動実行できます。schedule ライブラリを使ってPython内でスケジューリングすることも可能です。

2

GUI付きツールにする

tkinter(標準ライブラリ)や PySimpleGUI を使えば、コマンドラインに不慣れな人でも使えるGUIアプリに変換できます。

3

ブラウザ操作の自動化

SeleniumPlaywrightを使えば、Webブラウザの操作そのものを自動化できます。フォームへの入力、ボタンのクリック、スクリーンショットの取得など、あらゆるブラウザ操作をPythonから制御可能です。

4

AIとの連携

AIツールのAPIを組み合わせれば、テキストの要約、分類、翻訳なども自動化できます。たとえば、受信メールを自動分類して優先度別に振り分けるといった高度な処理も実現可能です。

まとめ

この記事では、Python初心者でもすぐに実践できる5つの自動化スクリプトを紹介しました。

今回紹介した自動化スクリプト

  1. ファイル一括リネームos モジュールで連番リネーム
  2. Excel操作openpyxl でレポート自動生成
  3. Web情報収集requests + BeautifulSoup でスクレイピング
  4. メール自動送信smtplib でGmailから自動送信
  5. PDF結合PyPDF2 で複数PDFを1ファイルに

大切なのは、完璧なコードを書こうとしないことです。まずは上のコードをコピペして動かしてみてください。動いた瞬間の「おお、これは便利だ」という感覚が、Python学習の最大のモチベーションになります。

1つ自動化できると、「これもできるんじゃないか?」「あの作業も自動化したい」とアイデアが次々と浮かんできます。それがプログラミング学習の好循環の始まりです。

退屈な作業はPythonに任せて、あなたはもっとクリエイティブなことに時間を使いましょう。

あわせて読みたい