お仕事おつにゃッス🐈
文系未経験から社内SEになった、あっきょ(@daily_code_JP)です!
あなたが持っている日本株の終値をアプリを開いて仕事中に確認するのは、面倒くさいですよね?
この記事ではそのお悩みを、コピペOKのGoogle Apps Scriptのコードで解決します。

- もっと簡単に日本株の管理をしたい
- 手間を省きたい
- プログラミングでJavaScriptを学んだけど、何を作っていいかわからない
誰でも無料で簡単にできますので、お気軽に学んでいきましょう!
株価予想を学べるプログラミングスクール3選
DMM WEBCAMPは未経験者向けプログラミングスクールでNo.1。
- 経験豊富な現役エンジニアが講師
- 自己調整学習理論で即戦力
- データサイエンスコースで株価予測を実践的に経験
実務でも使えるスキルを身に着けたい人におすすめです。
Aidemyは社会人が選ぶDX人材育成サービスNo.1の実績。
- 受講料70%オフの教育給付金対象講座
- 運営企業は東証グロース上場
- データ分析講座で株価予想を学習
AIや機械学習も専門的に学ぶならおすすめです。
タップできる目次
LINEに株価を通知する完成イメージ

GASとスプレッドシートで、LINEに日本株の終値を15時30分に通知するアプリを作成。
あなたがサラリーマンなら、仕事途中でも株価が気になって作業に集中できない時もあるでしょう。
そこで、LINEの通知で終値をチラッと確認できるツールを作成します。
この記事で例に出した銘柄はあくまで例です。運営者が保有もしくは売買を推奨している株式ではありません。
日本株を取得してLINEに通知する方法

GASで日本株を取得するには、「スクレイピング」というWeb上のデータを自動取得する技術を使います。
取得後に読みやすいデータを加工した後、LINEに通知します。
このアプリは米国株版を応用して作成。
詳細はこちら。
【注意】アプリ作成の難易度は高め

注意しなければならないのは、このアプリの開発難易度は比較的高め。
理由は4つの技術を混ぜ合わせて開発するためです。
使う技術 | |
現在の日付を取得 | Dateオブジェクトを使ってリアルタイムで日付を取得 |
スクレイピング | Web上の文字を自動で取得して株価を取得 |
LINE Notify の使用 | 無料かつ自動でLINEに株価を通知 |
トリガーの作成 | 任意のタイミングでコードを実行するトリガーを作成 |
デイコーではコピペで試せるように開発しており基本的には問題ありません。
しかし、コードの動きを一から見る場合はプログラミングの基礎的な知識が必要です。
LINEから株価を取得する準備
GASから米国株の情報を毎朝ラインに送信する準備をします。準備物は2つ必要です。
必要なファイル
- Google スプレッドシート ・・・ 株式データの保存 & GASのプログラムの実行
- LINE Notify ・・・ GASから株価を受信
LINE Notify の登録
LINE Notify のサイトにアクセスし、緑色のバーの「ログイン」をクリック。

LINEに登録している自身のメールアドレスとパスワードを入力。

ログイン後にトップページに戻るので、ユーザー名をクリックして「マイページ」を選びます。

ページ下部の「トークンを発行する」をクリックします。

トークン名とトークルームを決めます。
トークン名を「test」、トークルームは「1:1でLINE Notifyから通知を受け取る」を選択。
「発行する」をクリックします。

トークンが発行されます。
画面を閉じるとトークンを二度と発行できないので必ずメモ。
LINE Notify の登録は以上です。

Google スプレッドシートの準備
日本株の管理をするシートを作成します。
「コード」と「会社名」の2項目を設定します。

シート名を「日本株」に変更します。
Google スプレッドシートの設定は以上です。

