きっかけ
元ネタはこちらのツイート。
Oura Ringは5年くらい使っていて、毎朝アプリで睡眠スコアを見るのが日課になっていました。とはいえ、いつも「今日は73点かぁ〜」で終わるだけで、特に何か行動を変えることもなく、そろそろ手放そうかなと思っていたところにこれを見て、面白そうだな...と思いました。
Oura Ringのデータ(レディネス・アクティビティ・バイタル)をClaude Codeで取得・分析して、🟢🟡🔴で判定しつつ、トレンドやPDCAまで出しているのを見て、自分のデータもClaude Codeのskillsを作れば簡単に取得できそうだなと思い、やってみました。
skillsで分析をワンコマンド化した
毎回「データ取って、並べて、判定して…」って手打ちするのはだるいので、ちょうど業務でもskillsを使って定型作業をまとめることが増えてきていたこともあり、今回もワンコマンド化しました。
やりたかったのは、単にOuraのデータを取ることではなくて、毎回同じ観点で見て、最後に次のアクションまで出すことです。
アプリを見ているだけだと、
- 今日はちょっと低い...か...?
- 昨日よりマシかも...?
で終わりがちです。
それならClaude Code側に分析の型を持たせて、/oura-pdca と打つだけで一旦直近7日を同じルールで見てもらえばいいかなと思い、その方向性で作成しました。
skillsの簡単な説明
Claude Codeでは、こうしたワークフローをMarkdownファイルにして持たせることができます。Markdownの中身は「Claude Codeへの指示書」みたいなもので、どんなデータを取得して、どう分析して、どういうフォーマットで出力するかを定義できます。
今回は oura-pdca.md を作成して、/oura-pdca と打つだけで直近7日間の睡眠PDCA分析が走るようにしました。
skillsの全体像
実際に作成した oura-pdca.md は長いので一部だけ載せます。
---
description: Oura Ringの過去7日間の睡眠・回復データを取得・分析してPDCAサイクルで改善アクションを出力する
allowed-tools: mcp__oura__get_daily_readiness, mcp__oura__get_daily_sleep, mcp__oura__get_sleep, mcp__oura__get_daily_spo2, mcp__oura__get_heart_rate
---
# Oura Ring PDCA 睡眠分析
分析期間: 今日を基準に直近7日間
## Step 1: データ取得
以下を start_date / end_date で取得する
1. daily_sleep
2. sleep
3. daily_readiness
4. daily_spo2
5. heart_rate
## Step 2: 集計
- 睡眠時間
- 睡眠効率
- 深睡眠 / REM の比率
- 心拍数
- HRV
- SpO2
- 直近2日 vs 過去5日
## Step 3: 出力
- サマリー
- 変化点
- 要因の仮説
- 次のアクション
記載の通り、あらかじめ観点を固定しておくと、毎回の出力がかなり安定しました。
実際によかったところ
よかったのは、日毎の数字を見るだけだったデータが、集計された上で可視化できるようになったことです。
たとえば、
- 直近数日で回復系の指標が落ちている
- 睡眠時間は取れていても、質の面では崩れている
- 今日は負荷を上げないほうがよさそう
みたいなことを、アプリを眺めるより整理された形で見られるようになりました。
自分でグラフをなんとなく見るより、毎回同じ形式で出してもらうほうが、変化に気づきやすかったです。
前準備: MCPサーバーの自作
skillの中でOuraのデータを取得するには、まずClaude CodeからOura APIを叩けるようにする必要があります。そのためにMCPサーバーを自作しました。
Oura Ringからは公式のMCPは出ていないので、今回はローカルで動かす前提で、自分でコードと権限範囲を把握しやすい構成にしました。
自作といっても、実装はClaude Codeにかなり手伝ってもらっています。
Claude Codeに「Ouraの睡眠データを取得できるMCPサーバーを作って」と伝えたら、以下を一気にやってくれました。
-
oura-mcp/ディレクトリの作成 - TypeScriptでOura API v2クライアントの実装
-
@modelcontextprotocol/sdkを使ったMCPサーバー化 - ビルドしてClaude Codeから呼べる状態にするところまで
一番詰まったのはMCPよりOAuth2認証の方でした。
ここは自分で取得する必要があり、普段あまり触ってこなかったので、最初は「トークンどこで取るんだ?」でかなり迷いました...笑
実際にどういう分析ができるようになったか
ここでは自分の生データは出しませんが、実際にやってみると、たとえばこんな感じの出力が返ってきます。
出力イメージ(サンプル)
※ 以下は実際の出力形式に寄せたサンプルです。数値は説明用のダミーデータです。
---
Oura PDCA 睡眠分析
分析期間: 今日を基準に直近7日間
---
睡眠サマリー
| 日付 | スコア | 就寝→起床 | 合計睡眠 | 深睡眠 | REM | 効率 |
|------|--------|------------|----------|--------|-----|------|
| Day1 | 🟡 72 | 00:10→07:20 | 6h 10m | 62m | 85m | 87% |
| Day2 | 🔴 65 | 01:05→07:00 | 5h 20m | 40m | 60m | 81% |
| Day3 | 🟡 75 | 00:30→08:10 | 6h 50m | 70m | 92m | 88% |
| 7日平均 | 🟡 71 | — | 6h 20m | 64m | 82m | 85% |
トレンド: 直近2日の睡眠時間は過去5日より短く、スコアは横ばい〜やや低下。
---
レディネス(回復度)
| 指標 | 直近値 | 7日平均 | 判定 |
|------|--------|----------|------|
| レディネススコア | 79 | 81 | 🟡 |
| 回復指数 | 74 | 80 | 🟡 |
| 前夜の睡眠 | 61 | 65 | 🔴 |
トレンド: 前夜の睡眠評価が低めで、回復系の指標も少し弱い。
---
睡眠バイタル
| 指標 | 最新値 | 7日範囲 | 判定 |
|------|--------|----------|------|
| 安静時HR | 53 bpm | 52–57 bpm | 🟢 |
| HRV | 64 ms | 55–70 ms | 🟢 |
| SpO2 | 98.7% | 98.1–99.0% | 🟢 |
| 呼吸数 | 13.0 回/分 | 12.5–13.5 回/分 | 🟢 |
---
睡眠構成
| 指標 | 7日平均 | 直近値 | 判定 |
|------|----------|--------|------|
| 合計睡眠時間 | 6h 20m | 5h 40m | 🟡 / 🔴 |
| 深睡眠 | 64m (16%) | 58m | 🟢 |
| REM睡眠 | 82m (20%) | 78m | 🟢 |
| 睡眠効率 | 85% | 89% | 🟢 |
---
PDCA 分析
Check(現状把握)
- 睡眠時間は平均6時間台で、直近2日はやや短め
- 就寝時刻のばらつきがあり、遅い日にスコアが落ちやすい
- 回復系の指標は大きく崩れてはいないが、「前夜の睡眠」は継続的に弱い
Analyze(課題特定)
- 問題A: 合計睡眠時間が安定して7時間を超えていない
- 問題B: 就寝時刻のばらつきが睡眠スコア低下につながっていそう
Plan(改善計画)
- 目標A: 睡眠時間を7時間以上に近づける
- 目標B: 就寝時刻を0:00前後に寄せてばらつきを小さくする
Act(次のアクション)
- 就寝時刻を23:30〜0:00に固定する
- 就寝30分前からスマホ・PCを見ない
- 夜遅い時間のカフェイン摂取を避ける
ポイントは、ただ「睡眠を改善しましょう」で終わらないことです。
- どこが落ちているのか
- 何が直近の変化なのか
- 次に何をやるのか
まで一連の流れで出るようにしました。
やってみてわかったこと
使ってみてよかったのは、単に分析できたというのもありますが、毎回同じ粒度で振り返れるようになったことでした。
Ouraのアプリ自体ももちろん便利なんですが、日々見ているとどうしてもその日の数字だけで終わります。
一方でskill化しておくと、
- 直近の傾向を見る
- 少し前との差を見る
- 仮説とアクションに落とす
までがひとまとまりになります。
あと、年単位とか月単位みたいに少し長めで見たときにも、アプリを見ているだけでは気づかなかった傾向が見えました。
「なんとなく最近よくない気がする」を、少し整理された形で見られるのはかなりよかったです。
まとめ
普段の業務ではClaude Codeのskillsを使って定型作業をまとめることがあります。今回それをプライベートの健康管理に持ち込んでみて感じたのは、skillsで分析の型を決めてあげると、ただ溜まっていただけのデータが急に使えるものになるということでした。
このパターンは健康管理に限らず、APIがあってデータが溜まるものなら何にでも使えると思います。
筋トレの記録とか食事管理とか、次はそのあたりでもやってみたいです。