Apple領収書を回収しよう!〜GASで自動化&ノーストレスな管理術〜
目次
はじめに
Twitterでのみなさんの反応が嬉しく、noteを投稿することにしました。
皆さん、iPhone🍎を購入した後の事務処理は面倒ですよね。
領収書の整理、皆さんはどのように行っていますか?
手動での領収書管理の問題点
私の場合、以前は以下の手順で領収書を管理していました:
Gmailで「noreply@email.apple.com」を検索
メールを開いてPDFをダウンロード
Googleドライブに保存
この繰り返し作業は、本当に時間と労力の無駄だと感じていました。そこで、自動化に挑戦することにしました!
GASで領収書管理を自動化!
みなさん「GAS(Google Apps Script)」をご存じですか?
簡単に言うと、Googleの中のサービスを自動化するためのツールです。
GASでできること:
GASでは様々なことが自動化できます
1. Gmailの自動操作
• メールを自動で送ったり、古いメールを削除したりできる。
2. スプレッドシートの操作
• データを追加したり、計算したり、自動で更新できる。
3. カレンダーの操作
• Googleカレンダーに予定を入れたり、通知を送ったりできる。
4. Googleドライブの操作
• ファイルを整理したり、バックアップを作ったりできる。などなど。
難しそうに感じますが、やりたいことをChatGPTの助けを借りて整理すれば安心です。コードの知識がゼロの私でも、AIのサポートでスムーズに進めることができました。
実際に使ったGASコード
以下は、Gmailから特定のアドレス(今回はApple)を指定し、領収書のPDFを取得し、Googleドライブに保存するGASコードです。
copy// function logEmailsWithPDF() {
// 定数の設定
const SHEET_ID = '1p9qjbYWKPGp6vwkT61fOA45455hZPYDkEiGkdVgsU4k';
const SHEET_NAME = 'シート1';
const FOLDER_ID = '1uI3rS53VG37maTzw4545jqYkDjTDfZ';
const QUERY = 'from:noreply@email.apple.com has:attachment';
// スプレッドシートとフォルダの初期化
const sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME);
const folder = DriveApp.getFolderById(FOLDER_ID);
// ヘッダー行の確認と追加
if (sheet.getLastRow() === 0) {
sheet.appendRow(['受信日', '受信時間', 'PDFリンク', 'ファイル名']);
Logger.log('ヘッダーを追加しました。');
}
// 既存のPDFリンクを取得
let existingLinks = [];
const lastRow = sheet.getLastRow();
if (lastRow > 1) {
existingLinks = sheet.getRange(2, 3, lastRow - 1).getValues().flat();
Logger.log('既存のPDFリンクを取得しました: ' + existingLinks.length + ' 件のリンク');
}
// Gmailの検索
const threads = GmailApp.search(QUERY);
Logger.log('検索結果: ' + threads.length + ' 件のスレッドが見つかりました。');
threads.forEach(function(thread) {
const messages = thread.getMessages();
messages.forEach(function(message) {
const receivedDate = message.getDate();
const receivedDateString = Utilities.formatDate(receivedDate, Session.getScriptTimeZone(), 'yyyy/MM/dd');
const receivedTimeString = Utilities.formatDate(receivedDate, Session.getScriptTimeZone(), 'HH:mm:ss');
// 添付ファイルの処理
const attachments = message.getAttachments();
attachments.forEach(function(attachment) {
if (attachment.getContentType() === 'application/pdf') {
const fileName = attachment.getName();
const pdfLink = 'https://mail.google.com/mail/u/0/#inbox/' + thread.getId();
// 重複チェック
if (existingLinks.includes(pdfLink)) {
return;
}
// ファイルを保存
const file = DriveApp.createFile(attachment);
folder.addFile(file);
DriveApp.getRootFolder().removeFile(file);
// スプレッドシートにデータ記録
sheet.appendRow([receivedDateString, receivedTimeString, pdfLink, fileName]);
existingLinks.push(pdfLink);
}
});
});
});
Logger.log('処理が完了しました。');
}
コードを自分用にカスタマイズする方法
このコードを使用するには、スプレッドシートIDとGoogleドライブのフォルダIDを自身のものに変更する必要があります。以下に簡単な方法を2つご紹介します。
ChatGPTに任せる方法
コードをコピーし、ChatGPTに「このコードを自分のスプレッドシートとGoogleドライブのIDに変更して」と依頼するだけで、変更後のコードを生成してくれます。自動化アプリを使う方法
DifyというAIツールでアプリを作成しました! スプレッドシートとGoogleドライブのURLを入力するだけで、あなた専用のGASコードが生成されます。(https://udify.app/workflow/X7l2FSZHjMq3DSo0)
共通手順
Googleドライブ内に新規フォルダを作成。
新規スプレッドシートを作成。
シート名はこだわりなければ「シート1」のまま。
GoogleドライブのURLをコピー。
スプレッドシートのURLをコピー。
パターン①: GASコードを直接修正
noteのGASコードをから自分のGoogleドライブフォルダIDとスプレッドシートIDを差し替え。(手動でもChatGPT使っても可)
コードを保存
パターン②: Difyを利用して自動でGASコード作成
GoogleドライブのURLを入力。
スプレッドシートURLを入力。
アプリを実行。
生成されたGASコードを保存。
実際に動かしてみた!
作成したコードを実行してみました。
動画を用意しましたので、ぜひ参考にしてください!
⬇️コレにはGASのスプレッドシートでの実行手順も載ってます
参考にした記事はこちらです:
https://zenn.dev/gas/articles/0c351e40282ba9
次回のnote予告
次回は、PDFの内容を文字起こししてスプレッドシートに記載する方法をシェアするかもです。
予告動画
実際使われた方がいればコメントで教えてください!
次の記事を書く励みになります🙇♂️
役に立ったよって人は100円募金してくれたらうれしいです🍎
#GAS #GoogleAppsScript #自動化 #Apple #領収書 #iPhone #事務処理 #ChatGPT #Dify #生産性向上 #時短術
ここから先は
¥ 100
Amazonギフトカード5,000円分が当たる
この記事が気に入ったらチップで応援してみませんか?