大阪探検隊
📖 開発秘話マンガ ・ 第1巻

コピーできないPDFを、
バッチで解放せよ

〜 人間とAIの、ドタバタ・ツール開発記 〜

仕事で開いた分厚い資料PDF。要点をメモにコピペしようとしたら……コピーできない!? ブチギレた人間が、相棒のAIと組んで「ドラッグ&ドロップ一発で解放するバッチ」を作るまで。 文字化け事件あり、ちょっとした教訓あり。全5話、どうぞ。

💥 コピペできない 🔐 犯人は暗号化 🐛 まさかの文字化け 🎉 D&Dで一発解決
ぼくPDFと格闘する人間
クロード相棒のAI(Claude Code)
EP.01

💥 事件発生 — 「コピーできない!?」

平和な作業タイム。それは、ある一行をコピーしようとした瞬間に終わった。

1

よし、この分厚い業務マニュアルから、大事な手順をメモにコピペして、自分用の早見表を作るぞ〜。

2

……あれ? テキストを選択できない。右クリックしても「コピー」が反応しない。ドラッグしても、ツルッとすべる。

ぼくこのPDF、コピペできないんだけど!? 200ページもあるのに、ぜんぶ手打ちしろっていうの……?

クロード落ち着いて。まず “なぜコピーできないのか” を切り分けよう。原因がわかれば、たぶん一瞬で終わる話だよ。

EP.02

🕵 犯人さがし — 真犯人は「暗号化」

PDFがコピーできない理由は、だいたい2パターン。さあ、どっちだ?

容疑者A:画像スキャン

  • 紙をスキャンしただけの“画像”
  • そもそも文字データが無い
  • → 解決にはOCR(文字認識)が必要

容疑者B:コピー制限

  • 文字データはちゃんとある
  • でも“暗号化”でコピーだけ禁止
  • → 制限を外すだけでOK

クロード中身を調べてみたよ。文字はクッキリ埋め込まれてる。これは画像じゃない。……ということは。

ぼく容疑者B……!?

3

解析の結果は 「encrypted: True」。犯人はコピー制限(暗号化)で確定。しかも開くためのパスワードは“空”——つまり、開けるのにコピーだけ禁止という、いちばん外しやすいタイプだった。

テキスト層はそのまま生きている。なら、やることは決まった。「暗号化のカギを外して、保存し直す」。それだけ。

EP.03

🛠 作戦会議 — 「一回きり」より「毎回ラク」

1ファイルなら手動でいい。でも、これから何度も出会うはず。だったら——道具を作ろう。

ぼく今回のPDFだけ直してくれればいいよ……いや待てよ。仕事の資料、これからも山ほど来るぞ。

クロードだよね。じゃあドラッグ&ドロップするだけで解放できるバッチにしよう。ファイルでもフォルダでも、放り込めば一括で処理。

青く光るAIの人型が人間と並んで、宙に浮かぶ操作パネル(歯車・脳・ブラウザ・虫眼鏡などのアイコン)を操作し、ノートPCのコード画面とノートで作業している、人間とAIの協働開発のイメージ
🤝 人間とAIの、二人三脚。原因の切り分けも、コードも、デバッグも——相棒のAIと組めば、週末の片手間でも“道具”はつくれる。
4

作戦は2階建て。頭脳はPython(pypdfで暗号化を解いて保存し直す)、受付はバッチ(.bat)(ドロップされたファイルを受け取ってPythonに渡す)。これで“ダブルクリックで使える道具”になる。

unlock_pdf.py(頭脳)Python / pypdf
reader = pypdf.PdfReader(src)
if reader.is_encrypted:
    reader.decrypt("")          # 空パスワードでカギを外す

writer = pypdf.PdfWriter()
for page in reader.pages:       # 全ページをそのまま移す
    writer.add_page(page)

with open(dst, "wb") as f:      # 暗号化“なし”で保存し直す
    writer.write(f)             # → レイアウトそのまま、コピペ解禁
EP.04

🐛 文字化け事件 — バッチが日本語で暴走

いざ完成、テスト実行。……変換は成功した。でも、画面に謎のエラーが流れ出した。

5

バッチに書いた日本語のコメントが文字化けして、Windowsが「そんなコマンドは無い」と怒り出した。変換自体は動いてるのに、画面はエラーだらけ。なんとも締まらない。

ぼくうわっ、なんか英語のエラーがいっぱい出てる! 壊れた!?

クロード大丈夫、変換は成功してる。原因はバッチ内の日本語。文字コードの相性で誤読されてるんだ。だったら——バッチの中身は英語だけにして、日本語のメッセージは全部Python側に逃がそう。

