フリーランスや経営者の皆さん、毎日たくさんのメールに対応されていますよね。「お客様からの重要な問い合わせ」「パートナーからの請求書」「プロジェクト関連の依頼メール」…これらを手作業でタスク管理ツールやNotionに一つひとつ転記していませんか?その作業、正直言って面倒ではないでしょうか。後でやろうと思って忘れてしまったり、コピペミスが発生したりと、地味ながらもストレスの種になりがちです。もし、Gmailに特定のメールが届いた瞬間に、全自動でNotionのデータベースに必要な情報が記録されるとしたら…?この記事では、プログラミング初心者の方でも大丈夫なように、Google Apps Script (GAS) という無料ツールを使って、その夢のような仕組みを30分で構築する手順を、ステップ・バイ・ステップで徹底解説します。このチュートリアルを終える頃には、あなたは面倒な転記作業から解放され、もっと創造的で本質的な仕事に時間を使えるようになっているはずです!
今回作成する自動化の全体像
まずは、今回作る「Gmailに届いた特定メールをNotionに自動追加する」仕組みが、どのような流れで動くのかをイメージしましょう。以下の図のように、裏側でプログラムが健気に働いてくれるイメージです。
graph TD
A[定期的にプログラムが起動] --> B{Gmailをチェック};
B --> C[特定の条件のメールを探す
例:「請求書」という件名];
C --> D{該当メールはある?};
D -- YES --> E[メール情報を抜き出す
件名、差出人、受信日時、本文など];
E --> F[抜き出した情報をNotionへ送信];
F --> G[Notionデータベースに新しいページとして追加];
D -- NO --> H[処理を終了];
ステップ0:事前準備
実際に手を動かす前に、以下の4つを準備しておきましょう。すべて無料で用意できるものばかりです。
- Googleアカウント:Gmailを使うために普段お使いのものでOKです。
- Notionアカウント:まだの方は公式サイトから作成してください。
- Notionデータベース:メール情報を保存するための専用データベースを事前に作成しておきます。最低限、以下のプロパティ(項目)を用意しておくと便利です。
- 件名(プロパティの種類:
タイトル) - 差出人(プロパティの種類:
メール) - 受信日時(プロパティの種類:
日付) - 本文抜粋(プロパティの種類:
テキスト) - ステータス(プロパティの種類:
セレクト※「未対応」「対応中」など)
- 件名(プロパティの種類:
- Google Chromeブラウザ:今回の作業はブラウザ上で行います。
ステップ・バイ・ステップ構築ガイド
準備が整ったら、いよいよ構築スタートです!一つひとつ丁寧に進めていきましょう。
Step1:Notionの準備(データベースIDとAPIキーの取得)
まず、プログラムがNotionにアクセスするための「合鍵」と「住所」を取得します。
- APIキー(Internal Integration Token)の取得
Notionの左側メニューから「設定」→「インテグレーション」を開きます。「新しいインテグレーションを作成する」をクリックし、名前(例:「Gmail連携用」)を入力して「送信」します。表示されたページに「内部インテグレーションシークレット」という項目があるので、「表示」をクリックして表示されるsecret_から始まる文字列をコピーし、メモ帳などに控えておきます。これがAPIキーです。 - データベースとインテグレーションを連携
次に、先ほど準備したNotionデータベースを開き、右上の「・・・」メニューから「コネクトの追加」を選択します。検索窓に先ほど作成したインテグレーション名(例:「Gmail連携用」)を入力し、表示されたものをクリックして連携させます。これでプログラムがこのデータベースを編集できるようになりました。 - データベースIDの取得
データベースのURLを確認します。例えばURLがhttps://www.notion.so/your-workspace/abcdef1234567890abcdef12345678?v=...のようになっている場合、/と?の間のabcdef1234567890abcdef12345678の部分がデータベースIDです。この部分をコピーして、APIキーと一緒にメモ帳に控えておきましょう。
Step2:Google Apps Script プロジェクトの作成
次に、自動化プログラムを記述する場所を用意します。
- Googleドライブ(https://drive.google.com/)を開きます。
- 左上の「+新規」ボタンを押し、「Googleスプレッドシート」を選択して新しいシートを作成します。(このシート自体は使いませんが、GASプロジェクトの置き場所として使います)
- シートが開いたら、上部メニューの「拡張機能」から「Apps Script」をクリックします。
- 新しいタブでスクリプトエディタが開きます。左上の「無題のプロジェクト」をクリックし、分かりやすい名前(例:「Gmail to Notion 自動化」)に変更しておきましょう。
Step3:GASにAPIキーとデータベースIDを設定する
先ほど取得したNotionのAPIキーとデータベースIDを、安全な場所に保管します。コードに直接書き込むのではなく、「スクリプトプロパティ」という機能を使うのがお作法です。
- スクリプトエディタの左側メニューにある歯車アイコン(プロジェクトの設定)をクリックします。
- 下にスクロールし、「スクリプト プロパティ」というセクションの「スクリプト プロパティを編集」ボタンをクリックします。
- 「+プロパティを追加」を2回クリックし、以下のように2つのプロパティを設定します。入力値は、Step1でメモしたご自身のものに置き換えてください。
- プロパティ1:
NOTION_API_KEY/ 値:secret_...(あなたのAPIキー) - プロパティ2:
NOTION_DATABASE_ID/ 値:abcdef...(あなたのデータベースID)
- プロパティ1:
- 入力が終わったら「スクリプト プロパティを保存」をクリックします。
Step4:メインの処理コードをコピペする
いよいよ心臓部となるコードを書いていきます。と言っても、以下のコードをそのままコピー&ペーストすればOKです!
- スクリプトエディタに戻り、元々表示されている
function myFunction() { ... }という部分を全て削除します。 - 以下のコードをエディタ画面に貼り付けます。
// Notion APIのバージョン(このままでOK)
const NOTION_API_VERSION = '2022-06-28';
// メインの処理を実行する関数
function syncGmailToNotion() {
// Step3で設定した情報を取得
const scriptProperties = PropertiesService.getScriptProperties();
const NOTION_API_KEY = scriptProperties.getProperty('NOTION_API_KEY');
const NOTION_DATABASE_ID = scriptProperties.getProperty('NOTION_DATABASE_ID');
// ★★★★★ ここに、検索したいGmailの条件を記述します ★★★★★
// 例:件名に「請求書」が含まれる未読メール
const searchQuery = 'subject:請求書 is:unread';
// Gmailからメールを検索
const threads = GmailApp.search(searchQuery);
// 見つかったメールを一件ずつ処理
for (const thread of threads) {
const message = thread.getMessages()[0]; // スレッドの最初のメッセージを取得
const subject = message.getSubject();
const from = message.getFrom();
const date = message.getDate();
const body = message.getPlainBody().substring(0, 1500); // 本文を1500文字まで取得
// Notionに送るデータを作成
const notionPayload = {
parent: { database_id: NOTION_DATABASE_ID },
properties: {
'件名': { // Notionデータベースの「タイトル」プロパティ名
title: [{ text: { content: subject } }]
},
'差出人': { // Notionデータベースの「メール」プロパティ名
email: from
},
'受信日時': { // Notionデータベースの「日付」プロパティ名
date: { start: date.toISOString() }
},
'本文抜粋': { // Notionデータベースの「テキスト」プロパティ名
rich_text: [{ text: { content: body + '...' } }]
}
}
};
// Notion APIを呼び出してページを作成
try {
const options = {
method: 'post',
contentType: 'application/json',
headers: {
'Authorization': 'Bearer ' + NOTION_API_KEY,
'Notion-Version': NOTION_API_VERSION
},
payload: JSON.stringify(notionPayload)
};
UrlFetchApp.fetch('https://api.notion.com/v1/pages', options);
// 処理が終わったメールを既読にする(二重処理防止)
message.markRead();
} catch (e) {
console.error('Notionへの追加に失敗しました: ' + e.toString());
}
}
}
コードの中にあるconst searchQuery = 'subject:請求書 is:unread';の部分が、自動化の対象とするメールを絞り込むための検索条件です。ここを書き換えることで、「特定の差出人からのメール(from:xxxx@example.com)」や「特定のラベルが付いたメール(label:重要)」など、自由にカスタマイズできます。
Step5:トリガーを設定して全自動化する
最後の仕上げです。このプログラムを定期的に自動で実行するように設定します。
- スクリプトエディタの左側メニューから、時計のアイコン(トリガー)をクリックします。
- 右下の「+トリガーを追加」ボタンをクリックします。
- 以下の通りに設定します。
- 実行する関数を選択:
syncGmailToNotion - イベントのソースを選択:
時間主導型 - 時間ベースのトリガーのタイプを選択:
時間ベースのタイマー - 時間の間隔を選択(分):
10分おき(お好みで変更可能)
- 実行する関数を選択:
- 「保存」ボタンをクリックします。初回のみGoogleアカウントの承認を求められるので、画面の指示に従って許可してください。「このアプリは Google で確認されていません」という警告が出ることがありますが、「詳細」→「(プロジェクト名)に移動」をクリックして進めれば問題ありません。
以上で、すべての設定は完了です!お疲れ様でした。これからは10分ごとにプログラムがGmailをチェックし、条件に合うメールがあれば自動でNotionに登録してくれます。
まとめ:自動化で生まれた時間を、もっと創造的な仕事に
今回は、GmailとNotionを連携させ、面倒なメールの転記作業を自動化する仕組みを構築しました。一度設定してしまえば、あとはプログラムが24時間365日、あなたのために働いてくれます。これで、情報の見落としや入力ミスといった小さなストレスから解放され、空いた時間を事業の成長や新しいアイデアを考えるといった、より創造的な仕事に使えるようになります。今回の自動化がうまくいったら、次は「Googleフォームの回答を自動でスプレッドシートに記録し、Slackに通知する」といった、別の業務ハックに挑戦してみるのも面白いかもしれません。自動化の世界は、あなたのアイデア次第でどこまでも広がっていきますよ!
免責事項:本記事で紹介している手順やコードは、執筆時点での情報に基づいています。各サービスの仕様変更により、同様の手順で動作しない可能性があります。また、本チュートリアルの実行によって生じたいかなる損害についても、当方は一切の責任を負いかねます。ご自身の責任において、バックアップを取るなどの対策の上、実行してください。
