見出し画像

コピペするだけ!簡単「就寝時間ナビ」

暑さに低気圧に、何かと体力が奪われる季節ですね。

水分や塩分の補給はもちろんのこと、できる限り快適な睡眠環境も確保したいところです。

睡眠のサイクルを考えて~と思わないでもないのですが、現実問題なかなか理想通りには行きません。

でも、何時に起きるには?からの目安くらいぱっとわかるようにはしておきたいのです。

それでは、作っていきます!


読ませて頂いた記事をマガジンに追加させて頂いております。

伺った際にはマガジンへの登録をさせて頂いていきますが、それはやめてほしいなどありましたら、DM / コメントで一言頂けましたら幸いです😊


ブックマークに置いとくだけ!

コピペするだけの簡単小道具!

Geminiで簡単!ツール作成!

一発作成プロンプトも紹介!


睡眠時間のサイクルを考慮して寝るなんてできてないんだけど、ちゃんと考慮したらスッキリ起きられるものなのかしら?
現実問題、理想的な時間に寝て起きるなんて難しいけど、ちょっと作ってみてほしい。
Geminiさん、さっそく作る。


入眠時間と!

起床時間から!

何時に寝たら丁度良いのかを逆算!

今すぐ寝た場合のお勧め起床時間目安も計算!


💡 睡眠のサイクルってどうなってるの?

一般的に睡眠は、深い眠りの「ノンレム睡眠」と、浅い眠り(夢を見やすい時間)の「レム睡眠」を繰り返しています。

1回のサイクルは約90分前後といわれることが多く、この周期の終わりに近いタイミングで目覚めると、比較的すっきり起きやすいとされています。

そのため、睡眠時間の目安としては

  • 😴 理想:7時間30分(約90分×5サイクル)

  • 💤 短め:6時間(約90分×4サイクル)

  • 最低限:4時間30分(約90分×3サイクル)

などがよく参考にされています。

ただし、布団に入ってから眠りにつくまでの「入眠時間(平均15〜20分程度)」や、睡眠サイクルの長さには個人差があります。

また、その日の体調や疲れ具合によっても変化するため、あくまで目安として活用するのがおすすめです。

ちなみに私自身は15~20分で眠りにつくなんて無理です😂


🛠️ 使い方(スマホ版)

1. 適当なページをブックマークする

まずは、今見ているこのページなど、何でもいいので一度ブックマークに登録します。

2. 「編集」を開く

ブックマークバーにある今作ったブックマークを長押しして、「編集」を選択します。

3. 内容を書き換える

表示された設定画面で、以下の2箇所を変更して保存します。

  • 名前: (自分が分かりやすい名前)

  • URL: もともと入っているURLをすべて消して、コードを貼り付ける

ブックマークを押すだけ簡単!


📋これを貼ります!

javascript:void((function(){  function formatTime(date) {    var h = date.getHours();    var m = date.getMinutes();    var hStr = h < 10 ? "0" + h : "" + h;    var mStr = m < 10 ? "0" + m : "" + m;    return hStr + ":" + mStr;  }  function addMinutes(date, mins) {    return new Date(date.getTime() + mins * 60000);  }  function formatDiff(diffMins) {    if (diffMins < 0) {      return "間に合いません";    }    var h = Math.floor(diffMins / 60);    var m = diffMins % 60;    if (h === 0) {      return "あと " + m + "分";    }    return "あと " + h + "時間" + m + "分";  }  function parseWakeInput(input) {    if (!input) {      return null;    }    var str = input.replace(/\s+/g, "");    if (str === "") {      return null;    }    var h = 0;    var m = 0;    if (str.indexOf(":") !== -1) {      var parts = str.split(":");      h = parseInt(parts[0], 10);      m = parseInt(parts[1], 10);    } else if (str.length === 3) {      h = parseInt(str.substring(0, 1), 10);      m = parseInt(str.substring(1, 3), 10);    } else if (str.length === 4) {      h = parseInt(str.substring(0, 2), 10);      m = parseInt(str.substring(2, 4), 10);    } else {      h = parseInt(str, 10);      m = 0;    }    if (isNaN(h) || isNaN(m) || h < 0 || h > 23 || m < 0 || m > 59) {      return null;    }    return { h: h, m: m };  }  var now = new Date();  var latencyInput = prompt("入眠時間(分)\n(布団に入ってから眠るまで)", "15");  var latency = parseInt(latencyInput, 10);  if (isNaN(latency) || latency < 0) {    latency = 15;  }  var wakeInput = prompt("目標の起床時間\n(例: 7, 07:00, 7:30, 730 / 空欄で『今すぐ就寝』)", "07:00");  var parsedWake = parseWakeInput(wakeInput);  if (!parsedWake) {    var sleepTime = addMinutes(now, latency);    var wake45 = addMinutes(sleepTime, 270);    var wake60 = addMinutes(sleepTime, 360);    var wake75 = addMinutes(sleepTime, 450);    var wake90 = addMinutes(sleepTime, 540);    var msgNow = "😴 今すぐ就寝モード 😴\n\n";    msgNow += "今(" + formatTime(now) + ")布団に入った場合の起床時刻:\n";    msgNow += " △ " + formatTime(wake45) + " (4.5h) / ○ " + formatTime(wake60) + " (6.0h)\n";    msgNow += " ◎ " + formatTime(wake75) + " (7.5h) / ○ " + formatTime(wake90) + " (9.0h)\n\n";    msgNow += "※" + latency + "分後の入眠を前提としています\n";    msgNow += "※90分周期は目安です(個人差あり)";    alert(msgNow);    return;  }  var targetWake = new Date(now.getFullYear(), now.getMonth(), now.getDate(), parsedWake.h, parsedWake.m, 0);  if (targetWake.getTime() <= now.getTime()) {    targetWake = addMinutes(targetWake, 1440);  }  var bed75 = addMinutes(targetWake, -(450 + latency));  var bed90 = addMinutes(targetWake, -(540 + latency));  var bed60 = addMinutes(targetWake, -(360 + latency));  var bed45 = addMinutes(targetWake, -(270 + latency));  var diff75 = Math.floor((bed75.getTime() - now.getTime()) / 60000);  var diff90 = Math.floor((bed90.getTime() - now.getTime()) / 60000);  var diff60 = Math.floor((bed60.getTime() - now.getTime()) / 60000);  var diff45 = Math.floor((bed45.getTime() - now.getTime()) / 60000);  var mainBed = bed75;  var mainDiff = diff75;  var statusText = "🟢 理想コース";  var sleepLengthText = "7時間30分";  var extraNote = "";  if (diff75 < 0) {    if (diff60 >= 0) {      mainBed = bed60;      mainDiff = diff60;      statusText = "🟡 6h確保コース";      sleepLengthText = "6時間00分";    } else {      mainBed = bed45;      mainDiff = diff45;      statusText = "🚨 睡眠不足コース";      sleepLengthText = "4時間30分";      extraNote = "(明日昼寝推奨)";    }  }  var msg1 = "😴 今夜やること 😴\n\n";  msg1 += "👉 " + formatTime(mainBed) + " までに布団へ!" + extraNote + "\n";  msg1 += "   (" + formatDiff(mainDiff) + ")\n\n";  msg1 += "判定: " + statusText + "\n";  msg1 += "(目標 " + formatTime(targetWake) + " 起床 / 睡眠 " + sleepLengthText + ")";  alert(msg1);  if (confirm("📊 全比較・今すぐ寝た場合の起床時刻も見ますか?")) {    var sleepNow = addMinutes(now, latency);    var nowWake45 = addMinutes(sleepNow, 270);    var nowWake60 = addMinutes(sleepNow, 360);    var nowWake75 = addMinutes(sleepNow, 450);    var nowWake90 = addMinutes(sleepNow, 540);    var msg2 = "📊 就寝時刻の全候補\n";    msg2 += " ◎ 理想 : " + formatTime(bed75) + " (" + formatDiff(diff75) + ")\n";    msg2 += " ○ 9.0h : " + formatTime(bed90) + " (" + formatDiff(diff90) + ")\n";    msg2 += " ○ 6.0h : " + formatTime(bed60) + " (" + formatDiff(diff60) + ")\n";    msg2 += " △ 4.5h : " + formatTime(bed45) + " (" + formatDiff(diff45) + ")\n\n";    msg2 += "⏰ 今(" + formatTime(now) + ")寝た場合の起床時刻\n";    msg2 += " △ " + formatTime(nowWake45) + " (4.5h) / ○ " + formatTime(nowWake60) + " (6.0h)\n";    msg2 += " ◎ " + formatTime(nowWake75) + " (7.5h) / ○ " + formatTime(nowWake90) + " (9.0h)\n\n";    msg2 += "※90分周期は目安です(個人差あり)";    alert(msg2);  }})());

