柴田AIクン、スプシの変更とかさ、そういうのLINEで通知してほしいな



できますよー、公式LINEとユーザーIDがわかればOKですヨー



じゃあ教えておくれ、お願いします!
Google Apps Script(GAS)とLINE Messaging APIを組み合わせると、スプレッドシートの変化や定期的なイベントをLINEに通知する仕組みを作ることができます。
売上やフォームの回答通知、在庫アラート、定期レポートの送信など、「何かのタイミングで自動的にLINEに飛ばしたい」という場面で使える汎用的なパターンです。
この記事ではn8nと組み合わせたX自動投稿の通知機能を例に、実装手順を解説します。
事前準備:LINE Messaging APIの設定
LINE Developersにアクセスして、Messaging APIチャンネルを作成します。






作成後に以下の2つを取得しておきます。
チャンネルアクセストークン チャンネル設定の「Messaging API設定」タブの下部にある「チャンネルアクセストークン」から発行できます。
送信先のユーザーID 通知を送りたいLINEアカウントのユーザーIDです。自分自身に送る場合、公式LINEを通してこのユーザーIDへ通知を飛ばします。



ただ、このユーザーIDを取得するのが結構面倒でした
送信先のユーザーIDの確認
LINE Messaging APIでPush通知を送るには、送り先のユーザーID(Uから始まる32文字)が必要です。
ユーザーIDはLINE DevelopersコンソールやLINE Official Account Managerの画面には表示されません。自分のLINEからボットにメッセージを送り、Webhookで受け取ることで取得します。
事前準備
以下が済んでいることを確認してください。
- LINE公式アカウントの作成済み(manager.line.biz)
- Messaging APIの有効化済み
- チャンネルアクセストークンの発行済み



公式ラインの作成はこの取得の流れの中でもできますが、あらかじめ作っておいた方が楽チンです。特に使う予定がない人でも、公式ラインって簡単に作れますよ!
Googleドライブで新しいスプレッドシートを作成します。名前は「LINE ID取得用」など何でもOKです。
作成したらURLを確認します。
https://docs.google.com/spreadsheets/d/〇〇〇/edit
この 〇〇〇 の部分がスプレッドシートIDです。次のステップで使うのでメモしておきます。
script.google.com を開き、「新しいプロジェクト」を作成します。プロジェクト名は LINE-webhook-test など何でもOKです。


以下のコードをまるごと貼り付けます。スプレッドシートID の部分をSTEP 1でメモしたIDに置き換えてください。
function doGet(e) {
return ContentService.createTextOutput(JSON.stringify({ status: "ok" }))
.setMimeType(ContentService.MimeType.JSON);
}
function doPost(e) {
const json = JSON.parse(e.postData.contents);
const events = json.events;
if (events.length > 0) {
const userId = events[0].source.userId;
// スプシにuserIdを書き出す
const sheet = SpreadsheetApp.openById("スプレッドシートID").getActiveSheet();
sheet.appendRow([new Date(), userId]);
}
return ContentService.createTextOutput(JSON.stringify({ status: "ok" }))
.setMimeType(ContentService.MimeType.JSON);
}- 右上「デプロイ」→「新しいデプロイ」
- 種類:ウェブアプリを選択
- 次のユーザーとして実行:自分
- アクセスできるユーザー:全員
- 「デプロイ」→ 表示されたURLをコピー
LINE Developersコンソール(developers.line.biz)を開きます。
- 該当チャンネル →「Messaging API設定」タブ
- 「Webhook URL」欄にSTEP 3でコピーしたURLを貼り付けて保存
- 「Webhookの利用」トグルをオンにする(忘れると動きません)
- 「検証」ボタンを押す





