はじめに
前回、Pythonで「PDFのパスワード解除スクリプト」を作りました。
【Python】毎月の面倒な事務作業を自動化!PDFパスワード解除&整理スクリプトを作ってみた
これで作業はだいぶ楽になったのですが、人間とは欲深いもので、「いちいちターミナルを開いてコマンドを打つのも面倒くさい」と思い始めました。
そこで今回は、Mac標準の「ショートカット.app」を使って、このスクリプトをFinderの右クリックメニューに組み込みます。これで正真正銘の「ワンクリック自動化」です。
目標
Finderで対象のPDFファイルを右クリック(または二本指タップ)し、メニューから「PDFパスワード解除」を選ぶだけで、処理を完了させること。
準備:Pythonスクリプトを少し改造
前回のスクリプトはファイル名を直接書いていましたが、ショートカットアプリから「選んだファイル」を受け取れるように、少し書き換えます。 (sys.argvを使って、渡されたファイルを処理するように変更します)
Python
import pikepdf
import sys
import os
# コマンドライン引数からファイルパスを受け取る(複数選択対応)
input_files = sys.argv[1:]
# 自分のパスワードリスト
password_list = ["19850101", "password123", "0000"]
for file_path in input_files:
try:
# フォルダのパスとファイル名を取得
dir_name = os.path.dirname(file_path)
base_name = os.path.basename(file_path)
# パスワードリストを順に試す
for pwd in password_list:
try:
# PDFを開いてみる
pdf = pikepdf.open(file_path, password=pwd)
# 開けたら「unlocked_」をつけて元の場所に保存
new_filename = os.path.join(dir_name, f"unlocked_{base_name}")
pdf.save(new_filename)
print(f"成功: {base_name}")
break # 次のファイルへ
except pikepdf.PasswordError:
continue # パスワード違いなら次へ
except Exception as e:
print(f"エラーが発生しました: {e}")
手順:Mac標準「ショートカット」アプリの設定
ここからが本番です。MacBook Air1に標準搭載されている「ショートカット」アプリを開きます。
1. クイックアクションを作成
アプリのメニューから「新規ショートカット」を作成します。 画面右側の詳細設定(「i」マーク)で、「クイックアクションとして使用」にチェックを入れます。 これを受け取る対象を「ファイル(PDF)」に設定します。
2. シェルスクリプトを実行
アクションの検索窓から「シェルスクリプトを実行」を選び、ワークフローに追加します。 設定項目は以下のように記述します。
- 入力: ショートカットの入力
- シェル: zsh または bash
- パスの指定:
Bash
# お使いのPythonのパスを指定(brewならこれ)
/opt/homebrew/bin/python3 /Users/satomemo/scripts/unlock_pdf.py "$@"
ポイント: 入力を「引数として」受け取る設定にすること。これで選んだファイルの情報が $@ に入り、Python側に渡されます。
完成:実際の動作デモ
設定が終われば、FinderでPDFを右クリックするだけ。 「クイックアクション」メニューの中に、作った「PDFパスワード解除」ボタンが現れます!

これをポチッと押すだけで、一瞬でパスワードが解除されたファイルが生成されました。 黒い画面を見ることなく、裏側でPythonが仕事をしてくれる。最高です。
まとめ:UIとコードの融合こそ最強の時短
「コードが書ける」ことと「使いやすい」ことは別物です。 Pythonでロジックを作り、Macの機能で使いやすくラップする。この組み合わせこそ、Mac使いのエンジニア(そして忙しい情シス母ちゃん)の醍醐味ですね。


コメント