LINEに日本株の終値を通知するサンプルコード
Google Apps Scriptで日本株の終値をLINEに通知するサンプルコードの公開と解説します。
サンプルコード
右上にあるマークを押すとコードのコピペが一瞬でできます。
コード内で文頭にアルファベットが付いているコメントごとに、詳細を説明していきます。
//A, 当日の日付を取得
const today = new Date();
const monthNum = (today.getMonth())+1; //月
const dateNum = today.getDate(); //日
const day = today.getDay(); //曜日
const thisDate = monthNum + "月" + dateNum + "日";
const thisDay = ['日','月','火','水','木','金','土'];
//B,スクレイピングで本日の終値を取得
function getPrice(code){
let url = "https://www.google.com/finance/quote/" + code + ":TYO";
const html = UrlFetchApp.fetch(url).getContentText();
let stockPrice = Parser.data(html)
.from('<div class="YMlKec fxKbKc">')
.to("</div>")
.build(); //スクレイピングで終値を取得
return stockPrice.replace("¥","").replace(",",""); //文字列を数字に変換
}
//C,スクレイピングで前日の終値を取得
function beforePrice(code){
let url = "https://www.google.com/finance/quote/" + code + ":TYO";
const html = UrlFetchApp.fetch(url).getContentText();
let stockArray = Parser.data(html)
.from('<div class="P6K39c">')
.to("</div>")
.iterate(); //スクレイピングで配列を取得
const beforePrice = stockArray[0]; //取得した配列内の1番目の要素が前日の終値
return beforePrice.replace("¥","").replace(",",""); //文字列を数字に変換
}
//D, LINEに日本株の終値を通知
function sendMessage(){
//LINEに送信するトークンの設定
const LINE_NOTIFY_TOKEN = "LINE Notifyで発行したトークン";
const LINE_NOTIFY_API = "https://notify-api.line.me/api/notify";
//操作するスプレッドシートの定義
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const listSheet = spreadSheet.getSheetByName('日本株');
const lastRow = listSheet.getLastRow();
let stockList = ""; //スプレッドシート上に登録している銘柄情報を取得
let message = ""; //LINEに送信する文章を挿入
//登録した個別株のデータを取得し、LINEに送信する文章を作成
for(var i=2; i<=lastRow; i++){
const stockCode = listSheet.getRange(i,1).getValue(); //証券コード
const stockName = listSheet.getRange(i,2).getValue(); //企業名
const todayPrice = getPrice(stockCode); //今日の終値
const yestPrice = beforePrice(stockCode); //昨日の終値
let resultPrice = Math.round(((todayPrice - yestPrice) * 100) / 100); //今日の終値 - 昨日の終値
//当日の終値が前日の終値より高ければ、文字列の「+」を追加
if(resultPrice > 0){
resultPrice = "+" + String(resultPrice);
}
//LINEに送信する文章を作成
stockList +="【銘柄名】" + stockName + "(" + stockCode + ")"
+ "\n【終 値】" + todayPrice + "(" + resultPrice + ")\n"
+ "-------------------------------\n";
}
//LINEに送信する文章を決定
if(stockList == "" || stockList == null){
message = "\n個別に登録されている銘柄はありません。";
}else{
message = "\n" + thisDate + "(" + thisDay[day] + ")" + "の個別株の動きです。\n\n" + stockList;
}
//LINEに送信
const token = LINE_NOTIFY_TOKEN;
var options =
{
"method" : "post",
"payload" : "message=" + message,
"headers" : {"Authorization" : "Bearer "+ token}
};
UrlFetchApp.fetch(LINE_NOTIFY_API, options); //フェッチ通信でLINEに送信
setTrigger(); //翌日分のトリガーを作成
}
//E,翌日分のトリガーを作成
function setTrigger(){
//G,トリガーを実行する時間を指定
today.setDate(today.getDate() + 1); //翌日
today.setHours(15); //時
today.setMinutes(30); //分
today.setSeconds(0); //秒
ScriptApp.newTrigger('sendMessage').timeBased().at(today).create();
}
A, 当日の日付を取得
//A, 当日の日付を取得
const today = new Date();
const monthNum = (today.getMonth())+1; //月
const dateNum = today.getDate(); //日
const day = today.getDay(); //曜日
const thisDate = monthNum + "月" + dateNum + "日";
const thisDay = ['日','月','火','水','木','金','土'];
Dateオブジェクトでインスタンスを作成して当日の日付を取得。
日付を取得する方法の詳細はこちらから。
-
【入門】GASで当日の日付を「年月日」で取得
続きを見る
B, スクレイピングで本日の終値を取得
//D,スクレイピングで本日の終値を取得
function getPrice(code){
let url = "https://www.google.com/finance/quote/" + code + ":TYO";
const html = UrlFetchApp.fetch(url).getContentText();
let stockPrice = Parser.data(html)
.from('<div class="YMlKec fxKbKc">')
.to("</div>")
.build(); //スクレイピングで終値を取得
return stockPrice.replace("¥","").replace(",",""); //文字列を数字に変換
}
スクレイピングを行って本日の終値を取得する関数。
返り値で2回もreplaceメソッドを使うのは、取得した文字列を数字に変換するためです。
GASでスクレイピングして株価を取得する方法の詳細はこちら。
-
【便利】GASで日本の個別株の株価を取得する方法
続きを見る
C, スクレイピングで前日の終値を取得
//E,スクレイピングで前日の終値を取得
function beforePrice(code){
let url = "https://www.google.com/finance/quote/" + code + ":TYO";
const html = UrlFetchApp.fetch(url).getContentText();
let stockArray = Parser.data(html)
.from('<div class="P6K39c">')
.to("</div>")
.iterate(); //スクレイピングで配列を取得
const beforePrice = stockArray[0]; //取得した配列内の1番目の要素が前日の終値
return beforePrice.replace("¥","").replace(",",""); //文字列を数字に変換
}
スクレイピングで前日の終値を取得する関数です。
当日の終値の取得とは異なり、配列から前日の終値を取得。
配列の1番目の要素に前日の終値のデータがあるので、取り出して返り値として送ります。
D, LINEに日本株の終値を通知
//B, LINEに日本株の終値を通知
function sendMessage(){
//LINEに送信するトークンの設定
const LINE_NOTIFY_TOKEN = "LINE Notifyで発行したトークン";
const LINE_NOTIFY_API = "https://notify-api.line.me/api/notify";
//操作するスプレッドシートの定義
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const listSheet = spreadSheet.getSheetByName('日本株');
const lastRow = listSheet.getLastRow();
let stockList = ""; //スプレッドシート上に登録している銘柄情報を取得
let message = ""; //LINEに送信する文章を挿入
//登録した個別株のデータを取得し、LINEに送信する文章を作成
for(var i=2; i<=lastRow; i++){
const stockCode = listSheet.getRange(i,1).getValue(); //証券コード
const stockName = listSheet.getRange(i,2).getValue(); //企業名
const todayPrice = getPrice(stockCode); //今日の終値
const yestPrice = beforePrice(stockCode); //昨日の終値
let resultPrice = Math.round(((todayPrice - yestPrice) * 100) / 100); //今日の終値 - 昨日の終値
//当日の終値が前日の終値より高ければ、文字列の「+」を追加
if(resultPrice > 0){
resultPrice = "+" + String(resultPrice);
}
//LINEに送信する文章を作成
stockList +="【銘柄名】" + stockName + "(" + stockCode + ")"
+ "\n【終 値】" + todayPrice + "(" + resultPrice + ")\n"
+ "-------------------------------\n";
}
//LINEに送信する文章を決定
if(stockList == "" || stockList == null){
message = "\n個別に登録されている銘柄はありません。";
}else{
message = "\n" + thisDate + "(" + thisDay[day] + ")" + "の個別株の動きです。\n\n" + stockList;
}
//LINEに送信
var options =
{
"method" : "post", //POSTメソッドで通信
"payload" : "message=" + message, //送信するメッセージ
"headers" : {"Authorization" : "Bearer "+ LINE_NOTIFY_TOKEN}
};
UrlFetchApp.fetch(LINE_NOTIFY_API, options); //フェッチ通信でLINEに送信
setTrigger(); //翌日分のトリガーを作成
}
スクレイピングした日本株の終値を取得してLINEに送信する関数です。
定数 LINE_NOTIFY_TOKEN内にはコピーしたトークンに書き換えます。
コードの内容は米国株の終値をLINEで送信を参考にしています。
ほとんど変わりませんが、変更点は以下の3つ。
- 今日の終値をgetPrice関数から取得
- 昨日の終値をbeforePrice関数から取得
- 当日の終値が前日の終値より高ければ、文字列の「+」を追加
それ以外はすべて同じです。
米国株の株価をLINEで取得する詳細はこちら。
-
【便利】GASで米国株の1日の値動きをLINEに毎朝通知
続きを見る
E, 翌日分のトリガーを作成
//C,翌日分のトリガーを作成
function setTrigger(){
//G,トリガーを実行する時間を指定
today.setDate(today.getDate() + 1); //翌日
today.setHours(15); //時
today.setMinutes(30); //分
today.setSeconds(0); //秒
ScriptApp.newTrigger('sendMessage').timeBased().at(today).create();
}
翌日分のトリガーを作成します。
翌日の15時30分にLINEに日本株の終値を通知するsendMessage関数を実行するトリガーを作成。
コードの説明は以上です。
LINEに株価を通知するテスト
GASからラインに株価を送信できるかテストしてみましょう。
赤丸で囲っている文字が「sendMessage」なのを確認して左側の「実行」を押します。

「このアプリはGoogleで確認されていません」と表示した場合はこちら。
-
【3分で解決】GASの「このアプリはGoogleで確認されていません」を許可する方法
続きを見る
LINEを確かめてみましょう。
「LINE Notify」からメッセージが届いていれば成功です。

希望した時間に通知が来ない時の対処法
時間がずれて、希望した時刻に処理できない場合は以下の記事をクリック。
-
【3分で解決】GASで出力した時間がずれたときにタイムゾーンを変更する方法
続きを見る
株価を予想するアプリを作れるプログラミングスクール3選
プログラミングで株価を予測するスキルが身に付くスクールを3つ紹介。
というのも、プログラミング独学の挫折率は60%近くと高め。
エラーを解決できなかったり相談できる人がいなかったりと理由はさまざまです。
モチベを保てる環境を整えたのがスクールで挫折率を1割未満に抑えられます。
そこで、デイコーで調査した82社から厳選して解説します。

- DMM WEBCAMP | 現役エンジニアが学習サポート
- デイトラ | 業界最安値級
- Aidemy | 東証グロースに上場
DMM WEBCAMP | 現役エンジニアが学習サポート

おすすめコース | データサイエンスコース |
受講料(税込) | 169,800円~ |
分割払い | 14,900円~ |
受講形式 |
|
強み |
|
DMM WEBCAMPはIT企業大手のDMM.comが運営するプログラミングスクール。
経験豊富な現役エンジニアがあなたの学習をサポートします。
- 週2回のオンラインメンタリング
- 24時間いつでもOKのチャットサポート
- 無制限で受けられるレビュー
自己調整学習理論にもとづく独自メソッドで即戦力のスキルが身に付きます。
データサイエンスコースでは、Pythonを用いて機械学習を学習。
株価データをモデリングと予測を実践的に経験していきます。

