Google Apps Script × LINE APIで家計簿ボットを作った話
はじめに
家計簿アプリは世の中にたくさんありますが、「結局続かない」という人は少なくありません。アプリを開く、カテゴリを選ぶ、金額を入力する——このステップが面倒で、記録が途絶えてしまうのです。
そこで、普段使っているLINEにメッセージを送るだけで支出を記録できる家計簿ボットを開発しました。Google Apps Script(GAS)とLINE Messaging APIを組み合わせた、無料で運用できる構成です。
お客様からいただいた課題
課題1:家計簿アプリが続かない
専用の家計簿アプリを何度か試したものの、毎回アプリを開いて入力する手間がハードルとなり、長続きしませんでした。
課題2:レシートの管理が面倒
レシートを貯めておいてまとめて入力しようとすると、溜まったレシートの山を見るだけでやる気がなくなる。その場で記録できる仕組みが必要でした。
課題3:月の支出を把握したい
細かい分析まではいらないが、月にいくら使っているかを把握し、使いすぎを防ぎたいというニーズがありました。
なぜ LINE × GAS なのか
LINEを選んだ理由
- すでに毎日使っている:新しいアプリをインストールする必要がない
- 入力が手軽:テキストメッセージを送るだけ
- 通知が届く:月のまとめなどをプッシュ通知で送れる
Google Apps Scriptを選んだ理由
| 観点 | GASのメリット |
|---|---|
| コスト | 完全無料で利用可能 |
| ホスティング | Googleのインフラ上で動作。サーバー管理不要 |
| スプレッドシート連携 | Googleスプレッドシートに直接書き込める |
| デプロイ | Webアプリとして簡単にデプロイ可能 |
| トリガー | 時間ベースのトリガーで定期処理を実行可能 |
サーバーを用意する必要がなく、ランニングコストゼロで運用できるのが大きな利点です。
解決策:LINE家計簿ボットの開発
システム構成
ユーザー(LINE)
↓ メッセージ送信
LINE Messaging API
↓ Webhook
Google Apps Script(Webアプリ)
↓ データ書き込み
Google スプレッドシート(DB)
使い方
ユーザーはLINEで以下のようにメッセージを送るだけです:
ランチ 850
コンビニ 320
電車 480
「品目 金額」のシンプルなフォーマットで、すぐに記録できます。
実装のポイント
1. Webhookの受信処理
LINE Messaging APIからのWebhookをGASで受信し、メッセージを解析する処理です。
function doPost(e) {
var event = JSON.parse(e.postData.contents).events[0];
var replyToken = event.replyToken;
var userMessage = event.message.text;
// メッセージを解析
var result = parseMessage(userMessage);
if (result.success) {
// スプレッドシートに記録
recordExpense(result.item, result.amount);
replyMessage(replyToken,
"✅ 記録しました\n" + result.item + ": ¥" + result.amount);
} else {
replyMessage(replyToken, result.errorMessage);
}
}
2. メッセージの解析
ユーザーが送った自然なメッセージを解析し、品目と金額を抽出します。
function parseMessage(message) {
// 「品目 金額」形式を解析
var parts = message.trim().split(/\s+/);
if (parts.length >= 2) {
var item = parts[0];
var amount = parseInt(parts[parts.length - 1]);
if (!isNaN(amount) && amount > 0) {
return { success: true, item: item, amount: amount };
}
}
// 特殊コマンドの処理
if (message === "今月" || message === "集計") {
return { success: false, isCommand: true, command: "summary" };
}
return {
success: false,
errorMessage: "「品目 金額」の形式で送ってください\n例: ランチ 850"
};
}
3. スプレッドシートへの記録
データはGoogleスプレッドシートに蓄積されます。日付・品目・金額を1行ずつ記録するシンプルな構造です。
function recordExpense(item, amount) {
var sheet = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName("支出記録");
var now = new Date();
sheet.appendRow([
Utilities.formatDate(now, "Asia/Tokyo", "yyyy/MM/dd"),
Utilities.formatDate(now, "Asia/Tokyo", "HH:mm"),
item,
amount
]);
}
4. 月次集計の自動通知
月末に自動で集計結果をLINEに通知する機能を実装しました。GASの時間ベーストリガーを使って、月に1回自動実行されます。
function monthlySummary() {
var sheet = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName("支出記録");
var data = sheet.getDataRange().getValues();
var now = new Date();
var thisMonth = now.getMonth();
var thisYear = now.getFullYear();
var total = 0;
var categoryTotals = {};
data.forEach(function(row) {
var date = new Date(row[0]);
if (date.getMonth() === thisMonth &&
date.getFullYear() === thisYear) {
var item = row[2];
var amount = row[3];
total += amount;
categoryTotals[item] = (categoryTotals[item] || 0) + amount;
}
});
// 集計メッセージを作成して送信
var message = "📊 今月の支出まとめ\n"
+ "合計: ¥" + total.toLocaleString() + "\n\n";
// カテゴリ別の内訳を追加
Object.keys(categoryTotals)
.sort(function(a, b) {
return categoryTotals[b] - categoryTotals[a];
})
.forEach(function(key) {
message += key + ": ¥"
+ categoryTotals[key].toLocaleString() + "\n";
});
pushMessage(message);
}
対応コマンド
| メッセージ | 動作 |
|---|---|
ランチ 850 | 支出を記録 |
今月 | 今月の支出合計を表示 |
集計 | カテゴリ別の集計を表示 |
ヘルプ | 使い方を表示 |
改善結果
1. 記録の継続率が向上
LINEでメッセージを送るだけという手軽さにより、家計簿の記録が習慣化しました。専用アプリを開く手間がないため、「買い物した直後にLINEで記録」という行動パターンが定着しています。
2. リアルタイムな支出把握
「今月」とメッセージを送るだけで、今月の支出合計をすぐに確認できます。月末まで待たずに支出状況を把握できるため、使いすぎの防止に効果を発揮しています。
3. ランニングコストゼロ
Google Apps Script + Googleスプレッドシートの構成により、サーバー費用がかかりません。LINE Messaging APIも無料プランの範囲で十分に運用できています。
GAS × LINE Bot開発のコツ
デプロイ時は「新しいデプロイ」を選ぶ
GASのコードを更新した際、「デプロイを管理」から既存のデプロイを更新するのではなく、「新しいデプロイ」を作成し、WebhookのURLを更新する必要がある場合があります。
doPost関数のデバッグ
Webhookで呼ばれる
doPost関数は、GASのエディタから直接実行できません。デバッグ時はLogger.logでログを残し、GASの実行ログで確認するのが基本です。
スプレッドシートの行数制限に注意
Googleスプレッドシートは最大1,000万セルの制限があります。長期運用する場合は、年度ごとにシートを分けるなどの対策を検討しましょう。
まとめ
「家計簿が続かない」という課題を、LINEという日常的なツールを活用することで解決しました。
改善前:
- 専用アプリの入力が面倒で続かない
- レシートが溜まるだけ
- 月の支出が把握できない
改善後:
- LINEでメッセージを送るだけで記録完了
- その場で即座に記録する習慣が定着
- いつでも支出状況を確認可能
「ユーザーが既に使っているツールに寄り添う」という設計思想が、継続率の向上に直結したプロジェクトでした。技術的に高度なことをしなくても、ユーザー体験を最適化することで大きな価値を生み出せる好例だと考えています。
関連リンク: