ChatGPTくんと相談しながら、Excel VBA + RSS2で発注処理作成


買いのアルゴ、トレイリングがほしい
自動売買で今のところやりたいのは、損切後、または、購入検討金額に達したときに、そこから出来るだけ底で買いたい(しゃれか(゚Д゚;))
売りは楽天証券でも、アルゴのトレイリングを使える。最近はほぼこれで利確している。
今のところ、急落時も売り抜けており、そこそこ使えている。
そこで、買いのアルゴ、トレイリングを提供しているところがあればいいな・・・と
最近、Youtubeやら、なんやらでchatGPTを使わないのは損とかの発言が目立つ。
そこで、ChatGPTを試しに使ってみる事にした。
ChatGPTくんに相談
私:株価、買いでトレイリングしたい。
ChatGPT:
株価の「買い」でトレイリングストップを使いたいということですね。以下、わかりやすく解説します。
✅ トレイリングストップとは?
- 買いポジションの利益を確保しつつ、損失を限定する注文方法。
- 株価が上がればストップ価格も連動して上がる。
- しかし、株価が下がった場合はストップ価格は下がらず、一定の距離(トレイル幅)を保ったまま利益を守る。
✅ 具体例(買いポジション)
- 株価が1000円の時に買い。
- トレイリングストップを「50円」に設定。
- 株価が1050円に上がれば、ストップ価格は1000円(1050円-50円)。
- 株価が1100円に上がれば、ストップ価格は1050円(1100円-50円)。
- その後、株価が下がってもストップ価格は1050円のまま。
- 株価が1050円以下に落ちたら、売却されて利益確定。
✅ 設定方法
証券会社や取引ツールによって違いますが、一般的な流れ:
1. 「逆指値(ストップ)」注文を選ぶ
- トレイリングストップは「逆指値」の応用。
2. 「トレイリング」または「追従型ストップ」を選ぶ
- 証券会社によって名称が違う:
- SBI証券 → トレール注文
- 楽天証券 → トレールストップ
- 松井証券 → トレーリングストップ
- 海外FX業者 → Trailing Stop
3. 「トレイル幅」を設定
- 株価から何円(または何%)離れた位置にストップを置くかを指定。
- 例)トレイル幅:50円
- 例)トレイル幅:5%
4. 「買いポジションの決済売り」として発注
- 利益確定&損失限定の目的。
✅ 注意点
- ボラティリティが高い銘柄はトレイル幅を広めに設定しないと、すぐにストップにかかる。
- 日中の値動きが激しいなら、%指定が便利。
長期保有なら「移動平均」などを使った方がいいケースもある
買いトレイルがあるか聞いてみる
ChatGPT:
ありがとうございます!楽天証券で「買いのトレイリング(追従買い)」をしたい場合ですね。スイング~長期ということで、押し目買い・ブレイクアウト買いのトレイリング戦略に近いイメージですね。
✅ 【楽天証券で「買いをトレイル」する現実的な方法】
⚠️楽天証券では「トレイリング買い注文」という機能は ありません。
- トレール注文は「売り」の利益確保用です。
- しかし、楽天証券の逆指値買いを使えば、手動でトレイリング買い風に運用できます。
✅ 【楽天証券でのやり方】
1. 逆指値買い注文を使う
- 「現在価格より高い価格になったら買う」という逆指値買いを使います。
2. トレイル風に水準を動かす
- 株価が下がり続ける間は、逆指値水準を徐々に下げていく(自分で動かす)
- 株価が反発に転じたら、逆指値にヒットして買いが成立する。
3. 実際の手順
楽天証券の「逆指値買い」は以下の手順で出せます:
- 【注文画面】 → 【新規買い注文】
- 【逆指値】を選択
- 【トリガー価格】を入力(例:1200円を超えたら買い)
- 【成行 or 指値】で買付方法を選ぶ
- 注文発注
✅ 【具体例】
- 現在株価 1000円
- 「戻り高値1050円を超えたら買いたい」
- → 逆指値買いで 1050円 をトリガーに設定
その後…
- 株価が下落して950円へ → トリガーを 1030円 に修正
- さらに下落して900円 → トリガーを 980円 に修正
- 反発して980円を超えたら自動で成行買い
🔽 → これを 「手動トレイリング買い」 として運用できます。
✅ 【スイング・長期で使える簡易トレイル戦略】
- 前回高値-○%下落でトリガーを更新
- 例)5%下落ごとに逆指値水準を切り下げる
- 移動平均線・トレンドラインを基準にトリガー更新
- 25日線 or 75日線超えで逆指値発動
✅ 【注意】
- 「逆指値買い」は指値や成行で発注できるが、楽天証券はリアルタイム自動トレール買いはできない。
- 毎日or定期的に逆指値水準を自分で更新する必要がある。
✅ 【まとめ】
目的 | 楽天証券でのやり方 |
株価が下落→反発→買いたい | 逆指値買いを使う |
下落中は逆指値ラインを少しずつ下げる | 手動で逆指値価格を更新(毎日・毎週チェック) |
自動でやりたい(将来的な対応) | TradingViewアラート+手動 or API連携の証券口座を検討 |
なるほど、私が普段しているやり方だ。
ということで、楽天では手動、逆指値買いしかないようだ。
自動売買ツールを作ろうと思っていると伝えると、フローをまとめてくれ、トリガー通知の提案までしてくれた。
あなた:
なるほど。やはりそうですね。 楽天RSSとVBAで自動化ツールを作っていますが、仕様にあれば使いたいと思いました。 基準値通知&逆差値がよさそうですね
ChatGPT:
まさにその通りです。
楽天証券では「楽天RSS + VBAでの自作トレイル買いロジック」が一番現実的な方法ですね。
✅ 【楽天RSS + VBA で作る「トレイル買い」戦略の考え方】
🔵 目的:
- 株価が一定基準を超えたら「買い」を発注
- 株価が下がる場合はトリガーラインを追従させて調整
- 楽天証券の逆指値買いと組み合わせて擬似トレイル買い
✅ 【おすすめ構成】
項目 | 内容 |
データ取得 | 楽天RSSで現在値、出来高、高値安値、前日比など取得 |
基準値設定 | 移動平均・前回高値・ボラティリティ幅等で基準値を決定 |
トリガー条件 | 「直近高値から-3%下落後、反転して+1%以上上昇で買い」 |
トレイル幅の自動調整 | 価格変動に合わせてトリガーラインを自動で切り下げる |
注文出力(シグナル) | 条件を満たしたら逆指値買い注文を発注(手動 or API風) |
通知 | LINE・メール・音声通知・エクセルポップアップ等 |
✅ 【イメージ図】
[取得データ] ← 楽天RSS
↓
[基準値計算] ← 高値・移動平均・ATR等
↓
[トレイルライン計算] ← 一定幅 or 変動幅で追従
↓
[逆指値トリガー判定]
↓
[買いシグナル通知] ← (手動発注 or 自動シート記録)
✅ 【VBAで書くなら】
- 株価が更新されるごとに
- 高値更新をチェック
- トレイルラインを再計算
- トリガーに達したらメッセージボックスやメール送信
- API連携はできないけど、逆指値注文用に数値を表示し、手動で発注
✅ 【基準値通知 & 逆指値運用の良さ】
- フルオート発注は難しくても、
「今ここで逆指値を出し直すべき」というシグナルを作るのは有効 - シンプルなルール(高値-●%、上昇トリガー+●%)ならVBAでも楽に実装可能
✅ 【応用編:トレンドフィルター】
誤発注を防ぐためのトレンドフィルター(地合い確認)も有効です
長期EMA(例:75日)や一目均衡表の雲抜け確認も加えると精度アップ
そしたらなんとサンプルコードまで提供してくれた
なんとサンプルコードまで提供してくれた。会社員時代に欲しい部下だ、いや同僚だ。
✅ 【やりたいこと】
- 楽天RSSで株価リアルタイム取得
- 高値を基準にトレイルラインを自動で計算
- トレイルラインを**下抜けたら「買いシグナル」**を表示
- シグナルが出たら「逆指値注文」用の価格を出力
✅ 【前提】
- Excelのシートで楽天RSSのリアルタイム株価を取得済み
- 例:セルB2 に「現在値」(=RSS関数で取得)
- 例:セルC2 に「銘柄名」や「コード」
✅ 【VBAサンプルコード】
Option Explicit
' 設定値(トレイル幅は3%)
Const TRAIL_RATE As Double = 0.03
Dim HighPrice As Double
Dim TrailLine As Double
Dim SignalGiven As Boolean
Sub InitializeTrail()
HighPrice = Range("B2").Value ' 現在値を初期高値とする
TrailLine = HighPrice * (1 - TRAIL_RATE)
SignalGiven = False
Range("D2").Value = "高値:" & HighPrice
Range("E2").Value = "トレイルライン:" & TrailLine
Range("F2").Value = "シグナル待機中"
End Sub
Sub CheckTrail()
Dim CurrentPrice As Double
CurrentPrice = Range("B2").Value
' 高値更新ならTrailLineを再計算
If CurrentPrice > HighPrice Then
HighPrice = CurrentPrice
TrailLine = HighPrice * (1 - TRAIL_RATE)
Range("D2").Value = "高値:" & HighPrice
Range("E2").Value = "トレイルライン:" & TrailLine
SignalGiven = False
End If
' トレイルライン上抜け判定
If (CurrentPrice >= TrailLine) And Not SignalGiven Then
Range("F2").Value = "買いシグナル発生! 逆指値:" & CurrentPrice + 5 ' 任意幅で逆指値
Beep ' 音で通知
SignalGiven = True
End If
End Sub
Sub AutoTrailMonitor()
' 1秒ごとにチェック(仮想ループ)
Dim NextTime As Double
InitializeTrail
Do
CheckTrail
DoEvents
NextTime = Now + TimeValue("00:00:01")
Application.Wait NextTime
Loop
End Sub
✅ 【動作説明】
シートセル | 内容 |
B2 | 現在値(楽天RSSでリアルタイム取得) |
D2 | 最高値の表示 |
E2 | トレイルライン(高値 - 3%) |
F2 | 買いシグナル発生時のメッセージ |
流れ:
- 【InitializeTrail】で現在値を基準に初期化
- 【AutoTrailMonitor】で1秒ごとに株価をチェック
- 高値更新でトレイルラインを更新
- 現在値がトレイルラインを超えたら「買いシグナル」
- 逆指値価格(例:+5円上)を表示
✅ 【カスタマイズ案】
- トレイル幅 → 3%を任意に変更
- 逆指値価格 → +5円だけでなく、ATR(平均的変動幅)ベースにする
- 移動平均フィルター → 25日線 or 75日線超え時だけ反応させる
- LINE通知 → API経由で通知機能も可能
✅ 【注意】
VBAはあくまで「買いシグナル生成&価格基準通知」用です。
実際の逆指値買い注文は楽天証券のウェブまたはアプリから手動発注が必要です。
実際動かしてみた。監視ループを止める手段がないので作りこむ
LINE通知連携版
その後、フローチャートとかも作ってくれ、最後にline通知の提案までしてくれた。頼んでもいないのに。
これはほかにも何かと役に立つのでは。しかし、chatGPT君、親切すぎる。ヤフー知恵袋の回答者に加えればいいのに。
で、提供してくれたLINE通知版
✅【応用編1】LINE通知連携版(逆指値シグナル時にLINEで通知)
■ 概要:
- シグナル発生時に 自分のLINEへ通知 を飛ばす
- GAS (Google Apps Script) や IFTTT Webhook を経由して実現
■ 仕組みフロー:
楽天RSS → VBAで監視 → シグナル発生
↓
VBAがWebhook(URL)を叩く
↓
IFTTT or Google Apps Script経由でLINE通知
■ 手順概要
ステップ | やること |
① | IFTTT で「Webhook → LINE通知」のレシピ作成 |
② | IFTTTの Webhook URL を取得 |
③ | VBAでそのURLを叩く(シグナル発生時) |
■ VBAでLINE通知するサンプルコード
Sub SendLINEMessage(Message As String)
Dim http As Object
Dim url As String
' 【自分のIFTTT Webhook URLに書き換える】
url = "https://maker.ifttt.com/trigger/stock_signal/with/key/xxxxxxx?value1=" & URLEncode(Message)
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", url, False
http.Send
End Sub
Function URLEncode(ByVal str As String) As String
Dim i As Long
Dim result As String
Dim c As String
For i = 1 To Len(str)
c = Mid(str, i, 1)
Select Case Asc(c)
Case 48 To 57, 65 To 90, 97 To 122
result = result & c
Case Else
result = result & "%" & Hex(Asc(c))
End Select
Next i
URLEncode = result
End Function
■ 使い方(シグナル時に追加するだけ)
If (CurrentPrice >= TrailLine) And Not SignalGiven Then
Range("F2").Value = "買いシグナル発生!"
Range("G2").Value = CurrentPrice + STOP_LIMIT_OFFSET
Beep
SignalGiven = True
' ここでLINE通知を飛ばす
Call SendLINEMessage("【シグナル】" & Range("B2").Value & " が買い反転! 逆指値:" & Range("G2").Value)
End If
ここでわからないことが。 【自分のIFTTT Webhook URLに書き換える】
chatGPTに聞いてみた
✅ 自分のIFTTT Webhook URLを確認する手順(2025年版)
① IFTTTにログイン
以下のリンクからログインします:
👉 https://ifttt.com
② Webhooksサービスにアクセス
以下のリンクをクリック:
👉 https://ifttt.com/maker_webhooks
③ Webhooksページを開いたら
- 「Connect」または「Settings」のボタンがあるのでクリック
- 一度 Connect(接続) すると、Webhookを使えるようになります
④ ドキュメントページに直接アクセス(おすすめ)
ドキュメントURLは以下です(要ログイン):
👉 https://ifttt.com/maker_webhooks/settings
ここにアクセスすると、以下のようなURLが表示されます:
rubyコピーする編集するhttps://maker.ifttt.com/trigger/{event_name}/with/key/xxxxxxxxxxxxxxxxxxxxx
この中の xxxxxxxxxxxxxxxxxxxxx
の部分があなたの個人用Webhookキーです。
ありました。
が、ところで、どうやって自分のLINEにメッセージを飛ばすの?これも聞いてみました。
ChatGPT:
とても良い質問です!SendLINEMessage
(などのイベント名)を Webhookで呼び出すだけでは自動的にLINE通知は届きません。
🔧 IFTTTでLINE通知を受け取るための全体の流れ
IFTTTで「Webhookを使ってLINEに通知を送る」には、以下のような構成が必要です:
✅ ステップ1:Webhookトリガーを使ったアプレットを作成する
「このイベント名(例:SendLINEMessage
)が呼ばれたら、LINEで通知を送る」というアプレット(ルール)を自分で作成します。
作成手順の概要:
- IFTTTにログイン
- 「Create(作成)」をクリック
If This
を選び、「Webhooks」を検索して選択Receive a web request
を選び、イベント名に「SendLINEMessage
」など任意の名前を入力Then That
を選び、「LINE」を検索して選択- 「Send message」などを選び、送信するメッセージを入力(例:「通知が届きました」)
✅ ステップ2:Webhookでイベントを呼び出す
Webhook URL 例:
rubyコピーする編集するhttps://maker.ifttt.com/trigger/SendLINEMessage/with/key/あなたのキー
このURLを、以下のいずれかの方法で呼び出せばOK:
- ブラウザでアクセス(GET)
- curlコマンドで実行
- プログラム(Pythonなど)からリクエスト
- 他のサービス(Node-REDやESP32など)から送信
✅ ステップ3:LINE連携しておく
IFTTTの「LINE」サービスがまだ接続されていない場合は、初回時にLINEログインが求められます。それにより、IFTTTがあなたのLINEアカウントに通知を送ることができるようになります。
言われたとおりにやりました。
が、いくつかうまくいかないところがありました。
① IFTTTのLINE登録で友達登録がされなかった ➡ 自分で@IFTTTを検索し、友達登録
② サンプルプログラムのGETメソドでうまく引数が理解されなかった。➡ POSTでの送信を薦められたのでPOSTで実装。引数はうまく渡った。
③ トークには、メッセージが表示されるが、スマホ側に通知が来ない ➡ こちらからもトークへメッセージを書き込み、しばらく時間がたってから実行すると通知がされた。
しかし、自分でWEBを調べていたら2,3日かかったのではないか。ChatGPTにはエラーの度に聞けるし、WEBのわかりにくいところをわかりやすく説明してくれる。
ちなみに以下は、POSTで送信するコードです。(動作確認済)
Sub TestSendLINEMessage()
Call SendIFTTTWebhookPost("【シグナル】" & Range("A3").Value & Range("B3").Value & " が買い反転! 逆指値:" & Range("G3").Value, "", "")
End Sub
Sub SendIFTTTWebhookPost(Msg1 As String, Msg2 As String, Msg3 As String)
Dim url As String
Dim http As Object
Dim json As String
url = "https://maker.ifttt.com/trigger/SendLINEMessage/with/key/xxxxxxxxxxxxxxxxxxx" ' xxxxx...はアプリキー
json = "{""value1"":""" & Msg1 & """,""value2"":""" & Msg2 & """,""value3"":""" & Msg3 & """}"
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", url, False
http.setRequestHeader "Content-Type", "application/json"
http.Send json
End Sub
✅【応用編2】多銘柄対応トレイリング買いテンプレート
■ 概要:
- 楽天RSSを複数銘柄で監視
- 各銘柄ごとにトレイル計算&シグナル判定
- 10銘柄くらいまで簡単対応
■ Excelイメージ(縦持ちリスト形式)
銘柄コード | 銘柄名 | 現在値 | 最高値 | トレイルライン | シグナル | 逆指値価格 |
7203 | トヨタ | RSS値 | 自動更新 | 自動更新 | 発生or待機 | 自動計算 |
9984 | ソフトバンク | RSS値 | 自動更新 | 自動更新 | 発生or待機 | 自動計算 |
... |
■ 多銘柄対応VBAサンプル
Sub MonitorMultipleStocks()
Dim lastRow As Long, i As Long
Dim currentPrice As Double, highPrice As Double, trailLine As Double
Dim signalGiven As Boolean
lastRow = Cells(Rows.Count, "A").End(xlUp).Row ' 銘柄リストの最終行
For i = 2 To lastRow
currentPrice = Cells(i, 3).Value
highPrice = Cells(i, 4).Value
' 初期高値設定
If highPrice = 0 Then
highPrice = currentPrice
Cells(i, 4).Value = highPrice
End If
' 高値更新チェック
If currentPrice > highPrice Then
highPrice = currentPrice
trailLine = highPrice * (1 - TRAIL_RATE)
Cells(i, 4).Value = highPrice
Cells(i, 5).Value = trailLine
Cells(i, 6).Value = "待機中"
Cells(i, 7).Value = ""
Else
trailLine = highPrice * (1 - TRAIL_RATE)
Cells(i, 5).Value = trailLine
End If
' シグナルチェック
If (currentPrice >= trailLine) And (Cells(i, 6).Value <> "発生") Then
Cells(i, 6).Value = "発生"
Cells(i, 7).Value = currentPrice + STOP_LIMIT_OFFSET
Beep
' LINE通知(任意で追加)
Call SendLINEMessage("【" & Cells(i, 2).Value & "】買いシグナル! 逆指値:" & Cells(i, 7).Value)
End If
Next i
End Sub
✅【応用編まとめ】
応用編 | 内容 | 難易度 |
LINE通知連携 | IFTTT連携でスマホに即通知 | ★★★☆☆ |
多銘柄トレイル対応 | 複数銘柄を同時監視・通知 | ★★★★☆ |
しかも10銘柄完全版はいかがですかときたもんだ
もちろん、もらっときましたよ。
✅【10銘柄対応VBA完成版】
📋 機能:
- 10銘柄を同時監視(楽天RSS経由)
- 銘柄ごとに最高値・トレイルライン更新
- シグナル発生で逆指値参考価格算出
- LINE通知(任意)
✅【VBAコード全文】
- 初期設定モジュール
Option Explicit
Const TRAIL_RATE As Double = 0.03
Const STOP_LIMIT_OFFSET As Double = 5
Sub InitializeTrailMulti()
Dim lastRow As Long, i As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
If Cells(i, 3).Value <> "" Then
Cells(i, 4).Value = Cells(i, 3).Value ' 最高値初期化
Cells(i, 5).Value = Cells(i, 3).Value * (1 - TRAIL_RATE) ' トレイルライン
Cells(i, 6).Value = "シグナル待機中"
Cells(i, 7).Value = ""
End If
Next i
MsgBox "トレイリング買い監視を開始します。", vbInformation
End Sub
- 監視ループモジュール
Sub MonitorTrailMulti()
Dim lastRow As Long, i As Long
Dim currentPrice As Double, highPrice As Double, trailLine As Double
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
currentPrice = Cells(i, 3).Value
If currentPrice = 0 Then
Cells(i, 6).Value = "データ未取得"
GoTo NextRow
End If
highPrice = Cells(i, 4).Value
' 高値更新
If currentPrice > highPrice Then
highPrice = currentPrice
trailLine = highPrice * (1 - TRAIL_RATE)
Cells(i, 4).Value = highPrice
Cells(i, 5).Value = trailLine
Cells(i, 6).Value = "シグナル待機中"
Cells(i, 7).Value = ""
Else
trailLine = highPrice * (1 - TRAIL_RATE)
Cells(i, 5).Value = trailLine
End If
' シグナル発生チェック
If (currentPrice >= trailLine) And (Cells(i, 6).Value <> "シグナル発生!") Then
Cells(i, 6).Value = "シグナル発生!"
Cells(i, 7).Value = currentPrice + STOP_LIMIT_OFFSET
Beep
' LINE通知(必要なら解除して使う)
'Call SendLINEMessage("【" & Cells(i, 2).Value & "】買いシグナル!逆指値:" & Cells(i, 7).Value)
End If
NextRow:
Next i
End Sub
- リアルタイム監視ループ
Sub StartTrailMonitorLoop()
Dim NextTime As Double
Call InitializeTrailMulti
Do
Call MonitorTrailMulti
DoEvents
NextTime = Now + TimeValue("00:00:01") ' 1秒ごと監視
Application.Wait NextTime
Loop
End Sub
- (オプション)LINE通知モジュール
Sub SendLINEMessage(Message As String)
Dim http As Object
Dim url As String
' ここに自分のIFTTT Webhook URLを入れる
url = "https://maker.ifttt.com/trigger/stock_signal/with/key/【自分のKey】?value1=" & URLEncode(Message)
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", url, False
http.Send
End Sub
Function URLEncode(ByVal str As String) As String
Dim i As Long, result As String, c As String
For i = 1 To Len(str)
c = Mid(str, i, 1)
Select Case Asc(c)
Case 48 To 57, 65 To 90, 97 To 122
result = result & c
Case Else
result = result & "%" & Hex(Asc(c))
End Select
Next i
URLEncode = result
End Function
✅【使い方】
StartTrailMonitorLoop を実行すれば監視スタート
Excelファイル(テンプレート)を開く
Alt + F11 → 上記コードを「標準モジュール」に貼り付け
私:まずはLINE通知版が正常に動作するかを検証してみる。
IFTTT以外のLine通知を試してみる
IFTTTは意外とすぐにできたので、LINE notify版に挑戦してみる。IFTTTは、1週間後課金されるからだ。
そしたら、Line notify版は意外と問題が多く、追加で提案してくれたDISCORD版を試してみた。
こちらは、結構すんなりと動作し、Line通知ではないが、スマホに通知できたのでこれで良しとする。
詳細は以下のブログで。
そしたら、自動発注API連動版(楽天証券API)まで提案してきた
ただし、古いAPIでの発注方法だったので、これは参照せず、最近のRSS2での発注方法を採用。これについては別ブログに記述している。
次のおすすめ
✅【次のおすすめ】
✅ 全自動売買戦略:ATRトレール版・移動平均クロス版
✅ OCO利確+逆指値自動更新版(OCO再設定型トレール利確)
✅ Pythonで楽天API BOT化(Excelレス)
をお薦めされたが、もうおなかいっぱいなので、これまでのを検証してから取り掛かります。
しかし、ChatGPT。いいのかこんなにサービスして。
最後に
今回、一番ひっかかったのはLINE公認によるLINE通知。
一番簡単だと思っていたのが一番難しかった。
内容的にも、通知受信用のサーバー建てるだとか、技術者にしかわからないような専門用語が出てきて自力で読み解いて実装するのは、未経験者にはきつい。
このへん、ChatGPTに聞きながらやると、わからない言葉とかの説明を聞きながらできるのでストレスもたまらない。