はじめに
今日は誰が到着するか。それを確認するためだけに管理画面を開くのが手間で、筆者が運営する客室4室の宿では、ねっぱんの予約通知メールをGoogleカレンダーに自動で転記する仕組みを使っています。この記事では、実際に運用している方法を、コピペで使えるコードと合わせて紹介します。難しいプログラムの知識がなくても、書き換える場所さえ間違えなければ動きます。
予約メールをカレンダーに転記して変わったこと
この仕組みを使い始めて、日々の運営はこう変わりました。
- スマホのカレンダーを開くだけで、今日の到着と滞在中の予約が見える
- 清掃や買い出しの予定と同じ画面で段取りを組める
- カレンダーを共有すれば、家族やスタッフにも予約状況が伝わる
- 管理画面を開くのは、料金や詳しい内容を確認したいときだけになる
正式な予約の管理はこれまでどおりねっぱんが担います。カレンダーは「ひと目で見るための写し」と考えてください。
準備するもの
- ねっぱんの予約通知メールが届くGoogleのメールアドレス(Gmail)
- Googleアカウント
- 作業時間30分ほど
費用はかかりません。今回使う仕組み(Google Apps Script)もGoogleカレンダーも無料です。
手順1:届いているメールの中身を確認する
ねっぱんの予約通知メールは、だいたい次のような内容で届きます。
予約サイト :Booking.com
予約番号 :(予約ごとの番号)
宿泊者氏名 :山田太郎(Y a m a d a T a r o u)
チェックイン :2026年08月14日(金)
チェックアウト:2026年08月16日(日)
部屋タイプ :Single Room with Shared Shower and Toilet
プラン :Standard Rate
室数 :1室
合計金額 :10,400円
決済方法 :事前決済
この先の設定は、この項目名(「宿泊者氏名」「チェックイン」など)を目印にして情報を取り出す仕組みです。まずは自分のところに届いているメールを1通開いて、項目名がこの通りかどうかだけ確認しておいてください。もし違う言葉になっていたら、そこだけ後で書き換えます。

手順2:コードを貼り付けて、2か所だけ書き換える
script.google.com を開き、「新しいプロジェクト」を作成します。もとから入っている文字を全部消して、以下を貼り付けてください。筆者が実際の運用で使っているものと同じ内容です。

function importReservationsFromNeppan() {
// ▼▼▼ 設定項目 ▼▼▼
// 【書き換え1】登録したいGoogleカレンダーのIDを入力してください
const calendarId = 'あなたのカレンダーID';
// 検索するメールの条件 変更しない
const searchQuery = 'from:(auto-mail-sender@neppan.net) subject:("[ねっぱん!]○予約のお知らせ") is:unread';
// 処理済みメールにつけるラベル名 好きな名前をつけて構いません
const labelName = 'カレンダー登録済み';
// ▲▲▲ 設定項目ここまで ▲▲▲
const calendar = CalendarApp.getCalendarById(calendarId);
if (!calendar) {
Logger.log(`エラー: 指定されたIDのカレンダーが見つかりません。IDを確認してください: ${calendarId}`);
return;
}
const threads = GmailApp.search(searchQuery);
if (threads.length === 0) {
Logger.log('新規の予約メールはありませんでした。');
return;
}
Logger.log(`${threads.length}件の新規予約メールが見つかりました。`);
let label = GmailApp.getUserLabelByName(labelName);
if (!label) {
label = GmailApp.createLabel(labelName);
}
for (const thread of threads) {
const messages = thread.getMessages();
const message = messages[messages.length - 1];
const mailBody = message.getPlainBody();
try {
const guestNameMatch = mailBody.match(/宿泊者氏名\s*:\s*(.*)/);
const checkinMatch = mailBody.match(/チェックイン\s*:\s*(\d{4}年\d{1,2}月\d{1,2}日)/);
const checkoutMatch = mailBody.match(/チェックアウト\s*:\s*(\d{4}年\d{1,2}月\d{1,2}日)/);
const paymentMatch = mailBody.match(/決済方法\s*:\s*(.*)/);
const otaMatch = mailBody.match(/予約サイト\s*:\s*(.*)/);
const roomMatch = mailBody.match(/部屋タイプ\s*:\s*(.*)/);
if (guestNameMatch && checkinMatch && checkoutMatch && paymentMatch && otaMatch && roomMatch) {
const guestName = guestNameMatch[1].trim();
const checkinDate = new Date(checkinMatch[1].replace(/年|月/g, '-').replace(/日/, ''));
const checkoutDate = new Date(checkoutMatch[1].replace(/年|月/g, '-').replace(/日/, ''));
const paymentMethod = paymentMatch[1].trim();
const ota = otaMatch[1].trim();
const rawRoomType = roomMatch[1].trim();
// 【書き換え2】部屋タイプの呼び方は、ご自身の宿の表記に合わせて書き換えてください
// メールの【部屋タイプ:Single】などをカレンダー上では【シングル】に書き換えます
let simpleRoomName = '';
if (rawRoomType.includes('Single') && rawRoomType.includes('Twin')) {
simpleRoomName = 'シングルツイン';
} else if (rawRoomType.includes('Single')) {
simpleRoomName = 'シングル';
} else if (rawRoomType.includes('Twin')) {
simpleRoomName = 'ツイン';
} else {
simpleRoomName = rawRoomType;
}
const eventTitle = `【${simpleRoomName}】${guestName}様`;
calendar.createAllDayEvent(eventTitle, checkinDate, checkoutDate, {
description: `決済方法:${paymentMethod}\n` +
`予約サイト:${ota}\n` +
`宿泊者氏名:${guestName}\n` +
`部屋タイプ:${rawRoomType}\n` +
`-----\n`
});
thread.addLabel(label);
thread.markRead();
Logger.log(`【登録成功】${guestName}様の予約をカレンダーに登録しました。`);
} else {
Logger.log('メール本文から必要な情報がすべて揃わなかったため、スキップしました。');
}
} catch (e) {
Logger.log(`処理中にエラーが発生しました: ${e.message}`);
}
}
}書き換えるのは【書き換え1】【書き換え2】の2か所だけです。それ以外の部分は、手順1で確認した項目名(「宿泊者氏名」「チェックイン」など)を目印にして情報を拾っているだけなので、項目名が一致していれば触る必要はありません。
カレンダーIDの調べ方:Googleカレンダーの左側で使いたいカレンダーにマウスを合わせ、「⋮」→「設定と共有」を開きます。下の方にある「カレンダーの統合」という項目に、「カレンダーID」が表示されているので、それをコピーして貼り付けます。