検証ボタンでエラーが出ても気にしなくてOKです
「302 Found」エラーが表示される場合がありますが無視してOKです。 これはLINEの検証リクエストの仕様によるもので、実際のメッセージ受信には影響しません。
スマホのLINEで作成した公式アカウントを友だち追加し、トークルームに「test」など何か一言送ります。
STEP 1で作成したスプレッドシートを開くと、以下のように記録されています。
| A列 | B列 |
|---|---|
| 2026/06/19 9:51:27 | U34… |
B列の U から始まる文字列がユーザーIDです。メモしておきます。
取得後の後片付け
ユーザーIDが取得できたらこのGASプロジェクトは不要です。LINE DevelopersコンソールのWebhook URLは、次のステップで本実装のGASのURLに貼り直します。



…長かった。随所でエラーとも戦いました。皆さんも気長に取得していきましょう。
GASの実装
LINEへ通知する仕組みはスプレッドシートのGASで実装します。
GASを仕込むスプシは、コチラの記事で作ったAIで生成した投稿を書き込むスプシでOKです。



ですので、先にAIで投稿を生成してスプシに出力する仕組みを作っておいた方が流れはいいかもしれません。
この方法は「スプシの変更」→「LINEに自動通知」なので応用範囲が広いと思います。
もし「この仕組みだけ仕込みたい」という人は新たにスプシだけ作成してください。



もし質問があったら公式ラインに登録してチャットからよろしく
全体のGASコード
全体のGASコードです。
このあとXに投稿していいかどうか?という承認フェーズをWebアプリで行うので、messageの中にwebAppUrlを入れています。が、そこまでしなくていいというときは、このあたりの通知メッセージをご自由に書き換えてください。



このWebアプリの仕組みはコチラの記事で紹介しています
const LINE_TOKEN = 'YOUR_LINE_TOKEN';
const USER_ID = 'YOUR_LINE_USER_ID';
const SHEET_NAME = 'シート1';
function notifyNewTweets() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
const rows = sheet.getDataRange().getValues();
rows.forEach((row, index) => {
if (index === 0) return;
const status = row[2];
const tweetText = row[1];
const rowNumber = index + 1;
if (status === '下書き') {
sendLineMessage(tweetText, rowNumber);
sheet.getRange(rowNumber, 3).setValue('通知済み');
}
});
}
function sendLineMessage(tweetText, rowNumber) {
const webAppUrl = ScriptApp.getService().getUrl();
const message = `【X投稿の確認依頼】\n\n${tweetText}\n\n👇 こちらから操作してください\n${webAppUrl}`;
const payload = {
to: USER_ID,
messages: [{
type: 'text',
text: message
}]
};
UrlFetchApp.fetch('https://api.line.me/v2/bot/message/push', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + LINE_TOKEN
},
payload: JSON.stringify(payload)
});
}


コードの概要はこんな感じです
notifyNewTweets()で「下書き」のツイートをチェック
↓
この中でsendLineMessage(tweetText, rowNumber)を呼び出して、実際に公式ラインの自分のチャットにLINE通知する
↓
notifyNewTweets()で同時に「通知済み」にする
トリガーで自動実行する
関数を手動実行するのではなく、GASのトリガーを使って定期的に自動実行できます。
GASエディタの左メニューから「トリガー」を開いて、右下の「トリガーを追加」をクリックします。


設定はこんな感じです。
- 実行する関数:
notifyNewTweets - イベントのソース:時間主導型
- 時間ベースのトリガーのタイプ:時間ベースのタイマー
- 時間の間隔:1時間おき
これでスプレッドシートに新しい「下書き」行が追加されると、最大1時間以内にLINEに通知が届くようになります。間隔は用途に合わせて変更してください。
まとめ
GAS+LINE Messaging APIの通知は、sendLineMessage 関数を作ってしまえばあとはシンプルです。
スプレッドシートの監視ロジックと組み合わせる部分も、条件の列番号とステータス名を変えるだけでいろいろな場面に使い回せます。
WebアプリUIと組み合わせると「LINEで通知を受け取って、ブラウザで操作する」という流れを作ることができます。UIの作り方は前の記事で解説しています。