🛡 “再発防止”の設計に切り替え

バッチ本体はASCII(英数字)だけに。利用者に見せる日本語の案内は、文字コードをUTF-8に整えたPython側でまとめて表示。これで「環境によって文字化けする」という事故の芽を、最初から断ち切った。

EP.05

🎉 完成 — ドラッグ&ドロップで、一発解放

直したバッチを、もう一度テスト。今度はどうだ……?

6

PDFをバッチのアイコンにポイッとドロップするだけ。元と同じ場所に「○○_コピペ可能.pdf」が誕生。フォルダごと放り込めば、中のPDFをまとめて一括処理。変換済みのファイルは賢くスキップ。

ぼくコピーできた——! しかも見た目は元のまま! もう手打ちしなくていいんだ……!

クロードでしょ。pypdfが無い環境でも、初回に自動でインストールするようにしておいたから、別のPCに渡しても動くよ。

「コピーできない」から、
「ドロップするだけ」へ。

EXTRA

🔬 おまけ — このバッチの“しくみ”

魔法ではありません。やっていることは、意外とシンプルです。

ノートPCを操作する手元から半透明のAI操作パネルが浮かび上がり、脳の回路アイコンと『AI』『Generate』『AI Agent』のボタンやチャットUIが並ぶ、生成AIツールのイメージ
🤖 相棒は、生成AI。AIに相談しながら「診断 → 書き写し → 保存」の手順をコードに落とすだけ。難しいことはAIが引き受けてくれる。
1
受付(バッチ)

ドラッグ&ドロップされたファイルやフォルダのパスを受け取り、頭脳役のPythonに渡す。Pythonやpypdfが無ければ自動で用意する。

2
診断

PDFが暗号化されているか確認。「開けるけどコピー制限だけ」のタイプを、空パスワードでそっと解錠する。

3
書き写し

全ページを新しいPDFへそのまま移し替え。中身・フォント・レイアウトは一切いじらない。

4
保存

今度は暗号化なしで保存。これでテキスト選択・コピーが解禁。元ファイルは消さず、別名で残す。

🧠 そもそも「コピー制限」とは?

PDFには、開くためのユーザーパスワードとは別に、印刷やコピーなどの操作を縛る権限パスワード(オーナーパスワード)という仕組みがあります。今回のPDFは、開くカギは掛かっていないのに、コピーだけを禁止する権限制限がかかっていました。だから“開けるのにコピペできない”という、ちょっと不思議な状態だったわけです。

使い方のおやくそく。 このツールは、自分が正当に閲覧・利用できる文書を、自分の学習や作業のために扱いやすくするためのものです。今回の題材は、自分の仕事で使うために正規に受け取った資料でした。第三者の著作物を権利者の許可なく再配布したり、利用規約で禁じられた使い方をするのはNG。開くこと自体にパスワードが必要なPDFは、そもそも対象外です(パスワードなしには開けないため)。道具は、正しく・気持ちよく使いましょう。

END

🌙 教訓 — 「面倒」は、道具にできる

200ページを手打ちする未来は、回避された。残ったのは、ちょっとした学びでした。

📌 この一件で学んだこと

  • 「できない」の前に、原因を切り分ける。 画像か、制限か。それだけで打ち手は決まる。
  • 一度きりの作業も、繰り返すなら道具にする。 手作業を“ドロップするだけ”に変える価値は大きい。
  • 事故は仕組みで防ぐ。 文字化けは「気をつける」ではなく、英語だけのバッチ=設計で断つ。
  • AIは、相棒として強い。 原因の切り分けも、コードも、デバッグも、二人三脚だと速い。
真上から見たノートPCのキーボードを打つ両手と、机に広がるアプリ画面のワイヤーフレームが描かれた紙の設計資料。コーディングと文書づくりが同居する作業風景
🛠 「面倒」は、道具にできる。手で打つ作業を“ドロップするだけ”に変える——その小さな一歩が、毎日をぐっとラクにする。

このサイト「AI探検隊」は、AIで「Webサイト・音楽・画像」を実際につくって見せる場所です。今回みたいな小さな“自作ツール”も、AIと組めば週末の片手間で生まれます。 「面倒だな」と思った瞬間こそ、道具づくりのチャンス。あなたの“コピーできないPDF”も、きっと解放できます。

「面倒」を、AIで道具に変える。
その入口は、すぐそこに。

ニュースを眺める側から、AIを使いこなす側へ。当サイトの実演記事から、はじめの一歩をどうぞ。

🧑‍💻 AIでWebサイトを作る 🛠 制作の実例(舞台裏) 🤖 AIエージェントとは 🔥 最強AI「Fable 5」特集 🏠 トップページ