【Python】毎月の面倒な事務作業を自動化!PDFパスワード解除&整理スクリプトを作ってみた

【Python】毎月の面倒な事務作業を自動化!PDFパスワード解除&整理スクリプトを作ってみた IT
この記事は約7分で読めます。

この記事でわかること

  • Pythonライブラリ「pikepdf」を使ったPDFパスワード解除の方法
  • 複数ファイルをフォルダごと一括処理するスクリプトの実装例
  • 情報セキュリティの観点から見た安全な運用ルール

はじめに

こんにちは、Satomemoです。 いよいよ2026年4月の復職が近づいてきました。育休中は「時間があるようで全くない」日々でしたが、復職後はさらに「分刻み」のスケジュールになることが目に見えています。

そこで、今のうちに「毎月発生する数分の無駄作業」をPythonで自動化して、少しでも未来の自分を楽にさせることにしました。

課題:ペーパーレス化の弊害「パスワード地獄」

最近は給与明細、保育園の請求書、銀行の取引明細など、あらゆる書類がPDFで電子交付されるようになりました。これ自体はありがたいのですが、問題なのは「パスワード」です。

  • メールからPDFをダウンロードする
  • ファイルを開く
  • いつものパスワード(誕生日の下4桁とか)を入力する
  • 「パスワードなし」で別名保存し直す
  • 家計簿アプリ(Money Forwardなど)に取り込む

この作業、1つなら数秒ですが、毎月複数のファイルで発生すると地味にストレスです。特にスマホで確認したい時にパスワードを求められると「もういいや」となりがちです。

解決策:Pythonで「パスワード解除→リネーム保存」を自動化する

「決まったパスワードを入力する」という単純作業は、コンピュータが最も得意とする分野です。 今回は、以下の動きをするシンプルなスクリプトを作成しました。

  1. 特定のフォルダに入れたPDFを検知
  2. あらかじめ設定したパスワードリスト(自分や家族の誕生日など)を総当たりで試行
  3. ヒットしたらパスワードを解除
  4. 「unlocked_(元のファイル名).pdf」として保存

これなら、ダウンロードしたファイルを「Inboxフォルダ」に放り込んでスクリプトを叩くだけで、整理されたPDFが出来上がります。

環境準備:pikepdfのインストール

まずは必要なライブラリをインストールします。ターミナルで以下を実行するだけです。

pip install pikepdf

macOSでインストールがうまくいかない場合は、依存ライブラリ qpdf を先に入れると解決することがあります。

brew install qpdf
pip install pikepdf

実装:ライブラリ「pikepdf」を使えば一瞬

PDF操作のライブラリはいくつかありますが、今回は処理が高速で解除に強い pikepdf を採用しました。

開発環境

  • PC: MacBook Air (13-inch, M4, 2025)
  • OS: macOS Tahoe 26.2
  • 言語: Python 3.14.1

コードのイメージ あくまで自分用の効率化ツールなので、コードは非常にシンプルです。

Python

import pikepdf
import os

# 対象のファイルとパスワード
target_file = "payslip_202601.pdf"
password_list = ["19850101", "password123"] # 自分のパスワードリスト

try:
    # パスワードリストを順番に試す
    for pwd in password_list:
        try:
            # PDFを開いてみる
            pdf = pikepdf.open(target_file, password=pwd)
            
            # 開けたらパスワード解除して保存
            new_filename = f"unlocked_{target_file}"
            pdf.save(new_filename)
            print(f"成功!パスワードは {pwd} でした。")
            break
            
        except pikepdf.PasswordError:
            continue # パスワード違いなら次へ
            
except Exception as e:
    print(f"エラーが発生しました: {e}")

これだけで、いちいち手入力していた作業から解放されました。 (※実際にはフォルダ内の全ファイルをループ処理させたり、日付をファイル名に入れたりして運用しています)

実用版:フォルダ内の全PDFを一括処理するスクリプト

実際に運用しているのは、以下のような「Inboxフォルダに放り込んだPDFをまとめて処理する」バージョンです。

import pikepdf
import os
from pathlib import Path

# 設定
INBOX_DIR = Path.home() / "Downloads" / "pdf_inbox"   # 処理対象フォルダ
OUTPUT_DIR = Path.home() / "Downloads" / "pdf_unlocked"  # 出力先フォルダ
PASSWORD_LIST = ["19850101", "password123"]  # 試すパスワードリスト

OUTPUT_DIR.mkdir(exist_ok=True)

results = {"success": 0, "failed": 0, "skipped": 0}

for pdf_path in INBOX_DIR.glob("*.pdf"):
    out_path = OUTPUT_DIR / f"unlocked_{pdf_path.name}"
    
    # 処理済みはスキップ
    if out_path.exists():
        print(f"スキップ: {pdf_path.name}")
        results["skipped"] += 1
        continue
    
    unlocked = False
    for pwd in PASSWORD_LIST:
        try:
            with pikepdf.open(pdf_path, password=pwd) as pdf:
                pdf.save(out_path)
            print(f"✓ 解除成功: {pdf_path.name} (パスワード: {pwd})")
            unlocked = True
            results["success"] += 1
            break
        except pikepdf.PasswordError:
            continue
    
    if not unlocked:
        # パスワードなしで開けるか確認(もともと無圧縮のPDF)
        try:
            with pikepdf.open(pdf_path) as pdf:
                pdf.save(out_path)
            print(f"✓ パスワードなし: {pdf_path.name}")
            results["success"] += 1
        except Exception:
            print(f"✗ 失敗: {pdf_path.name} (パスワードリストに該当なし)")
            results["failed"] += 1

print(f"
完了: 成功 {results['success']} / 失敗 {results['failed']} / スキップ {results['skipped']}")

これを毎月の明細日に実行するだけで、パスワード入力の手間が完全になくなります。スクリプトの実行をもっと楽にしたい場合は、Macの右クリックから一発実行する方法をあわせてご覧ください。

注意点:セキュリティと利便性のバランス

情報セキュリティの仕事をしている身として、一応補足しておきます。

このスクリプトは「自分が正規に権限を持っている(パスワードを知っている)ファイルの閲覧を楽にする」ためのものです。 解除したPDFは誰でも見られる状態になるので、保存先を暗号化されたディスク領域にするか、個人のローカルPC内だけで管理するなど、取り扱いには注意が必要です。

「便利になる」=「ガードが下がる」ということなので、クラウドストレージ(Google Drive等)にアップロードする際は、逆にパスワードをかける等の運用ルールを決めておきましょう。

まとめ:復職に向けて「秒」を削り出す

たかがパスワード入力、されどパスワード入力。 「面倒くさいな」という感情は、自動化への第一歩です。

情シスとしてのスキルを家庭内の事務作業にも活かして、来るべき復職ライフを少しでも快適にしていきたいと思います。 次は「保育園のプリント整理」あたりを自動化したいですね…。

コメント

タイトルとURLをコピーしました