pp-oura について
pp-ouraは、睡眠、活動、心拍数などのユーザーコレクションデータに `oura-pp-cli` でアクセスするスキルです。Ouraユーザーやパートナーアプリ向けに、ローカル同期、オフライン検索、分析、API操作の連鎖を提供します。
主な機能
- 01Ouraユーザーコレクションデータへのアクセス
- 02データのローカルSQLite同期
- 03同期済み記録のFTS5検索
- 04分析クエリによるデータ集計
- 05ワークフロー内でのAPI操作連鎖
活用シーン
- 01ローカル同期したOura記録の検索
- 02健康データの集計分析
- 03複数のOura API操作をまとめて実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mvanhorn/ printing-press-library --skill pp-ouraインストール後、Claude Code で/pp-ouraを入力して読み込まれたか確認します。
詳細
Oura — Printing Press CLI
前提条件:CLI のインストール
このスキルは oura-pp-cli バイナリを使用します。このスキルのコマンドを実行する前に、CLI がインストールされていることを必ず確認してください。 インストールされていない場合は、先にインストールしてください。
- Printing Press インストーラーを使用してインストールします。既定では、macOS/Linux の場合は
$HOME/.local/binに、Windows の場合は%LOCALAPPDATA%\Programs\PrintingPress\binにバイナリがインストールされます。npx -y @mvanhorn/printing-press-library install oura --cli-only - 確認します:
oura-pp-cli --version - 表示されたインストールディレクトリが、このスキルを実行するエージェント/ランタイムの
$PATHに含まれていることを確認します。
npx によるインストールに失敗した場合(Node がない、オフラインなど)は、Go を直接インストールする方法に切り替えてください(Go 1.26.6 以降が必要です)。この方法では $GOPATH/bin(既定値は $HOME/go/bin)にインストールされるため、代わりにこのディレクトリを $PATH に追加してください。
go install github.com/mvanhorn/printing-press-library/library/health/oura/cmd/oura-pp-cli@latest
インストール後に --version が「command not found」と表示される場合、ランタイムから $PATH 上のバイナリディレクトリが見えていません。確認に成功するまで、スキルのコマンドを実行しないでください。
概要
Oura API を使用すると、Oura のユーザーやパートナーアプリケーションは、Oura のデータを活用してユーザーエクスペリエンスを向上させることができます。 このドキュメントでは、Oura データを連携するために利用可能な唯一の手段である Oura API Version 2(V2)について説明します。以前の V1 API は廃止されました。
はじめに
API とは?
API(Application Programming Interface)は、異なるソフトウェアアプリケーション同士が通信できるようにするものです。Oura API を使用すると、Oura Ring のデータにプログラムからアクセスできます。
クイックスタートガイド
- API アプリケーションを登録し、OAuth2 を実装します
- 最初の API 呼び出しを実行する:
curl -X GET https://api.ouraring.com/v2/usercollection/personal_info \ -H "Authorization: Bearer YOUR_TOKEN_HERE" - データ型を確認する:
- このドキュメントで利用可能なエンドポイントを確認し、アクセスできるデータを把握します
- 各エンドポイントには、リクエストとレスポンスの例が含まれています
- Webhook を設定する(強く推奨):
- Oura データの取得には Webhook の利用が推奨されます
- Webhook を適切に実装していて、レート制限に達したお客様はいません
- ユーザーが初めて接続したときに過去のデータを一度リクエストし、その後の更新には Webhook を使用します
- モバイルアプリからデータが同期されてから約 30 秒後に、Webhook 通知が届きます
- データが変更されたときに通知を受け取るには、Webhook を設定します
よくある質問
- データの遅延:データ型によって同期されるタイミングが異なります。睡眠データはユーザーが Oura アプリを開く必要がありますが、毎日のアクティビティやストレスのデータはバックグラウンドで同期される場合があります
データアクセス
データにアクセスするには、登録済みのAPI アプリケーションが必要です。 API アプリケーションの利用者数は、Oura の承認を受けるまで 10 人に制限されています。アプリケーションが承認されると、制限はなくなります。 さらに、Oura のユーザーは、API アプリケーションがアクセスする各データ型の共有に同意する必要があります。 Oura API を介したすべてのデータアクセスリクエストには、認証が必要です。 また、最新のデータ型への API アクセスを可能にするため、Oura のユーザーにはモバイルアプリを最新の状態に保つことを推奨します。
認証
Oura Cloud API は、業界標準の OAuth2 プロトコルによる認証をサポートしています。詳しくは、認証手順をご覧ください。 アクセス トークンは、次のようにリクエストヘッダーに含める必要があります。
GET /v2/usercollection/personal_info HTTP/1.1
Host: api.ouraring.com
Authorization: Bearer <token>
個人用アクセストークンは 2025 年 12 月に非推奨となり、現在は利用できません。
Oura HTTP レスポンスコード
| レスポンスコード | 説明 |
|---|---|
| 200 OK | 成功したレスポンス |
| 400 Query Parameter Validation Error | リクエストに無効または形式が正しくないクエリパラメーターが含まれています。 |
| 401 Unauthorized | 認証トークンが無効または期限切れです。 |
| 403 Forbidden | リクエストされたリソースには追加の権限が必要か、ユーザーのOuraサブスクリプションが期限切れです。 |
| 429 Too Many Requests | レート制限を超過しました。再試行の方法についてはレスポンスヘッダーを確認してください。 |
レート制限
APIは、すべてのアプリケーションで公平にアクセスできるよう、2つのレイヤーでレート制限を適用します。
- 単一トークンからの大量リクエストを抑制する、アクセストークンごとの制限
- 1つのファンアウト型アプリが共有容量を独占しないよう、アプリケーションのすべてのエンドユーザートークンからの合計トラフィックに上限を設ける、アプリケーションごとの制限
どちらかのレイヤーに抵触したリクエストには、429 Too Many Requests が返されます。どのレイヤーが適用されたかは、レスポンスヘッダーの X-RateLimit-Tier で確認できます。
アプリケーションがレート制限に頻繁に近づく場合は、webhooks の実装を強くおすすめします。webhooksを正しく実装しているほとんどのアプリケーションでは、レート制限の問題は発生しません。
レート制限のレスポンスヘッダー
429 Too Many Requests レスポンスが返されると、再試行の参考となる5つのヘッダーが含まれます。固定間隔のバックオフより、これらのヘッダーを優先してください。
Retry-After— 再試行までに待機する秒数を示す整数です。RFC 7231に準拠しており、クライアントのバックオフロジックにそのまま使用できます。X-RateLimit-Limit— 現在の期間におけるリクエスト上限です。X-RateLimit-Window— 上限が適用されるローリングウィンドウの長さ(秒)です。X-RateLimit-Reset— ウィンドウがリセットされ、割り当てが完全に回復する時点を示すUnixエポック(秒)です。X-RateLimit-Tier— 超過した制限を示します。サポートに問い合わせる際に役立ちます。
独自の機能
これらの機能は、このAPIの他のツールでは利用できません。
sync— OuraユーザーコレクションのデータをローカルのSQLiteストアにミラーリングし、オフラインでの検索と分析を可能にしますsearch— ローカルに同期されたOuraレコードを対象とする、FTS5全文検索ですanalytics— ローカルに同期されたヘルスデータに対する、グループ化と件数集計のクエリですworkflow— 複数のOura API操作を、エージェントが使いやすい1つのコマンドに連結します
レシピ
oura-pp-cli usercollection multiple-heartrate-documents --json
oura-pp-cli usercollection multiple-workout-documents --json
oura-pp-cli usercollection single-personal-info-document --json
コマンドリファレンス
sandbox — サンドボックスを管理します
oura-pp-cli sandbox multiple-daily-activity-documents— サンドボックス - 複数の毎日のアクティビティドキュメントoura-pp-cli sandbox multiple-daily-cardiovascular-age-documents— サンドボックス - 複数の毎日の心血管年齢ドキュメントoura-pp-cli sandbox multiple-daily-readiness-documents— サンドボックス - 複数の毎日のコンディションドキュメントoura-pp-cli sandbox multiple-daily-resilience-documents— サンドボックス - 複数の毎日のレジリエンスドキュメントoura-pp-cli sandbox multiple-daily-sleep-documents— サンドボックス - 複数の毎日の睡眠ドキュメントoura-pp-cli sandbox multiple-daily-spo2-documents— サンドボックス - 複数の毎日のSpO2ドキュメントoura-pp-cli sandbox multiple-daily-stress-documents— サンドボックス - 複数の毎日のストレスドキュメントoura-pp-cli sandbox multiple-enhanced-tag-documents— サンドボックス - 複数の拡張タグドキュメントoura-pp-cli sandbox multiple-heartrate-documents— サンドボックス - 複数の心拍数ドキュメントoura-pp-cli sandbox multiple-rest-mode-period-documents— サンドボックス - 複数の休息モード期間ドキュメントoura-pp-cli sandbox multiple-ring-battery-level-documents— サンドボックス - 複数のリングバッテリーレベルドキュメントoura-pp-cli sandbox multiple-ring-configuration-documents— サンドボックス - 複数のリング設定ドキュメントoura-pp-cli sandbox multiple-session-documents— サンドボックス - 複数のセッションドキュメントoura-pp-cli sandbox multiple-sleep-documents— サンドボックス - 複数の睡眠ドキュメントoura-pp-cli sandbox multiple-sleep-time-documents— サンドボックス - 複数の睡眠時間ドキュメントoura-pp-cli sandbox multiple-tag-documents— サンドボックス - 複数のタグドキュメントoura-pp-cli sandbox multiple-v-o2-max-documents— サンドボックス - 複数のVO2 Maxドキュメントoura-pp-cli sandbox multiple-workout-documents— サンドボックス - 複数のワークアウトドキュメントoura-pp-cli sandbox single-daily-activity-document— サンドボックス - 単一の毎日のアクティビティドキュメントoura-pp-cli sandbox single-daily-cardiovascular-age-document— サンドボックス - 単一の毎日の心血管年齢ドキュメントoura-pp-cli sandbox single-daily-readiness-document— サンドボックス - 単一の毎日のコンディションドキュメントoura-pp-cli sandbox single-daily-resilience-document— サンドボックス - 単一の毎日のレジリエンスドキュメントoura-pp-cli sandbox single-daily-sleep-document— サンドボックス - 単一の毎日の睡眠ドキュメントoura-pp-cli sandbox single-daily-spo2-document— サンドボックス - 単一の毎日のSpO2ドキュメントoura-pp-cli sandbox single-daily-stress-document— サンドボックス - 単一の毎日のストレスドキュメントoura-pp-cli sandbox single-enhanced-tag-document— サンドボックス - 単一の拡張タグドキュメントoura-pp-cli sandbox single-rest-mode-period-document— サンドボックス - 単一の休息モード期間ドキュメントoura-pp-cli sandbox single-ring-configuration-document— サンドボックス - 単一のリング設定ドキュメントoura-pp-cli sandbox single-session-document— サンドボックス - 単一のセッションドキュメントoura-pp-cli sandbox single-sleep-document— サンドボックス - 単一の睡眠ドキュメントoura-pp-cli sandbox single-sleep-time-document— サンドボックス - 単一の睡眠時間ドキュメントoura-pp-cli sandbox single-tag-document— サンドボックス - 単一のタグドキュメントoura-pp-cli sandbox single-v-o2-max-document— サンドボックス - 単一のVO2 Maxドキュメントoura-pp-cli sandbox single-workout-document— サンドボックス - 単一のワークアウトドキュメント
usercollection — ユーザーコレクションを管理
oura-pp-cli usercollection multiple-daily-activity-documents— 複数の日次アクティビティドキュメントoura-pp-cli usercollection multiple-daily-cardiovascular-age-documents— 複数の日次心血管年齢ドキュメントoura-pp-cli usercollection multiple-daily-readiness-documents— 複数の日次レディネスドキュメントoura-pp-cli usercollection multiple-daily-resilience-documents— 複数の日次レジリエンスドキュメントoura-pp-cli usercollection multiple-daily-sleep-documents— 複数の日次睡眠ドキュメントoura-pp-cli usercollection multiple-daily-spo2-documents— 複数の日次Spo2ドキュメントoura-pp-cli usercollection multiple-daily-stress-documents— 複数の日次ストレスドキュメントoura-pp-cli usercollection multiple-enhanced-tag-documents— 複数の拡張タグドキュメントoura-pp-cli usercollection multiple-heartrate-documents— 複数の心拍数ドキュメントoura-pp-cli usercollection multiple-rest-mode-period-documents— 複数の休息モード期間ドキュメントoura-pp-cli usercollection multiple-ring-battery-level-documents— 複数のリングバッテリーレベルドキュメントoura-pp-cli usercollection multiple-ring-configuration-documents— 複数のリング設定ドキュメントoura-pp-cli usercollection multiple-session-documents— 複数のセッションドキュメントoura-pp-cli usercollection multiple-sleep-documents— 複数の睡眠ドキュメントoura-pp-cli usercollection multiple-sleep-time-documents— 複数の睡眠時間ドキュメントoura-pp-cli usercollection multiple-tag-documents— 複数のタグドキュメントoura-pp-cli usercollection multiple-v-o2-max-documents— 複数のVo2 Maxドキュメントoura-pp-cli usercollection multiple-workout-documents— 複数のワークアウトドキュメントoura-pp-cli usercollection single-daily-activity-document— 単一の日次アクティビティドキュメントoura-pp-cli usercollection single-daily-cardiovascular-age-document— 単一の日次心血管年齢ドキュメントoura-pp-cli usercollection single-daily-readiness-document— 単一の日次レディネスドキュメントoura-pp-cli usercollection single-daily-resilience-document— 単一の日次レジリエンスドキュメントoura-pp-cli usercollection single-daily-sleep-document— 単一の日次睡眠ドキュメントoura-pp-cli usercollection single-daily-spo2-document— 単一の日次Spo2ドキュメントoura-pp-cli usercollection single-daily-stress-document— 単一の日次ストレスドキュメントoura-pp-cli usercollection single-enhanced-tag-document— 単一の拡張タグドキュメントoura-pp-cli usercollection single-personal-info-document— 単一の個人情報ドキュメントoura-pp-cli usercollection single-rest-mode-period-document— 単一の休息モード期間ドキュメントoura-pp-cli usercollection single-ring-configuration-document— 単一のリング設定ドキュメントoura-pp-cli usercollection single-session-document— 単一のセッションドキュメントoura-pp-cli usercollection single-sleep-document— 単一の睡眠ドキュメントoura-pp-cli usercollection single-sleep-time-document— 単一の睡眠時間ドキュメントoura-pp-cli usercollection single-tag-document— 単一のタグドキュメントoura-pp-cli usercollection single-v-o2-max-document— 単一のVo2 Maxドキュメントoura-pp-cli usercollection single-workout-document— 単一のワークアウトドキュメント
webhook — webhookを管理
oura-pp-cli webhook create— webhookサブスクリプションを作成oura-pp-cli webhook delete— webhookサブスクリプションを削除oura-pp-cli webhook get-subscription— webhookサブスクリプションを取得oura-pp-cli webhook list-subscriptions— webhookサブスクリプションを一覧表示oura-pp-cli webhook renew-subscription— webhookサブスクリプションを更新oura-pp-cli webhook update— webhookサブスクリプションを更新
適切なコマンドを見つける
何をしたいかは分かっていても、どのコマンドを使えばよいか分からない場合は、CLI に直接尋ねます。
oura-pp-cli which "<capability in your own words>"
which は、自然言語で指定された機能のクエリを、この CLI の厳選された機能インデックスから最も一致するコマンドに解決します。終了コード 0 は少なくとも 1 件一致したことを示し、終了コード 2 は確信を持てる一致がなかったことを示します。その場合は --help に切り替えるか、より絞り込んだクエリを使用してください。
認証の設定
oura-pp-cli auth setup を実行すると、トークンを取得するための URL と手順が表示されます(URL を開くには --launch を追加します)。その後、トークンを保存します。
oura-pp-cli auth set-token YOUR_TOKEN_HERE
または、環境変数 OURA_OAUTH2 を設定してください。
oura-pp-cli doctor を実行して、設定を確認します。
エージェントモード
任意のコマンドに --agent を追加します。次のオプションに展開されます:--json --compact --no-input --no-color --yes。
-
パイプで利用可能 — 標準出力に JSON、標準エラー出力にエラーを出力します
-
フィルタリング可能 —
--selectでフィールドの一部を保持します。ドット区切りのパスはネストされた構造をたどり、配列は各要素をたどります。冗長な API でコンテキストを小さく保つうえで重要です。oura-pp-cli sandbox multiple-daily-activity-documents --agent --select id,name,status -
プレビュー可能 —
--dry-runで、リクエストを送信せずに内容を表示します -
オフラインでも使いやすい — 同期/検索コマンドは、利用可能な場合、ローカルの SQLite ストアを使用できます
-
非対話型 — プロンプトは表示せず、すべての入力をフラグで指定します
-
明示的な再試行 — すでに存在する対象の作成を成功として扱う場合に限り
--idempotentを使用し、削除対象が存在しない場合に成功として扱う場合に限り--ignore-missingを使用します
レスポンスエンベロープ
ローカルストアまたは API から読み取るコマンドは、出力を来歴エンベロープでラップします。
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}
データには .results を、ライブデータかローカルデータかの確認には .meta.source を解析してください。人間が読みやすい N results (live) の概要が標準エラー出力に表示されるのは、標準出力が端末であり、かつ機械可読形式のフラグ(--json、--csv、--compact、--quiet、--plain、--select)が設定されていない場合のみです。パイプやエージェントの利用、および明示的に形式を指定した実行では、標準出力に純粋な JSON が出力されます。
エージェントからのフィードバック
この CLI について気になる点に気づいた場合(あなた自身、またはエージェントが気づいた場合)は、記録してください。
oura-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
oura-pp-cli feedback --stdin < notes.txt
oura-pp-cli feedback list --json --limit 10
エントリーはローカルの ~/.local/share/oura-pp-cli/feedback.jsonl に保存されます。OURA_FEEDBACK_ENDPOINT が設定され、さらに --send が渡されるか OURA_FEEDBACK_AUTO_SEND=true が設定されていない限り、POST されることはありません。デフォルトの動作はローカル保存のみです。
バグ報告ではなく、意外だったことを書いてください。短く、具体的に、1 行で。それが積み重なっていきます。
出力の送信先
すべてのコマンドで --deliver <sink> を指定できます。出力は標準出力に加えて、または標準出力の代わりに、指定した送信先へ送られるため、エージェントはコマンド結果を手作業でパイプ処理せずに振り分けられます。次の 3 つの送信先がサポートされています。
| 送信先 | 動作 |
|---|---|
stdout | デフォルト。標準出力のみに書き込みます |
file:<path> | 出力を <path> にアトミックに書き込みます(一時ファイルを作成してから名前を変更します) |
webhook:<url> | 出力本文を URL に POST します(--compact の場合は application/json または application/x-ndjson) |
未対応のスキームは、サポートされている送信先を示す構造化エラーとともに拒否されます。Webhook の失敗時はゼロ以外の終了コードが返され、URL と HTTP ステータスが標準エラー出力に記録されます。
名前付きプロファイル
プロファイルは、保存済みのフラグ値のセットで、複数回の呼び出しで再利用できます。スケジュール実行されるエージェントが、HeyGen の「Beacon」パターンのように、毎回同じ設定で同じコマンドを呼び出す場合に使用します。
oura-pp-cli profile save briefing --json
oura-pp-cli --profile briefing sandbox multiple-daily-activity-documents
oura-pp-cli profile list --json
oura-pp-cli profile show briefing
oura-pp-cli profile delete briefing --yes
明示的に指定したフラグは常にプロファイルの値より優先され、プロファイルの値はデフォルト値より優先されます。agent-context は、利用可能なすべてのプロファイルを available_profiles に一覧表示するため、情報を調べるエージェントは実行時にプロファイルを検出できます。
終了コード
| コード | 意味 |
|---|---|
| 0 | 成功 |
| 2 | 使用方法のエラー(引数が誤っています) |
| 3 | リソースが見つかりません |
| 4 | 認証が必要です |
| 5 | API エラー(上流の問題) |
| 7 | レート制限中(待ってから再試行してください) |
| 10 | 設定エラー |
引数の解析
$ARGUMENTS を解析します。
- 空、
help、または--help→oura-pp-cli --helpの出力を表示 installで始まる →mcpで終わる場合は MCP のインストール、それ以外の場合は上記の前提条件を参照- それ以外 → 直接使用(
--agentを付けて CLI コマンドとして実行)
MCP サーバーのインストール
- MCP サーバーをインストールします:
go install github.com/mvanhorn/printing-press-library/library/health/oura/cmd/oura-pp-mcp@latest - Claude Code に登録します:
claude mcp add oura-pp-mcp -- oura-pp-mcp - 確認します:
claude mcp list
直接使用する場合
- インストールされているか確認します:
which oura-pp-cli見つからない場合は、インストールを案内します(このスキルの最初にある前提条件を参照してください)。 - ユーザーのクエリに最適なコマンドを、上記の「独自の機能」と「コマンドリファレンス」から選びます。
--agentフラグを付けて実行します:oura-pp-cli <command> [subcommand] [args] --agent- 曖昧な場合は、サブコマンドのヘルプを確認します:
oura-pp-cli <command> --help。