一発作成プロンプト!

明日の目標起床時間(または現在時刻)から、今夜ユーザーが取るべき『具体的な行動(何時までに布団に入るか)』を最優先で提示する、思考レス・行動直結型の「就寝ナビ」ブックマークレットを作成してください。

一時保存や外部通信、DOM操作は禁止とし、完全なES5構文(var, functionのみ)で構成してください。

【コード構文ルール(最厳守)】
- 文字列のリテラルにはダブルクォーテーション( " )を使用してください。
- インデントには特殊空白(\u00A0等)を含めず、標準の半角スペース(\u0020)のみを使用してください。
- 関数(formatTime, addMinutes, formatDiff等)はすべて即時関数内のトップレベルで定義し、スコープエラーを防止してください。

【動作仕様および入力フロー】
1. **入眠時間(分)の指定**:
   - prompt("入眠時間(分)\n(布団に入ってから眠るまで)", "15") を実行。
   - キャンセル・不正入力時は自動で 15分 を代入して処理続行。

2. **目標起床時間の入力&解析**:
   - prompt("目標の起床時間\n(例: 7, 07:00, 7:30, 730 / 空欄で『今すぐ就寝』)", "07:00") を実行。
   - 返り値が null や空欄の場合でも、エラーを出さず自動で「今すぐ就寝モード」として処理を続行。

3. **行動ファーストのテキスト・評価判定**:
   - 7.5時間以上: 🟢 理想 「◯:◯までに布団へ」
   - 6時間のみ: 🟡 6h確保 「◯:◯までに布団へ」
   - 4.5時間以下: 🚨 睡眠不足 「◯:◯までに布団へ(明日昼寝推奨)」

4. **2段階ダイアログ表示(1画面目: 行動命令 / 2画面目: 全比較)**:
   - **【第1画面: alert()】**: 最上部に「一番伝えたい行動(◯:◯までに布団へ!)」と「あと◯分」を表示。
   - **【詳細確認: confirm()】**: confirm("📊 全比較・今すぐ寝た場合の起床時刻も見ますか?") を実行。
   - **【第2画面: alert()】**: 全就寝候補の一覧 & 今すぐ寝た場合の起床時刻一覧を表示。

【出力レイアウトイメージ】

--- 第1画面(要約alert) ---
😴 今夜やること 😴

👉 23:15 までに布団へ!
   (あと 37分)

判定: 🟢 理想コース
(目標 07:00 起床 / 睡眠 7時間30分)

--- 第2画面(詳細alert) ---
📊 就寝時刻の全候補
 ◎ 理想 : 23:15 (あと 37分)
 ○ 9.0h : 21:45 (間に合いません)
 ○ 6.0h : 00:45 (あと 2時間7分)
 △ 4.5h : 02:15 (あと 3時間37分)

⏰ 今(22:38)寝た場合の起床時刻
 △ 03:23 (4.5h) / ○ 04:53 (6.0h)
 ◎ 06:23 (7.5h) / ○ 07:53 (9.0h)

※90分周期は目安です(個人差あり)

【出力形式(絶対厳守)】
- 解説テキストや前置き文は一切出力しないでください。
- 全体を `javascript:void((function(){ ... })());` のラッパー構造で記述し、単一コードブロックのみを出力してください。

この記事について!

今更ながら、Gemini 3分クッキング記事について注意点など|へろん


PR記事を書かせて頂いています!


何でもどうぞ!答えられるものは全て答えます!

設置はお済みですか?図らずも人の庭でnote質問箱を試す!|へろん


メンバーシップ始めました!

まだ手探りですが、ご要望/無茶振り/質問、可能な限りお受けします!


参加させて頂いています!是非チェックしてみてください😆


有料ツールに挑戦中!

OBS Studio用リモコン | OBS画面を前面に出さずに操作できます!


小道具すべて、こちらに置きました!


☕ お時間あればこちらも是非!


気に入ったらスキ、フォローよろしくお願いします!
note外から見にきてくださったかたも、もしよければハートマーク押して頂けたら励みになります😊


いいなと思ったら応援しよう!

へろん いつも応援ありがとうございます! 快適な制作を進めるためのおやつ活動費に使わせて頂きます!