デイトラ | 業界最安値級

おすすめコース | データ分析講座 |
受講料(税込) | 79,800円~ | 受講形式 |
|
強み |
|
デイトラは業界最安値級で学べるオンラインスクール。
未経験者でも挫折しないで勉強できるサポートが充実しています。
- 1年間の長期間サポート
- 閲覧無制限&アップデートされるカリキュラム
- 現役プロに質問や作品のフィードバック
Pythonコースでは、Djangoというフレームワークを使ってオリジナルアプリを開発。
株価予想アプリやYoutube人気動画分析アプリなど幅広く作成します。
プログラミングの基礎基本も学ぶので初心者でも安心です。
Aidemy | 東証グロースに上場

おすすめコース | データ分析講座 |
受講料(税込) | 528,000円~ |
給付金適応後(70%オフ) | 158,400円~ |
分割払い(36回) | 18,024円~ |
受講形式 |
|
強み |
|
AidemyはDX時代の新スキルを基礎から学ぶ Python 特化型のプログラミングスクール。
初心者にとって難しい内容でも挫折しないで学べる環境が整っています。
- 仲間と学べるバーチャル学習室
- チャットで質問し放題
- 講師のコードレビュー
- 1回25分のオンラインカウンセリング
- オリジナルのポートフォリオ作成支援
転職サポートもあるので、未経験からエンジニアも目指せます。
データ分析講座では、Pythonを利用してデータを分析するスキルを習得。
自然言語処理と時系列分析を用いて株価の予測を行います。
最新技術で一歩先を目指すビジネスマンにおすすめです。

おわりに | GASで株式の管理を楽に!
以上、Google Apps Script で LINEに日本株の1日の値動きを毎日通知する方法でした。
そのままコピペしたり株式管理に使ったりしてみましょう。
今回紹介したサンプルコード以外にも、GASで株式の管理をすることは可能。
-
S&P500の値動きをスプレッドシートで自動取得
続きを見る
-
【1行だけ】スプレッドシートで米国株の損益を自動更新
続きを見る
-
【便利】GASで日本の個別株の株価を取得する方法
続きを見る
ヒューマンエラーが起きやすく時間がかかる作業をGASに任せましょう。
不明点やスクール選びで悩んでいるならデイコーのお問い合わせまでご連絡を。
あなたのお力になります。