件名について:メールの件名には『○』や『▲』『▶︎』などの記号が在庫状況によって入りますが、Googleの検索仕様でこれらの記号は自動的に無視されて検索されるようになっています。そのため、コードの件名部分は書き換えずにそのままで問題なく動きます
貼り付けたら上部の「実行」を押します。初回はGoogleの確認画面が出ますが、自分で作ったものを自分のアカウントで動かすだけなので、「詳細」から自分のプロジェクト名を選んで進めれば大丈夫です。
手順3:予約メール1件で動作を確認する
コードを貼り付けて設定を書き換えたら保存をして、予約通知メールを1件未読にした状態で、画面上部の「実行」を押します。
初回はGoogleアカウントへのアクセス許可を求められます。画面の案内に沿って、GmailとGoogleカレンダーへのアクセスを許可してください。
実行後、指定したGoogleカレンダーを開き、チェックイン日からチェックアウト日の前日まで予定が登録されていれば成功です。
予定が入らない場合は、Apps Script画面左側の「実行数」からエラー内容を確認します。特に多いのは、カレンダーIDの入力間違いと、メール本文の項目名の違いです。
手順3:自動で動くように設定する
最後に、放っておいても自動で動くように設定します。

- 左側の時計マークの「トリガー」を開く
- 「トリガーを追加」を押す
- 実行する関数:importReservationsFromNeppan
- イベントのソース:時間主導型
- 間隔:5分おき〜1時間おきなど、好きな間隔を選ぶ
これで、設定した間隔ごとに新しい予約通知メールを確認し、該当する予約を自動でカレンダーに登録します。筆者の宿でも、この設定をしてから管理画面を開く回数がかなり減りました。
運用のコツ
実際に運用していて気づいた点は次の通りです。
- 対象になるのは「未読のメール」です。設定を試す前に自分でメールを開いて読んでしまうと、そのメールは対象から外れてしまいます。確認は通知の内容を見る程度にとどめてください
- このコードは新規予約のお知らせに対応したものです。予約の変更やキャンセルの通知には対応していないので、変更・取消があった場合はカレンダー側を手動で直しています。予約の変更やキャンセルがあった場合に自動で消してしまうと混乱の原因になりやすいです。
- 部屋タイプの呼び方(シングル・ツインなど)は、自分の宿の部屋名に合わせて書き換えても、書き換えなくてもどちらでも動きます。書き換えなければ、メールに書かれた元の名前がそのまま使われます
予約管理の次に、口コミ収集も仕組み化した
予約通知の転記は、小さな確認作業を減らすための自動化です。
筆者の宿では、こうした細かな作業を一つずつ減らした後、宿泊後の口コミ収集についても仕組みを見直しました。口コミをお願いした方がいいと分かっていても、忙しい運営の中では声をかける余裕がなく、毎回お願いするのも気まずかったためです。
そこで、宿泊者が自分のタイミングで感想を残し、その流れで口コミ投稿へ進める導線を作りました。
ゲストハウスで口コミが増えない理由と、実際に試した仕組みについては、次の記事で紹介しています。
increase-guesthouse-reviews
まとめ
ねっぱんの予約通知メールをGoogleカレンダーに自動登録する方法を整理します。
- 仕組みは「予約通知メール→Gmail→自動処理→カレンダー」の流れ
- コードはコピペで使え、書き換えるのはカレンダーIDと部屋タイプの呼び方の2か所
- 対象は新規予約のみ。変更・キャンセルは手動で直す
- カレンダーはひと目で見るための写しで、正式な予約情報はねっぱん側にある
宿泊者の声を、口コミに変える仕組みを
無料で試してみませんか
QRコードを設置するだけで、ゲストの感想がGoogle口コミへ自然につながります。
先着10施設限定、3ヶ月間は全機能を無料でご利用いただけます。
先着10施設限定・3ヶ月無料

