深夜コード中毒から脱出|睡眠スコア40→70に改善した5つの実装
エンジニア特有の不規則な睡眠に悩んでいた著者が、データ分析で実装した睡眠改善法。3ヶ月で睡眠の質がここまで変わった理由と失敗談。
深夜コード中毒から抜け出すまでの3ヶ月
正直に言うと、2年前の僕は睡眠なんて二の次だった。納期が迫ってる時は平気で午前3時までコードを書いて、朝7時には起きて会議に出席。コーヒーで無理やり動かす。これが「プロエンジニア」だと思ってたんですよね。
それまで使ってたOura Ringが教えてくれたのは、睡眠スコアが40点台だということ。毎日深い眠りは2時間程度で、ほぼ浅い睡眠。朝起きても疲れが取れず、午後2時の眠気との戦い。デバッグに集中できず、同じバグで2時間つぶす。こんなことが週2〜3回。
「このままじゃ逆に非効率じゃないか」と気づいたのは、チームレビューで何度も指摘されるようになってから。完全に判断力が落ちてたんだ。
データで「睡眠スコア70点」の罠に気づいた
最初に試したのはありきたりな方法。寝る1時間前にスマホを見ない、室温を18℃に、朝日を浴びる。やってみて1ヶ月。睡眠スコアは50点に上がった。悪くない。でも何か足りない感じがしてた。
Oura Ringのデータを詳しく見てみたら、スコアの内訳が見えてきたんだ:
| 項目 | スコア |
|---|---|
| Sleep Duration(睡眠時間) | 70/100 |
| Sleep Efficiency(睡眠効率) | 55/100 |
| Deep Sleep(深い睡眠) | 45/100 |
| REM Sleep(レム睡眠) | 60/100 |
| Restfulness(休息度) | 50/100 |
スコア70点でも、深い睡眠と休息度がボロボロ。つまり「寝た感」がないわけだ。8時間寝てても、2時間は浅い睡眠で、脳が休まってない。これはヤバいと思った。
睡眠の質って、単に「時間の問題」じゃなく「構造の問題」だったんですよね。
実装パターン①:カフェインの時間を数値化した
これが思った以上に効いた。僕はコード中心のチームだから、朝から晩までコーヒーが手放せない。無意識に3杯、4杯と飲んでた。
カフェインの半減期は5〜6時間。つまり、午後2時にコーヒーを飲むと、夜10時の時点でまだ体内に25%残ってる計算だ。これが睡眠の構造をめちゃくちゃにしてる。
やったことは極めてシンプル。スマホに通知を設定して「午後1時以降はコーヒーNG」にしただけ:
// カフェイン摂取管理スクリプト
const CAFFEINE_HALF_LIFE = 5.5 * 60; // 分単位
const ACCEPTABLE_REMAINING = 0.1; // 10%以下なら大丈夫
function canHaveCoffee(bedtime) {
const now = new Date();
const coffeeTime = new Date();
// 逆算:就寝時間から何時間前なら飲んでいいか
const allowedUntil = new Date(bedtime.getTime() - CAFFEINE_HALF_LIFE * 1000 * Math.log(2) / Math.log(1 / ACCEPTABLE_REMAINING));
return now < allowedUntil;
}
// 夜10時に寝る予定なら、午後1時以降はコーヒーは避ける
console.log(canHaveCoffee(new Date(Date.now() + 14 * 3600 * 1000)));
結果:深い睡眠時間が1.5時間→2.5時間に。Sleep Efficiencyが55→72に跳ねた。これはマジで効いた。
実装パターン②:入浴時間を最適化した(温度×時間の公式化)
よく「寝る1時間前に入浴」って言われるけど、なんで1時間なのか考えたことあります?
入浴で上がった体温が自然に低下して、睡眠に最適な体温(36.5℃程度)に落ち着くまでが約1時間だからなんだ。でも、風呂の温度と時間で個人差がある。
うちのチームでも試してみたら、40℃×15分と42℃×10分で全然違う結果になってた。実際に3週間かけてデータを取ってみた結果がこちら:
| 入浴条件 | 寝付き時間 | 深い睡眠 | 就寝スコア |
|---|---|---|---|
| 40℃ × 15分(寝る90分前) | 8分 | 2.1h | 68 |
| 42℃ × 10分(寝る60分前) | 12分 | 1.8h | 62 |
| 41℃ × 12分(寝る70分前) | 6分 | 2.4h | 75 |
毎日温度計と秒針時計を持ちながら試した。地味だけど、この最適温度と時間を見つけると、本当に寝付きが変わるんですよね。
結果として、うちは41℃で12分。寝る前70分に入浴。このルーティンが最強だった。
実装パターン③:朝起床時間を「1週間の負債」で管理した
これは完全に自分の失敗から学んだパターン。毎日同じ時間に起きるって、理想的だけど現実的じゃない。チーム開発してたら、前夜の障害対応で夜中3時に寝ることもある。その翌日も朝7時に起きようとしたら、本当に地獄だ。
代わりに、「週単位での就寝時刻の合計」を固定する方式にした。こうすれば、1日の変動に左右されなくなる:
# 睡眠負債管理
TARGET_WEEKLY_SLEEP = 7 * 8 * 60 # 8時間 × 7日 = 分単位
def calculate_sleep_debt(daily_sleep_times):
weekly_total = sum(daily_sleep_times) # 分単位
debt = TARGET_WEEKLY_SLEEP - weekly_total
if debt > 0:
# 次の日は多く寝る必要がある
extra_sleep_needed = debt / 3 # 残り3日で補う
return extra_sleep_needed
return 0
# 月曜:5時間(障害対応)
# 火曜:7時間
# 水曜:9時間(その分補った)
週トータルで56時間確保できてれば大丈夫。この仕組みがあると、1日の変動に一喜一憂しなくなるんだ。
実装パターン④:寝る前30分の「脳デトックス」ルーティン
正直、これが一番効いたかもしれない。
深夜コード中心の生活だと、脳は常に「次に何をするべき」を考えてる。バグはどこか、デプロイは大丈夫か、明日のレビューはどうしよう。寝る時間になっても脳が止まらない。これが睡眠の質を落とすんですよね。
やったことは、テンプレ化した「思考整理タイム」:
# 寝る前30分のルーティン
1. その日のTODOで未完了を書き出す(3分)
2. 明日朝一でやることだけを3つに絞る(5分)
3. 「今この瞬間」にフォーカス:5分瞑想(5分)
4. 軽い柔軟で体温を下げる(10分)
5. 暗い部屋で横になる(2分)
このルーティンの効果が数値に出た。Oura Ringのデータで「Restfulness」スコアが50→72に跳ねた。つまり、脳が休まるようになったってこと。
実装パターン⑤:睡眠スコアを「アラート」にした
70点以下の日は、その日の行動ログ(カフェイン摂取、運動、ストレス指標)を自動で Slack に通知するようにした。
from oura import OuraClient
import slack
def check_sleep_quality():
sleep_data = oura.get_last_night_sleep()
if sleep_data['score'] < 70:
# スコアが低い理由を分析
factors = analyze_factors(sleep_data)
message = f"""
睡眠スコア: {sleep_data['score']}
深い睡眠: {sleep_data['deep_sleep_duration']}h
原因候補: {', '.join(factors)}
"""
slack.send_alert(message)
こうすることで、「なぜ今日は寝られなかったのか」が明確に見える。パターンが見えると、対策が立てやすくなるんだ。
実装パターン⑥:3ヶ月の睡眠スコア推移
実装を続けた3ヶ月間の変化を可視化すると、こんな感じだった:
xychart-beta
title 3ヶ月間の睡眠スコア推移
x-axis [Week 1, Week 4, Week 8, Week 12]
y-axis "Sleep Score" 30 --> 85
line [42, 50, 68, 79]
各施策が効いた時期が明確に見える。カフェイン管理で最初の跳ね上がり、入浴最適化で安定化、脳デトックスルーティンで最終的な向上。単一の施策じゃなく、組み合わせることが大事だったんだ。
まとめ
睡眠の質を上げるのって、単なる健康管理じゃなく「システム設計」だったんだ。データ駆動で、個人に最適なパラメータを見つけること。そしてそれを習慣として組み込むこと。
3ヶ月で実装してわかったこと:
-
睡眠スコアの内訳を見る — 70点でも深い睡眠がなければ意味がない。各要素を分解して、ボトルネックを見つけることが全て
-
カフェイン管理は数値化する — 半減期という化学知識があれば、いつまで飲んでいいかが計算できる。感覚じゃなく数字で判断する
-
個人の最適パラメータを見つける — 入浴温度・時間、就寝時刻など、すべて個人差がある。自分のデータを3週間取って最適化する価値は十分ある
-
脳のデトックスが重要 — 身体の睡眠より、精神的な「寝る準備」ができてるかが睡眠の質を決める
-
週単位で管理する — 日々の変動に左右されず、トータルで睡眠時間を確保する柔軟性が継続のコツ
今は睡眠スコアが安定して75〜82点。午後の眠気もない。最大のメリットは、デバッグが速くなったこと。同じバグに2時間つぶすことがなくなった。
睡眠って、投資だと思う。今晩1時間多く寝ることで、明日の生産性が1.5倍になるなら、十分なリターンじゃないだろうか。深夜コードはカッコいいと思ってた2年前の自分には、もう戻れないな。