フリーランス連盟では、月に一度「今月の活動報告(ドキュメントや画像)」を会員様から提出いただきます。
情報を仲間と共有することで、次の仕事や学びにつながる循環をつくっております。
この記事では、2025年より開始された素敵なアウトプットを表彰する制度(3ヶ月毎)で選ばれた会員様と活動報告内容をご紹介します。
表彰された会員様には、ギフト券や仕事に役立つアイテムをプレゼントしております!
2026年1月度の受賞者は、フリーランスエンジニアの川口さんです。
請求書メールの効率化について勉強になる記事をご提出いただきました。請求書を毎月提出されている方の参考になる内容となっております。
2026年1月度の受賞者プロフィール
川口和也 さん
フリーランスでスマホアプリを作っています。あとたまに音楽を作っています。 よろしくお願いいたします。
受賞した提出物
「請求書の報告を効率化しよう」
こんにちは。
フリーランスエンジニアを始めて数年経つ川口和也と申します。今はスマホアプリやWebアプリの開発を中心に仕事をしています。
今回は請求書管理の業務効率化についてまとめました。今の案件は自分で請求書を作成して、自分で担当者に稼働報告書や請求書を送付するルールとなっています。メールやLINEやSlackなど便利なーツールが豊富にあっても、どこかでミスが起こる可能性があります。月1度だけ行う大事な作業のため、誤送信や入力ミスなどをしないための仕組みを考えてみました。
■ やったこと
- 最初の何回かは手作業で送信する
- 送信するまでの手順を洗い出す
- 自動化できそうな仕組みと実装方法を調査する
- 実装してトライアンドエラーを繰り返す
■ 実装方針
細かい手順を省きますが、以下の工夫でうまく効率化できると考えました。
- 共有するクラウドストレージ(今回はOneDrive)フォルダに請求書などのファイルを置く
- ワンクリックで文章と送付先が決まったgmailを作成してくれるGoogle App Script(GAS)を作成する
クラウドストレージのフォルダ共有機能を使うことで、同じ共有リンクを送るだけでファイル送付を実現することができました。そして、GASでメール作成を自動化することで同じ品質のメールを作成することができました。
■ Apps Scriptのソース
ファイルと関数の役割を分けてそれなりにまとめました。(一部実装は伏せ字)
doGet.gs
function doGet(e) {
// 仕事用Gmailの下書きを作成
const draft = GmailApp.createDraft(
getToAddress(),
getSubject(),
getBody(),
getOptions()
);
// draft.send(); // これで送信される!
const draftId = draft.getId(); // 下書きのIDを取得
const gmailUrl = `(gmailのURL)?compose=${draftId}`; // Gmailの下書きURL
return HtmlService.createHtmlOutput(getHtml(gmailUrl));
}
config.gs
const today = new Date();
// 複数アドレスに送る時はメールアドレス毎にカンマで区切る
const toMail = "メールアドレス";
const ccMail = "メールアドレス";
// const bccMail = "";
// OneDriveURL
const oneDriveURL = "URL";
// メール本文
const body = "メール本文";
mailParts.gs
/**
* Toのメールアドレスを取得する
*/
function getToAddress() {
return toMail;
}
/**
* ccとbccを取得する
*/
function getOptions() {
return {
cc: ccMail,
// bcc: ""
};
}
/**
* 件名を取得する
*/
function getSubject() {
return getYear() + "年" + getMonth() + "月分稼働報告"; // 件名
}
/**
* 西暦年を取得する
*/
function getYear() {
return today.getFullYear(); // 西暦の年 (YYYY)
}
/**
* 月を取得する
*/
function getMonth() {
const nowMonth = today.getMonth() + 1;
return ("0" + nowMonth).slice(-2); // 0埋めの月 (MM)
}
/**
* メール本文を取得する
*/
function getBody() {
return body;
}
/**
* GAS実行後のHTMLを取得する
*/
function getHtml(gmailUrl) {
return `
<html>
<body>
<p>✅ Gmailの下書きを作成しました!</p>
<h2>次のアクション</h2>
<ul>
<li>手順を記載する</li>
</ul>
<p>
<a href="${gmailUrl}" target="_blank" rel="noopener noreferrer">
gmailの下書きを開く
</a>
</p>
</body>
</html>
`;
}
■ 動作結果
実際にどのように動くか手順を記載する。
手順1
リマインダーなどに設定したデプロイしたリンクをクリックすると以下の画面が表示する。下記リンクをク
リックするか、送信用アカウントのgmailを開く。

手順2
下書きが増えていることがわかる。下書きを確認する。

手順3
メールの宛先、件名、本文がGAS通りに動いていることを確認できた。 これで、共有ストレージ先の請求書と勤怠表も問題なければ送信して勤怠報告ができる。

■ まとめ
まだ課題はありますが、メール送付に関するミスを減らすことができるGASを作ることができました。また、この実装で初めてGASという仕組みを体験できたので勉強になりました。これからも面倒な作業を効率化できる仕組みの選択肢として利用していきたいと思います。