
2026/05/12 6:04
私は、夜間に目を覚ます原因を特定するのに役立つツールを開発し、その開発を AI に任せています。
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
著者は週末に、24 時間以内に睡眠妨害要因を特定・排除するための安価で家庭内で運用可能なオーディオ監視システムを構築した。既存の Home Assistant センサーと 2 つの廉価な USB マイクを組み合わせてローカルリスナーとして Raspberry Pi を使用する構成とし、クラウドサービスへの依存を抑えつつ環境音を分析することで、厳格なプライバシー保護およびユーザー主導を実現している。独自開発のプロGRESSIVE ウェブアプリにより、睡眠段階を騒音事象と関連付けて視覚化し、マルチトラック方式の分析が可能となっている。データソースとしては、動き、扉、照明、温度、湿度、CO₂、空気品質センサーに加え、Garmin のスマートウォッチによる心拍数・HRV データも組み込まれているが、著者はプライバシー上の懸念から Garmin が提供する正確な睡眠段階報告を信頼していないことを明確に述べており、ユーザーは Coros のウォッチへ乗り換えている。AI は約 8 時間の総作業時間を通じてコード生成や Raspberry Pi の実験指導に役立ちつつあるが、現時点では音源の直接特定ではなくオーケストレーションを担当している。分析結果では、扉を激しく閉める音、食器がざちざちと落ちる音、公道の交通騒音(バイク・トラック)、および CO₂ 濃度の上昇を主な睡眠妨害要因として同定した。対応策としては直ちに音響パネルの設置、扉・窓へのシリコン・ゴムによる断熱工事を実施し、次段階では騒音汚染が軽減された時点で高すぎる CO₂ 濃度を改善する作業に入る見込みである。この DIY アプローチは、基本的な技術スキルを備えた個人が開源ツールと AI の支援を活用して環境健康問題を解決し、高価な産業規模のリソースを介さず、自ネットワーク内で完全に個別最適化された睡眠ソリューションを創出できることを示している。
本文
9 分の読了 | 2026 年 5 月 11 日
私は、毎日の生活の質に影響を与える些細なことに意識を向けるように心がけています。何か気がかりなことが起きたら、それを調査し、考えられる原因を見つけ出し、それに対する行動を起こしたいと考えています。最近変わったのは、そのために私が「構築に値する」と考えるものの基準です。AI ツールを使い始めてからは、数年前であれば「 effort に比べて効果が少ない(報われない)」と断念していたようなプロジェクトも、今では週末で完結できるようになりました。そのため、日常生活の中で問題に出会ったとき、私は「ああ、これを見て調べるために何か作れちゃうかも」と思ったりしています。
この投稿は、そうした問題の一つである「私の睡眠」についてです。
課題
私は騒がしい都会に住んでいます。ある日付は午前 3 時に目を覚まし、何を起こされたのか全く分かりません。他の日は半分しか起きていないのに、翌日のスマートウォッチの記録では、「深い睡眠状態から 3 時 32 分頃に目が覚められた」ことが示されています。
面倒なのは、何が原因だったかという点は、ほとんど推測しきれることがないということです。音で目が覚めた場合、脳はまだそれまでの睡眠段階から脱出して完全に正常な状態に戻り切るまでに時間がかかり、音が消えた後も「何かあった」という記憶だけが残り、混乱するだけです。音が反復しない(落雷の轟音後に光が見えないなど)か、後の手がかりを残さない限り、何が起きたのかは謎のままです。
原因を特定できなければ解決できません。室内なのか室外なのか?隣室なのか?トラックなのか?ドアの音なのか?試行錯誤するあらゆる「解決策」は単なる推測であり、推測は往々にして高価なものになります。
そこで私は任務に乗り出しました😏
構築したものの概要(High Level)
まず少し背景を説明すると、私はすでに Home Assistant を中心としたスマートホーム環境を整えており、自宅(フラット)内外に多数のセンサー(motion デテクタ、ドア、照明、温度、湿度、CO2 ガス濃度、空気品質など)を設置しています。今回のプロジェクトに必要なデータは、その多くが既に収集されていました。追加が必要だったのは「音声」機能であり、睡眠データを組み込み、これらを統合することだけでした。
新たに追加したのは以下の数点です:
- 安価な USB ミクロフォン 2 つ(片方は室内に、もう片方は窓の外で道路を向くように設置)
- Raspberry Pi という小型コンピュータ(聞き手)。ただし、在宅かつ寝室にいて睡眠時間の間のみ動作するように制御されています。
- Garmin のスマートウォッチから取得する睡眠データ*
- 家庭用ラボサーバー上のウェブアプリケーション:このアプリは上記の音声データ、睡眠データ、そして既存のセンサーイベントを統合します。
Raspberry Pi が十分に大きな音を検知した場合、その前後の数秒を含む短い音声クリップを保存します。この検出モード全体は Home Assistant によって管理されています。Pi は Home Assistant のプラグインとして公開され、自動化ルールにより「自宅且在びして寝室にいて、普段の睡眠時間だ」という条件が揃うとのみ有効化されます。それ以外の場合は完全に無効化され、マイクロフォンへのアクセスも一切許可されません。これは、私自身の家网络であってもこの挙動が望ましいと考えていたことです。
本当の実用性はウェブアプリで発揮します。各夜は音楽編集ソフトの「トラック」のようにレイアウトされており、一つのトラックに睡眠段階、一つに心拍数と HRV(常時変動性)、いくつかにセンサーイベント、そして音声クリップを読み込んだノイズイベント用のトラックが用意されています。スマホでも対応するレスポンシブデザインで、音楽 DAW みたいにズームイン/アウトも可能です。
最も有用な機能は、間違いなく「睡眠段階の変化」や「目が覚めた瞬間」を視覚的にマークしてくれる点です。ここから入ります。一晩分をスキャンし、赤くハイライトされた重要ポイントを発見してクリックし、音声を再生します。
さらに良い点は、フロントエンドがプログレッシブ・ウェブ・アプリケーション(PWA)であり、Web Push に対応していることです。また、これは私のホームネットワーク内でのみ提供されます。私が翌朝起きてスマホを確認すると、「昨夜のデータが見られます」という通知が届きます。一切のデータは外部へ漏れることはありません。これは非常に気に入っています。
AI が行ったことと行わなかったこと
期待値を明確にするために:このプロジェクトを週末で実現できたのは、AI ツールの存在が最大の理由です。全体で約 8 時間の作業に、その後の数日でのいくつかの小さな改善を加えた程度です。AI ツールが使えなかったら、私は決して始めませんでした。
ただし、私は AI を使って実際の音声を特定しているわけではありません(少なくとも今はそうではありません)。ドアなのか、食器洗いか、原動機付自転車なのか、という「聞き分け」は、まだ私がイヤホンをつけて行う作業です。ツールがやっているのは、「聞くに値する瞬間を指摘し続ける」だけです。
そしてワークフローについても:コードは読まずに構築しました(意図的な選択です)。結果を検証し、不具合があったら直接フィードバックを与え、AI に自分の出力を検証させるために、ブラウザ上で動作中のアプリのスクリーンショットを撮らせて検証させていました。小型コンピュータ(Raspberry Pi)側ではさらに踏み込みました。Pi は完全な新規インストールの状態だったので、コーディングエージェントに SSH アクセスを与え、デバイス上で直接テストさせていました。実験を設定し、「叫んで」「物を落とせ」「蛇口を回して」と指示し、サンプルを録音させた後、私のために解析を行わせ、スペクトログラムなどを抽出させることもあります。このように動作させることを明確に指示する必要はありましたが、一度指示した後の反復プロセスは正直とても面白かったです。
私自身のハードウェアで走る個人プロジェクトとしては、この構成で十分でした。
ここで起こった興味深い変化は、「AI が私の問題を解決してくれた」ことではありません。「AI が、私の問題を自分で解決するための仕組みを作るコストを劇的に下げた」という点です。
睡眠データについて一言
私は Garmin のスマートウォッチ* から睡眠データを取得しています。各時計メーカーやリングなどのデバイスは睡眠計算の仕方が少し異なりますし、正直なところ、私がその瞬間の正確な睡眠段階をどれにも完全に信じていません。しかし、それらのデバイスを共通して信頼できるのは「実際に目が覚めたかどうかを検出すること」です。これらの目覚イベント、そして睡眠段階間の概略的な遷移が、ここでは私が本当に気にしている点です。これらは臨床的な真実ではありません。「この瞬間は見直す価値がある」というための視覚的なマーカーに過ぎません。それらがなければ、私は冷蔵庫の低い振動音や、隣室の人が特に何もしていない状態の数時間の音声の中に坐り込み続けることになります。
私は睡眠科学を行うつもりはありません。私が求めているのは、朝起きるときに「ちょっと調子が悪かった」と感じさせる要因を特定することです。
見つけたことと行ったこと
実際に使い始めると、パターンがすぐに浮き彫りになりました。いつもの容疑者たち:
- ドア:隣室のドアがバタンと閉まる音、あるいは同じマンション内の人が風呂場に行く際に不注意にドアを扱う音。
- 食器洗い:高い周波数の鋭い音を発し、フラット構造を通じて意外とよく伝わる音です。私の厨房から出たものか、隣室のものかは関係なく聞こえます。
- 道路:原動機付自転車(スクーター)、トラック、そしてゴミ収集車が通る音。(私が住んでいる国を推測してみてください!)
- 室内と室外の入れ違い:たまに、室外だと思ってたのに実は室内のものだったり、その逆のパターンだったりすることがあります。
実際のデータがあるおかげで、もはや推測だけで行動する必要はなく、ある程度の自信を持って対応できるようになりました:
- 正真正銘のアコースティックパネルを追加しました(IKEA のオフィス向けものでも会議室としての機能が高く、意外とうまく機能します)。
- 寝室のドア周辺と窓の周りを追加で断熱材(シリコンゴムなど)で補強しました。
- 一部の室内音については、ハードウェア的な改修よりも「ちょっとした会話」という解決策でした😄
完璧ではありません(都市部は都市部ですから),しかし朝の気分や、Garmin のデータ上の長期的な変化という点で効果は見えてきます。
好奇心旺盛な方向け:仕組みの詳細
興味がある方のため、技術的な詳細を少し追加します:
- 記録ロジック: Pi は Home Assistant 経由で検出機能が有効化されている間、メモリ上のローリングバッファに連続して録音しています。音量が閾値を超えるまではディスクに書き込まれない仕組みです。
- ノイズ抑制: 入力データの上にはノイズ抑制プロファイルが適用されており、環境雑音の床(フロー)を可能な限り低く保とうとします。主に遠くの交通騒音や冷蔵庫など一定の背景音を除去し、それによる誤検知を大幅に減らしています。
- データストレージ: 閾値を超えると、前後のコンテキストを含むクリップをタイムスタンプ付きで保存し、小さな JSON ファイルがイベントを記録します。また、複数の夜分に対応できるようにするため、クリップを圧縮してより小さいオーディオファイルとして格納しています。
- 統合: Pi 上にある小さな Web サーバーは、ウェブアプリへノイズイベントと音声クリップを提供するとともに、録音状態を変更するための別途のトークン認証された制御エンドポイントも公開しています。この制御エンドポイントを消費するのは、コーディングエージェントに書いてもらった小さなカスタム Home Assistant インテグレーションです。このインテグレーションによって、私の Home Assistant の自動化が検出機能の有効/無効を切り替えることができます。
- 睡眠データ統合: Garmin からの睡眠データには、Garmin Connect の認証を処理する優秀なオープンソースライブラリが存在します。小さなジョブが認証済みリクエストを実行し、その日のアクティビティアrchive を引き出すことにより、そこから睡眠段階、心拍数、HRV、その他いくつかのバイオマーカーを抽出でき、これらをデータトラックとして容易に表示できます。
- フロントエンドアーキテクチャ: ウェブアプリは三つのソースからデータを取得します(Garmin: 睡眠データ、Home Assistant: センサーイベント、Pi: ノイズイベントと音声クリップ)。これらすべてが同期されたタイムライン上に結合され、各ソースが独自の視覚的トラックとして表示されます。試した既存のオーディオ再生プレーヤーでは、私が求めたようなマルチトラック同期を処理できなかったので、結局自前で構築することにしました。睡眠段階の変化や目覚イベントは視覚的にハイライトされており、これが最も頼っている部分です。
- デプロイ: フロントエンドは PWA で Web Push を搭載しており、私のホームネットワーク内でのみ提供されます。
現在構想中だがまだ実装していないアイデア
現状のものでも十分機能していますが、最も重要なのは「行動を起こせること」です。しかし、将来的にいくつかの拡張を実装する可能性があります:
- スマートな通知: 見ておくべきことがあればのみ通知します。現在は何が記録されていても昨夜のデータ準備完了 whenever 通知されますが、静かな夜であれば通知自体をスキップするのが賢明でしょう。
- 類似音のクラスタ化: モデルを使って似たような音声クリップをグループ化し、その後一度でクラスター全体にラベル付け(ドア、食器洗い、スクーターなど)を行います。時間が経つとツール自体が新しいイベントの源を推測できるようになるかもしれません。
- クラスタの可視化: クラス分類を行わなくても、単に音がどう集まっているかを見せるだけでも聴取セッションを大幅に加速します。データラベリング作業の手助けにもなります。
- 条件付きアラート: 睡眠を妨げそうな可能性があるものだけ Ping して、それ以外は静かにしておくモード。
これらそれぞれの実装にはおそらくまた週末が必要になりますが、それが今回の投稿の大きな主旨でもあります。いずれこれらに取り組むか、あるいはすでに十分機能しているため取り組まないのかはわかりませんが。
なぜこのプロジェクトを共有するのか
特定のプロジェクト自体よりも、その背後にあるパターンの方が重要だと思っています。「あると便利なが構築する価値がない」というカテゴリにあった多くの個人的な小さな問題に対し、AI ツールを使うことで「よし、週末を使ってやってみよう」というゾーンへと移行したのです。
ここで得た教訓は以下の通りです:
- 修理する前に計測する: 新しいマットレスを購入し、重いカーテンを検討していました。これらも確かに効果があるかもしれませんが、データなしでは適切な解決策を特定したり、実際に機能しているか確認したりできませんでした。
- 文脈が生データに勝つ: ノイズログそのものだけではあまり役に立ちません。同じイベントでも、心拍数がスパイクしたかどうか、ドアが開いたかどうか、その時あなたが深い睡眠の中にいたかどうかによって、全く異なる物語を語ります。
- 十分過ぎるほど簡単なシグナルを選ぶ: Garmin の睡眠段階は完璧ではありませんが、目覚め検出性能自体は「聞くに値する瞬間」を指し示すには十分でした。それだけあればよくて良いのです。
AI ツールは個人向けツールのハードルを下げてくれました。今や小さなきっかけでも何か気がかりになったら、まず考えるのが「これをより良く理解するために小さなシステムを構築できるだろうか?」です。以前は「おそらく不值得」という答えが一般的でしたが、最近は「そうだね」の方が圧倒的に増えました。
構築にあたっての注意点について(Caveats)
私の経歴について:私はソフトウェアエンジニアリングのバックグラウンドを持っています。これがなぜ 8 時間でこのプロジェクトを成し遂げたかの主な理由です。何を求めているかを知っており、どんな回答が来るべきか見極めることができました。一方、オーディオ処理は全く新しい分野でした(Logic Pro といくつかのプラグインは使っていましたが、それ以上の基礎知識はありません)。そのため、その部分は殆ど前提知識ゼロから構築しました。
ただし、このコードを現状のままどこかに公開して配布することはないでしょう。それはコードレビューも受けず、結果ベースでのテストのみに基づいています。私がこれを許容できる理由は、このシステムが私のホームラボ上で動作しており、アクセス権限を制限でき、ロックダウンできるからです。
小さな免責事項
私は睡眠科学者ではなく、この投稿が良い睡眠のガイドではありません。私は日々の生活の質に影響を与える些細なことに意識を向け、行動を起こせる時にそれを行動に移そうとする人物です。私の人生には大小様々なことで、こうしたアプローチを取り入れています。今回のことも其中之一です。
もしあなたも騒がしい都市に住んでおり、睡眠トラッカーが「睡眠が悪かった」と伝えてくれるのに、その理由を教えてくれない場合、ぜひこの種の試みを検討してみてください。私が構築したものを全く同じにする必要はありません。単にベッドのそばにマイクロフォンを置いて、翌朝のスパイクを見直すだけでも多くを学びます🤗。
オチ: さらに窓やドアの断熱を強化した後には、今度は二酸化炭素濃度をスマートに下げる方法を見つける必要があります。
*= *Garmin を個人的には嫌っており、消費者権利を体系的に侵害していると考える非道徳的な企業です。すでに何人にも Coros への乗り換えを説得しています。