個人事業主・フリーランスの方は、確定申告の時期になりましたね。私はAmazonで購入することが多く、領収書を電子保存しておく必要があります。ところが、これまで使っていたChrome拡張(Amazon領収書一括印刷系)が動かなくなってしまいました。
そこで仕方なく、Amazonの注文履歴から「領収書等」→「印刷可能な注文概要」を開き、黄色の「印刷」ボタンを押してPDF保存……という作業をひたすら繰り返していました。
さらに困るのが、PDF保存時のファイル名がデフォルトで「注文の詳細.pdf」などになってしまう点です。注文番号(例:XXX-XXXXXXX-XXXXXX)をファイル名にしたいので、毎回注文番号をコピーしてファイル名に貼り付けてから保存していました。これが地味に面倒でした。
「注文番号をDOMから拾って、印刷まで自動化できそうだな」と思い、ChatGPTに相談して作ったのが以下のブックマークレットです。
(ブックマークのURL欄に javascript: から始まるコードを貼り付けて実行する、あのやつです。)
javascript:(()=>{const old=document.title;const re=/\b(?:\d{3}|[A-Z]\d{2})-\d{7}-\d{7}\b/;const m=document.body&&document.body.innerText&&document.body.innerText.match(re);const id=(m&&m[0])||prompt("注文番号(例: 250-3207065-8648623 / D01-5274236-7074631)");if(!id)return;document.title=id;window.addEventListener("afterprint",()=>{document.title=old},{once:true});window.print();})();
ブックマークは「ページを保存する場所」ではなく、実は“自分だけのショートカットキー”にもできます。
URL欄に javascript: を入れるだけで、ページ上の定型作業をワンクリックで実行可能。
拡張機能みたいにストア審査もアップデート追従も不要で、壊れにくいのが強みです。
必要なページでだけ動くので、普段のブラウジングを汚さないのも地味に便利。
小さな自動化を積み上げると、ブラウザが“作業ツール”に変わります。


使い方
- Chromeのブックマークに「新しいブックマーク」を追加します ※図①
- 名前は適当に付けて、URL欄に上のコードをそのまま貼り付けます
- Amazonの領収書(印刷可能な注文概要)ページを開いた状態で、そのブックマークを実行します
- 印刷画面が開くので「PDFとして保存」を選ぶと、ファイル名に注文番号が入った状態になっているはずです ※図②
これなら、手作業で1年分の領収書を保存する場合でも、そこまで苦にならないと思います。 参考になればうれしいです。
追記:注文日も拾って YYYYMMDD_注文番号 で保存する
PDFのファイル名を注文番号だけでなく、注文日も付けて 20251231_503-1737382-0797449 のようにすると、Finderでソートしやすく後から探すのがさらにラクになります。
印刷ページ内の「注文日 2025年12月31日」をパースして、ファイル名の先頭に付ける版はこちらです。
javascript:(()=>{const old=document.title;const orderRe=/\b(?:\d{3}|[A-Z]\d{2})-\d{7}-\d{7}\b/;const dateNearRe=/注文日[\s\S]{0,80}?(\d{4})年(\d{1,2})月(\d{1,2})日/;const dateRe=/(\d{4})年(\d{1,2})月(\d{1,2})日/;const t=document.body&&document.body.innerText||"";const om=t.match(orderRe);const dm=t.match(dateNearRe)||t.match(dateRe);const orderId=om?.[0]||prompt("注文番号(例: 250-3207065-8648623 / D01-5274236-7074631)");if(!orderId)return;const y=dm?.[1],m=dm?.[2],d=dm?.[3];const pad=n=>String(n).padStart(2,"0");const prefix=(y&&m&&d)?`${y}${pad(m)}${pad(d)}_`:"";document.title=`${prefix}${orderId}`;window.addEventListener("afterprint",()=>{document.title=old},{once:true});window.print();})();
これで、保存ダイアログを開いた時点でファイル名が YYYYMMDD_注文番号 になっているはずです。注文日が見つからないページでも、注文番号だけで動くようにしてあります。
ちなみに上のコードを整形すると次のようになります。
javascript:(() => {
const old = document.title;
const orderRe = /\b(?:\d{3}|[A-Z]\d{2})-\d{7}-\d{7}\b/;
const dateNearRe = /注文日[\s\S]{0,80}?(\d{4})年(\d{1,2})月(\d{1,2})日/;
const dateRe = /(\d{4})年(\d{1,2})月(\d{1,2})日/;
const t = document.body && document.body.innerText || "";
const om = t.match(orderRe);
const dm = t.match(dateNearRe) || t.match(dateRe);
const orderId = om?.[0] || prompt("注文番号(例: 250-3207065-8648623 / D01-5274236-7074631)");
if (!orderId) return;
const y = dm?.[1], m = dm?.[2], d = dm?.[3];
const pad = n => String(n).padStart(2, "0");
const prefix = (y && m && d) ? `${y}${pad(m)}${pad(d)}_` : "";
document.title = `${prefix}${orderId}`;
window.addEventListener("afterprint", () => {
document.title = old
}, {once: true});
window.print();
})();
注意点
- Amazon側のページ構成やリンク文言(「領収書」「領収書等」など)は変更されることがあります。ブックマークレットが動かなくなったら、まず実際のページ表記を確認してください。
- 一度に大量の注文を処理するとタブやダイアログが増えるので、数件ずつ実行するのが安全です。
関連記事
- C++でOpenCVをはじめる|撮影したレシートを自動でトリミング … 紙のレシートを撮影して自動でトリミング・補正する画像処理の例
- バニラJSのモダンな書き方・チートシート … ブックマークレットを書くときのJavaScript逆引きに
- Cloudflare Workerでサーバーレスな受付口を作る … 静的サイトに小さな処理を足したいとき