gonta https://hiro-gear.com Wed, 12 Aug 2026 13:08:35 +0000 ja hourly 1 https://wordpress.org/?v=7.0.3 Wifi対応エアコンをRaspberry Piでハック!日々の「暑い・寒い」を学習する完全自律型スマート空調を作ってみた https://hiro-gear.com/2026/08/12/wifi%e5%af%be%e5%bf%9c%e3%82%a8%e3%82%a2%e3%82%b3%e3%83%b3%e3%82%92raspberry-pi%e3%81%a7%e3%83%8f%e3%83%83%e3%82%af%ef%bc%81%e6%97%a5%e3%80%85%e3%81%ae%e3%80%8c%e6%9a%91%e3%81%84%e3%83%bb%e5%af%92/ https://hiro-gear.com/2026/08/12/wifi%e5%af%be%e5%bf%9c%e3%82%a8%e3%82%a2%e3%82%b3%e3%83%b3%e3%82%92raspberry-pi%e3%81%a7%e3%83%8f%e3%83%83%e3%82%af%ef%bc%81%e6%97%a5%e3%80%85%e3%81%ae%e3%80%8c%e6%9a%91%e3%81%84%e3%83%bb%e5%af%92/#respond Wed, 12 Aug 2026 13:08:35 +0000 https://hiro-gear.com/2026/08/12/wifi%e5%af%be%e5%bf%9c%e3%82%a8%e3%82%a2%e3%82%b3%e3%83%b3%e3%82%92raspberry-pi%e3%81%a7%e3%83%8f%e3%83%83%e3%82%af%ef%bc%81%e6%97%a5%e3%80%85%e3%81%ae%e3%80%8c%e6%9a%91%e3%81%84%e3%83%bb%e5%af%92/ import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true });

夜中のリモコン格闘からの解放

夏の夜や冬の就寝時、「27度だと寒すぎるけど、28度だと蒸し暑い…」と夜中に汗だくで目を覚まし、暗闇の中でリモコンを操作した経験はありませんか?

スマートホームが普及し、「室温が28度を超えたら冷房をオンにする」といった単純な自動化は簡単にできるようになりました。しかし、人間の「快適さ」は室温だけでなく、外気温や湿度、そして日々の体調や癖によって微妙に変化します。単純なしきい値制御では、結局「なんか違う」と人間が夜中に微調整することになってしまいます。

そこで今回は、Wifi対応のエアコン機器をRaspberry Piから直接制御し、日々の「暑かった・寒かった」というフィードバックを学習して「夜中のリモコン操作をRaspberry Piに肩代わりさせる」完全自律型スマート空調システムを作ってみました。


自律型スマート空調の仕組みと「朝の通勤フィードバック」

このシステムは、単なるリモコンの代わりではありません。日々のデータを蓄積し、強化学習的なアプローチで設定温度を自分専用に最適化していくのが特徴です。

1. 5分ごとの徹底的なデータロギング

Raspberry Pi上で常駐プログラムを動かし、Wifi経由でエアコンから「室外温度」「室内温度」「現在の設定温度」「運転モード」などの情報を5分間隔で取得し、12時間分のログとして記録し続けます。

2. 「状態」ごとの最適解を記録するグリッド

「外気温28度・室温26度」といった特定の状態のペアごとに、最適な設定温度を記録する「学習グリッド」を用意します。システムは現在の状態に一致するグリッドがあれば、過去の学習に基づいた最適な設定温度へ、人間が寝ている間にこっそりと自動調整してくれます。

3. 朝の通勤電車で行う「チャット問診」と学習(ここがキモ!)

毎朝、ユーザーが起床して通勤電車に乗っている時間帯に、チャットアプリ(Discordなど)経由でシステムが尋ねてきます。
「昨晩のエアコンはいかがでしたか?(1.快適 / 2.少し暑かった / 3.寒かった / 4.蒸し暑かった)」

スマホから例えば「2.少し暑かった」と返信すると、システムは昨晩の12時間のログを自動で遡ります。そして「外気温が一番高く、環境が過酷だった時間帯」を特定し、その瞬間のグリッドの目標設定温度を -0.5度だけ局所的に更新します。

4. 湿度戻り(ジメジメ)の自動回避

さらに、室温が下がって冷房が送風状態になることで発生する「ジメジメ感」も計算します。設定温度と室温のギャップ×時間を積分し、一定の閾値を超えたら自動で「除湿モード」へ切り替えるロジックも搭載。チャットで「蒸し暑かった」と回答すれば、この切り替えタイミング(閾値)も自動で早まるように学習します。


まとめ:人間に寄り添う真のスマートホーム

全体を一律に0.5度下げるのではなく、「外気温が〇〇度で室温が〇〇度の時だけ少し温度を下げる」というピンポイントな調整を、通勤電車のチャットを通じて繰り返すことで、数週間もすれば夜中に一切リモコンに触らなくても朝まで爆睡できる相棒が完成します。

さらに、この制御システムへの命令やログの追記はすべて、内部のローカルAPIを経由して行われるため、複数のプログラムが干渉し合わないクリーンな設計(疎結合)になっています。

毎晩リモコンと格闘する時代は終わりです。人間は朝の通勤電車で「感想」を伝えるだけ。あとはRaspberry Piが夜通し頑張って最適な空間をキープしてくれる、そんな自律型スマートホームを楽しんでいきたいと思います!

]]>
https://hiro-gear.com/2026/08/12/wifi%e5%af%be%e5%bf%9c%e3%82%a8%e3%82%a2%e3%82%b3%e3%83%b3%e3%82%92raspberry-pi%e3%81%a7%e3%83%8f%e3%83%83%e3%82%af%ef%bc%81%e6%97%a5%e3%80%85%e3%81%ae%e3%80%8c%e6%9a%91%e3%81%84%e3%83%bb%e5%af%92/feed/ 0
T-CROSSのバッテリー交換手順:LN1からLN2へアップグレード https://hiro-gear.com/2026/08/09/t-cross%e3%81%ae%e3%83%90%e3%83%83%e3%83%86%e3%83%aa%e3%83%bc%e4%ba%a4%e6%8f%9b%e6%89%8b%e9%a0%86%ef%bc%9aln1%e3%81%8b%e3%82%89ln2%e3%81%b8%e3%82%a2%e3%83%83%e3%83%97%e3%82%b0%e3%83%ac%e3%83%bc/ https://hiro-gear.com/2026/08/09/t-cross%e3%81%ae%e3%83%90%e3%83%83%e3%83%86%e3%83%aa%e3%83%bc%e4%ba%a4%e6%8f%9b%e6%89%8b%e9%a0%86%ef%bc%9aln1%e3%81%8b%e3%82%89ln2%e3%81%b8%e3%82%a2%e3%83%83%e3%83%97%e3%82%b0%e3%83%ac%e3%83%bc/#respond Sun, 09 Aug 2026 12:37:19 +0000 https://gonta.f5.si/2026/08/09/t-cross%e3%81%ae%e3%83%90%e3%83%83%e3%83%86%e3%83%aa%e3%83%bc%e4%ba%a4%e6%8f%9b%e6%89%8b%e9%a0%86%ef%bc%9aln1%e3%81%8b%e3%82%89ln2%e3%81%b8%e3%82%a2%e3%83%83%e3%83%97%e3%82%b0%e3%83%ac%e3%83%bc/ import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true });

今回は、フォルクスワーゲン T-CROSSのバッテリーを標準の「LN1」サイズから、ワンサイズ大きい「LN2」へ交換(アップグレード)した際の手順と注意点をご紹介します。

導入:なぜLN2へ変更したのか

T-CROSSに標準搭載されているバッテリー(LN1サイズ)は少し容量に不安があったため、今回はより大容量で安定した電力を供給できるVARTA AGM A8(LN2サイズ)に変更することにしました。

VARTA AGM A8 LN2バッテリー

サイズが変わることで物理的に収まるか不安がありましたが、いくつかの工夫で無事に搭載できました。

本題:バッテリーの交換手順と工夫

バッテリー交換は以下の手順で慎重に行いました。

1. 取り外しの基本ルール

バッテリーを外す際は、必ずマイナス端子から外し、次にプラス端子を外します。ショートを防ぐための鉄則です。
(※取り付ける際は逆順のプラス→マイナスになります)
車のメモリー飛びを最小限に防ぐため、端子を外したあとは素早く新しいバッテリーへ交換しました。

2. サイズ違い(LN2)への対応

LN2はLN1よりも横幅が長いため、そのままでは固定金具がうまくはまりません。
今回は、バッテリーを固定する金具の位置を「一段下」にずらして固定することで、無事にしっかりと固定することができました。

T-CROSS エンジンルーム バッテリー搭載状態

3. バッテリーカバーの妥協点

バッテリーを覆う保護カバーもLN1用のため、そのままでは全体を被せることができません。
これについては、熱の影響を最も受けやすいエンジン側のみを保護するようにカバーを配置し、妥協点としています。

交換後の状態:警告灯はついたか?

輸入車のバッテリー交換で一番心配になるのが、交換直後に点灯する「各種エラー警告灯」です。
しかし、今回の素早い交換作業が功を奏したのか、心配していた警告灯は一切点灯しませんでした。交換後もエンジンはスムーズにかかり、今のところ非常に安定して稼働しています。

まとめ

T-CROSSのバッテリーをLN1からLN2へアップグレードする作業は、固定位置の調整とカバーの工夫さえすればDIYでも十分に可能です。

  • 端子の外し方は「マイナスから」
  • 固定金具は一段下にずらす
  • カバーはエンジン側を優先して保護

これらのポイントを押さえて、安全に作業を行ってください。(※DIYでの作業は自己責任となりますので、不安な方は専門店にご相談ください)

]]>
https://hiro-gear.com/2026/08/09/t-cross%e3%81%ae%e3%83%90%e3%83%83%e3%83%86%e3%83%aa%e3%83%bc%e4%ba%a4%e6%8f%9b%e6%89%8b%e9%a0%86%ef%bc%9aln1%e3%81%8b%e3%82%89ln2%e3%81%b8%e3%82%a2%e3%83%83%e3%83%97%e3%82%b0%e3%83%ac%e3%83%bc/feed/ 0
単なるテキスト検索からの脱却。「OKF対応」で進化したGraph RAGがAIに伝える立体的コンテキスト https://hiro-gear.com/2026/07/25/%e5%8d%98%e3%81%aa%e3%82%8b%e3%83%86%e3%82%ad%e3%82%b9%e3%83%88%e6%a4%9c%e7%b4%a2%e3%81%8b%e3%82%89%e3%81%ae%e8%84%b1%e5%8d%b4%e3%80%82%e3%80%8cokf%e5%af%be%e5%bf%9c%e3%80%8d%e3%81%a7%e9%80%b2/ https://hiro-gear.com/2026/07/25/%e5%8d%98%e3%81%aa%e3%82%8b%e3%83%86%e3%82%ad%e3%82%b9%e3%83%88%e6%a4%9c%e7%b4%a2%e3%81%8b%e3%82%89%e3%81%ae%e8%84%b1%e5%8d%b4%e3%80%82%e3%80%8cokf%e5%af%be%e5%bf%9c%e3%80%8d%e3%81%a7%e9%80%b2/#respond Sat, 25 Jul 2026 07:11:14 +0000 https://gonta.f5.si/2026/07/25/%e5%8d%98%e3%81%aa%e3%82%8b%e3%83%86%e3%82%ad%e3%82%b9%e3%83%88%e6%a4%9c%e7%b4%a2%e3%81%8b%e3%82%89%e3%81%ae%e8%84%b1%e5%8d%b4%e3%80%82%e3%80%8cokf%e5%af%be%e5%bf%9c%e3%80%8d%e3%81%a7%e9%80%b2/ import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true });

前回、Obsidianのデータを独立したRAGとしてMCP化し、あらゆるAIから横断検索できる「最強のマルチAI手帳」について解説しました。
今回は、そのアーキテクチャの次なる進化である「OKF(Open Knowledge Format)への対応」と「Graph RAG化」について深掘りします。

なぜ従来のRAGは「平面的」なのか?

一般的なRAGシステムでは、Markdownなどのテキストファイルを適当な長さ(チャンク)に分割してベクトル化し、AIに渡します。
しかし、これには大きな欠陥があります。AIは「検索にヒットしたテキストの断片」を受け取るだけで、「そのノートがどのプロジェクトに属しているのか」「どんな他のタスクと関連しているのか」といった『文脈の繋がり』を理解できないのです。

Google提唱の「OKF」を取り入れた解決策

そこで今回、Googleが提唱する「OKF(Open Knowledge Format)」の概念をObsidianの運用ルールに導入しました。
これは、情報を単なるテキストの羅列ではなく、「YAMLの構造化データ(メタデータ)」+「Markdown本文」として扱うアプローチです。

具体的には、Obsidianのノートの先頭にプロパティ(YAML)を持たせ、明示的にエッジ(関係性)を記述します。

---
parent: "[[AIエージェント開発プロジェクト]]"
type: "task"
---

Graph RAGがAIに伝える「立体的な知識」

裏側で動いている自作のインポーター(Watcher)を改修し、このYAMLフロントマターから parentrelated といったプロパティを抽出し、意味付きのエッジ(関係性の型) としてSQLite(Graph DB)に記録するようにしました。

そして、MCPサーバー経由でAIが検索を行った際、単にヒットしたテキストを返すだけでなく、以下のような「ナレッジグラフ構造(トポロジー)」を文字列の先頭にマッピングしてAIに渡します。

【ナレッジグラフ構造 (Knowledge Graph Topology)】
[現在のタスク] --(parent)--> [AIエージェント開発プロジェクト]
[現在のタスク] --(link)--> [関連技術メモ]

【コンテンツ詳細 (Content)】
...(ノート本文)...

AIが文脈を「理解」し始めた

この改修を行った結果、MCPを利用するAIエージェント(GonrasやAntigravity等)の推論能力が劇的に向上しました。
キーワードのマッチングだけでなく、「このタスクはあのプロジェクトの子タスクだから、全体のスケジュールに関わるな」といった、手帳内の立体的なつながり(Graph Topology)を認識した上で回答してくれるようになったのです。

単なる「AI×Obsidian」の連携から一歩進み、自分自身の脳内のリンク構造をそのままAIにインストールする。これこそが、次世代のパーソナルAIの最適解だと確信しています。

]]>
https://hiro-gear.com/2026/07/25/%e5%8d%98%e3%81%aa%e3%82%8b%e3%83%86%e3%82%ad%e3%82%b9%e3%83%88%e6%a4%9c%e7%b4%a2%e3%81%8b%e3%82%89%e3%81%ae%e8%84%b1%e5%8d%b4%e3%80%82%e3%80%8cokf%e5%af%be%e5%bf%9c%e3%80%8d%e3%81%a7%e9%80%b2/feed/ 0
T-CROSS プラグとイグニッションコイル交換で劇的改善(続編) https://hiro-gear.com/2026/07/20/t-cross-%e3%83%97%e3%83%a9%e3%82%b0%e3%81%a8%e3%82%a4%e3%82%b0%e3%83%8b%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b3%e3%82%a4%e3%83%ab%e4%ba%a4%e6%8f%9b%e3%81%a7%e5%8a%87%e7%9a%84%e6%94%b9%e5%96%84/ https://hiro-gear.com/2026/07/20/t-cross-%e3%83%97%e3%83%a9%e3%82%b0%e3%81%a8%e3%82%a4%e3%82%b0%e3%83%8b%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b3%e3%82%a4%e3%83%ab%e4%ba%a4%e6%8f%9b%e3%81%a7%e5%8a%87%e7%9a%84%e6%94%b9%e5%96%84/#respond Mon, 20 Jul 2026 12:12:20 +0000 https://gonta.f5.si/2026/07/20/t-cross-%e3%83%97%e3%83%a9%e3%82%b0%e3%81%a8%e3%82%a4%e3%82%b0%e3%83%8b%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b3%e3%82%a4%e3%83%ab%e4%ba%a4%e6%8f%9b%e3%81%a7%e5%8a%87%e7%9a%84%e6%94%b9%e5%96%84/ import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true });

これまでの経緯

以前、運転中に突然のEPC警告灯点灯とエンジンの不調に見舞われました。原因は2番シリンダの着火不良(エラーコード:P302)であり、その際は該当するイグニッションコイルを交換することで事象は改善しました。

しかし、現在の走行距離は 約6.5万キロ
他にも劣化している部品がある可能性が高いため、今回は予防保全も兼ねてさらなるリフレッシュを行いました。

プラグともう1気筒のイグニッションコイルを交換

前回のトラブルを踏まえ、今回は以下の部品を新品に交換しました。

  • スパークプラグ(全気筒)
  • もう1気筒分のイグニッションコイル

交換時の様子がこちらの写真です。

プラグとコイル交換の様子

交換後の変化:すこぶる調子が良くなった!

交換を終えて走り出してみると、その違いは歴然でした。
エンジンのふけ上がりが非常にスムーズになり、すこぶる調子が良くなりました! 振動も減り、新車時に近いフィーリングを取り戻したような感覚です。

どちらが効いたのか?

正直なところ、今回同時に交換を行ったため、「スパークプラグが良かったのか」「追加で替えたイグニッションコイルが良かったのか」、どちらが直接的に効いているのかを切り分けることはできません。

しかし、結果としてこのリフレッシュ作業は非常に有益でした。

まとめ:6.5万キロでの点火系リフレッシュはおすすめ

T-CROSSに限らずですが、走行距離が 6.5万キロ という節目を迎えた車両であれば、点火系(プラグやコイル)には相応の負担が蓄積しています。

もし「最近エンジンの振動が増えた」「少しもたつく感じがある」といった小さな不調を感じているのであれば、スパークプラグとイグニッションコイルの交換を試してみる価値は大いにあります。
その効果をはっきりと体感できるはずですので、リフレッシュの参考にしてみてください!

]]>
https://hiro-gear.com/2026/07/20/t-cross-%e3%83%97%e3%83%a9%e3%82%b0%e3%81%a8%e3%82%a4%e3%82%b0%e3%83%8b%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b3%e3%82%a4%e3%83%ab%e4%ba%a4%e6%8f%9b%e3%81%a7%e5%8a%87%e7%9a%84%e6%94%b9%e5%96%84/feed/ 0
単なるObsidian×AI連携ではない。「RAGのMCP化」が創る最強のマルチAI手帳 https://hiro-gear.com/2026/07/20/%e5%8d%98%e3%81%aa%e3%82%8bobsidianxai%e9%80%a3%e6%90%ba%e3%81%a7%e3%81%af%e3%81%aa%e3%81%84%e3%80%82%e3%80%8crag%e3%81%aemcp%e5%8c%96%e3%80%8d%e3%81%8c%e5%89%b5%e3%82%8b%e6%9c%80%e5%bc%b7/ https://hiro-gear.com/2026/07/20/%e5%8d%98%e3%81%aa%e3%82%8bobsidianxai%e9%80%a3%e6%90%ba%e3%81%a7%e3%81%af%e3%81%aa%e3%81%84%e3%80%82%e3%80%8crag%e3%81%aemcp%e5%8c%96%e3%80%8d%e3%81%8c%e5%89%b5%e3%82%8b%e6%9c%80%e5%bc%b7/#respond Mon, 20 Jul 2026 11:29:30 +0000 https://gonta.f5.si/2026/07/20/%e5%8d%98%e3%81%aa%e3%82%8bobsidianxai%e9%80%a3%e6%90%ba%e3%81%a7%e3%81%af%e3%81%aa%e3%81%84%e3%80%82%e3%80%8crag%e3%81%aemcp%e5%8c%96%e3%80%8d%e3%81%8c%e5%89%b5%e3%82%8b%e6%9c%80%e5%bc%b7/ import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true });

最近、「Obsidian(ローカルMarkdownメモ)をAIと組み合わせる」というアプローチが世間で流行っています。しかし、私が今回最もこだわり、そして到達した結論は単なる連携ではありません。
それは、「Obsidianの情報をRAG(検索拡張生成)システムとして独立させ、さらにそれをMCP(Model Context Protocol)化する」という設計です。

このアーキテクチャにより、私のObsidianは単なるメモ帳から、あらゆるAI(市販のAIツールや自作のAIエージェント)から共通して参照できる「My手帳(汎用ナレッジベース)」へと進化しました。

構成図(アーキテクチャ)

graph TD
    subgraph Obsidian_Vault [Obsidian Vault]
        NOTES["📝 My手帳 (Obsidian)
日々の記録・アイデア"] end subgraph Unified_RAG_MCP [Unified RAG MCP - Raspberry Pi] WATCHER["👁 Watcher
(3分待機で自動ベクトル化)"] VECTOR_DB[("🗄 SQLite Vector DB
(Gemini Embeddings)")] MCP_SERVER["🔌 MCP Server
(RAG検索APIを提供)"] NOTES -.->|ファイル更新検知| WATCHER WATCHER -->|見出しベースで高速チャンク化| VECTOR_DB VECTOR_DB <-->|検索リクエスト| MCP_SERVER end subgraph AI_Clients [AI Clients - マルチアクセス] ANTIGRAVITY["🤖 Antigravity
(最先端のMCP対応AI)"] GONRAS["🦅 Gonras
(日々の対話をこなす独自AI)"] ANTIGRAVITY <-->|ツールとしてRAGを呼び出し| MCP_SERVER GONRAS <-->|ツールとしてRAGを呼び出し| MCP_SERVER end

一般的なObsidian×AIの限界

よくある構成は、Obsidianのプラグインを使ってChatGPTを呼び出したり、特定のAIアプリにObsidianのフォルダを読み込ませたりするアプローチです。
しかしこれでは、「その特定のAI」からしか手帳を使えません。また、巨大な手帳データを毎回AIに読ませるのは非効率であり、すぐにコンテキスト(記憶枠)の限界に達してしまいます。

私がこだわった「RAGのMCP化」というブレイクスルー

そこで私は、Obsidianのデータを外部のRAG(ベクトルデータベース)として独立させました。
さらに、そのRAGシステムを話題のMCP(Model Context Protocol)サーバーとして包み込みました。これが最大のポイントです。

これにより、以下のような「マルチAIアクセス」が可能になりました。

  1. 独自AIエージェント(Gonras)からの利用
    私が自作したAIエージェント「Gonras」は、私と会話する中で「あ、これは手帳に書いてあったな」と思えば、MCP経由でRAGを検索し、文脈を踏まえた返答をしてくれます。
  2. 最先端AIツール(Antigravity等)からの利用
    GeminiやClaudeなどの最先端モデルを搭載したMCP対応ツールも、この「My手帳MCP」を接続するだけで、初対面なのに私の個人的な知識や背景(サーバーの設定から自転車の趣味まで!)をすべて理解したアシスタントに早変わりします。

究極の「My手帳」エコシステムの完成

  • 人間はただObsidianにメモを書くだけ。
  • 裏側(Watcher)がそれを自動で高速にチャンク化(意味段落に分割)し、ベクトルDBを更新。
  • MCPを通じて、どんなAIエージェントも瞬時にその知識を引き出せる。

AIの進化は日進月歩で、明日にはもっと賢い新しいAIモデルが登場するでしょう。
しかし、この「RAGのMCP化」というアーキテクチャを組んでおけば、AIモデルがどれだけ変わろうと、「自分の脳(Obsidian)」をプラグのように新しいAIへ挿し込むだけで済みます。

これこそが、情報過多の時代を生き抜くための、真にポータブルで無敵な「My手帳」の姿です。

]]>
https://hiro-gear.com/2026/07/20/%e5%8d%98%e3%81%aa%e3%82%8bobsidianxai%e9%80%a3%e6%90%ba%e3%81%a7%e3%81%af%e3%81%aa%e3%81%84%e3%80%82%e3%80%8crag%e3%81%aemcp%e5%8c%96%e3%80%8d%e3%81%8c%e5%89%b5%e3%82%8b%e6%9c%80%e5%bc%b7/feed/ 0
iPhoneの写真を自宅のRaspberry Piに自動保存!容量不足を解消するスマートな仕組みづくり https://hiro-gear.com/2026/07/20/iphone%e3%81%ae%e5%86%99%e7%9c%9f%e3%82%92%e8%87%aa%e5%ae%85%e3%81%aeraspberry-pi%e3%81%ab%e8%87%aa%e5%8b%95%e4%bf%9d%e5%ad%98%ef%bc%81%e5%ae%b9%e9%87%8f%e4%b8%8d%e8%b6%b3%e3%82%92%e8%a7%a3%e6%b6%88/ https://hiro-gear.com/2026/07/20/iphone%e3%81%ae%e5%86%99%e7%9c%9f%e3%82%92%e8%87%aa%e5%ae%85%e3%81%aeraspberry-pi%e3%81%ab%e8%87%aa%e5%8b%95%e4%bf%9d%e5%ad%98%ef%bc%81%e5%ae%b9%e9%87%8f%e4%b8%8d%e8%b6%b3%e3%82%92%e8%a7%a3%e6%b6%88/#respond Mon, 20 Jul 2026 07:46:08 +0000 https://gonta.f5.si/2026/07/20/iphone%e3%81%ae%e5%86%99%e7%9c%9f%e3%82%92%e8%87%aa%e5%ae%85%e3%81%aeraspberry-pi%e3%81%ab%e8%87%aa%e5%8b%95%e4%bf%9d%e5%ad%98%ef%bc%81%e5%ae%b9%e9%87%8f%e4%b8%8d%e8%b6%b3%e3%82%92%e8%a7%a3%e6%b6%88/ import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true });

スマートフォンで写真を撮る機会が増えると、すぐに直面するのが「クラウドストレージ(iCloudなど)の容量不足」という問題です。毎月のサブスクリプション費用を節約しつつ、安全に大量の写真を保管するために、私は自宅のRaspberry Pi(ラズパイ)を活用した「自分だけの写真バックアップ環境」を構築しました。

この記事では、専門知識がない方にもわかりやすく、どのような仕組みでiPhoneから写真をローカルサーバーへ保存しているのか、具体的な構成やメリットをご紹介します。

なぜ自宅に写真保管庫を作るのか?

  • 月額費用がゼロ: iCloudなどのクラウドサービスは、一定の容量を超えると毎月課金が必要になります。自宅にストレージ(HDDやSSD)を用意すれば、初期費用のみでテラバイト級の保存領域が手に入ります。
  • データの手元管理: 外部サービスに依存せず、大切な思い出の写真を自分自身の管理下で安全に保管できます。
  • プライバシーの保護: 写真データが意図せずクラウドのAI学習に利用されたり、流出したりするリスクを軽減できます。

構築した仕組みの全体像

graph LR
    iPhone[iPhone - Nextcloud App] -- Wi-Fi --> RPi[Raspberry Pi]
    subgraph RaspberryPiSystem
        RPi --> Storage[(External HDD)]
        RPi --> PhotoPrism[PhotoPrism - AI Gallery]
        PhotoPrism -.-> Storage
    end

    style iPhone fill:#dbeafe,stroke:#3b82f6,stroke-width:2px,color:#1e293b
    style RPi fill:#dcfce7,stroke:#22c55e,stroke-width:2px,color:#1e293b
    style Storage fill:#fef3c7,stroke:#f59e0b,stroke-width:2px,color:#1e293b
    style PhotoPrism fill:#f3e8ff,stroke:#a855f7,stroke-width:2px,color:#1e293b

私の環境では、Raspberry Pi という小型の省電力コンピューターを自宅のサーバーとして24時間稼働させ、そこに大容量のストレージを接続しています。
iPhoneからの写真転送は以下の流れで行われます。

1. アプリを使った自動アップロード

iPhoneには、「Nextcloud」や「PhotoSync」などのアプリをインストールしています。このアプリは、Wi-Fi環境に入ったタイミングで、新しく撮影された写真や動画を自動的に自宅のRaspberry Piに転送してくれます。

2. Raspberry Piでの安全な受信と保存

Raspberry Pi上では、Nextcloudサーバー(または同様のファイル共有システム)が稼働しており、iPhoneから送られてきた写真を受け取ります。受け取ったデータは、外付けの大容量ドライブに保存されます。

3. PhotoPrismを活用した美しい写真ギャラリー

単にファイルを保存するだけでは、あとから写真を見返すのが大変です。そこで私は、PhotoPrismというAI搭載の写真管理アプリをRaspberry Pi上で動かしています。
PhotoPrismは、保存された写真を自動的に解析し、被写体や場所ごとにアルバムを作成してくれます。iPhoneの「写真」アプリのように、美しく快適に過去の写真を楽しむことができます。

初心者でもできる?構築のポイント

このような仕組みを作るには、少しだけサーバーの知識が必要ですが、最近は非常に簡単になっています。

  1. Dockerの活用: サーバーソフトを直接インストールするのではなく、「Docker(ドッカー)」という仕組みを使います。これを使えば、難しい設定を省いて、ブロックを組み立てるようにNextcloudやPhotoPrismを立ち上げることができます。
  2. バックアップの二重化: 自宅サーバーはHDDが壊れるリスクがあります。大切な写真を守るため、Raspberry Piに繋いだ別のHDDへ定期的にコピー(バックアップ)する仕組みも用意しておくと完璧です。

まとめ

iPhoneの写真容量問題は、Raspberry Piを活用することでスマートに解決できます。最初は設定に少し手間がかかりますが、一度仕組みを作ってしまえば、あとは全自動で写真が自宅に溜まっていき、月額料金もかかりません。
「自分だけのクラウド」を作る楽しさもあるので、容量不足でお悩みの方はぜひ挑戦してみてください!

]]>
https://hiro-gear.com/2026/07/20/iphone%e3%81%ae%e5%86%99%e7%9c%9f%e3%82%92%e8%87%aa%e5%ae%85%e3%81%aeraspberry-pi%e3%81%ab%e8%87%aa%e5%8b%95%e4%bf%9d%e5%ad%98%ef%bc%81%e5%ae%b9%e9%87%8f%e4%b8%8d%e8%b6%b3%e3%82%92%e8%a7%a3%e6%b6%88/feed/ 0
株価自動売買のための基盤づくり ― 構想と現在の作成状況 https://hiro-gear.com/2026/03/04/%e6%a0%aa%e4%be%a1%e8%87%aa%e5%8b%95%e5%a3%b2%e8%b2%b7%e3%81%ae%e3%81%9f%e3%82%81%e3%81%ae%e5%9f%ba%e7%9b%a4%e3%81%a5%e3%81%8f%e3%82%8a-%e2%80%95-%e6%a7%8b%e6%83%b3%e3%81%a8%e7%8f%be%e5%9c%a8%e3%81%ae/ https://hiro-gear.com/2026/03/04/%e6%a0%aa%e4%be%a1%e8%87%aa%e5%8b%95%e5%a3%b2%e8%b2%b7%e3%81%ae%e3%81%9f%e3%82%81%e3%81%ae%e5%9f%ba%e7%9b%a4%e3%81%a5%e3%81%8f%e3%82%8a-%e2%80%95-%e6%a7%8b%e6%83%b3%e3%81%a8%e7%8f%be%e5%9c%a8%e3%81%ae/#respond Wed, 04 Mar 2026 13:48:47 +0000 https://gonta.f5.si/?p=225 はじめに

株価の自動売買を実現するには、「データの取得」「分析」「可視化」「注文実行」を一貫して扱う基盤が必要です。本記事では、それらを複数サービスに分離した構成で自作しているプロジェクトの構想と、現時点での実装状況をまとめます。個人の学習・検証用途を想定しており、本番の自動売買に至るまでの道のりを記録する目的です。


構想

全体像

自動売買の基盤を次のように整理しています。

レイヤー役割
データ取得株価・出来高・先物・ADR などを定期・手動で取得し、DB に蓄積する
分析蓄積データから市場の強弱・業界ランキング・異常出来高などを算出する
可視化・APIチャート表示や監視銘柄一覧を提供し、他システムから参照できる API を提供する
注文実行証券会社 API と連携し、成行・指値の注文や保有銘柄の同期を行う

データベースは TimescaleDB(PostgreSQL 系) を中核に置き、各サービスが DB または HTTP API 経由で連携する形を想定しています。将来的に「シグナル生成 → 注文」を自動化する戦略エンジンを載せる土台として、まずは取得・分析・表示・注文の各機能を独立したサービスとして実装し、組み替えや拡張がしやすいようにしています。

技術選定

  • 言語: Rust(パフォーマンスと型安全性を重視)
  • Web フレームワーク: Axum
  • DB アクセス: SQLx
  • 時系列データ: TimescaleDB のハイパーテーブルで株価を保存

現在の構成(サービス一覧)

サービス名主な役割備考
stock_get株価・先物・ADR の取得、監視銘柄管理、スケジューラー株価取得専用。Web UI 付き
stock_tran証券会社(立花証券)API 連携、注文送信・保有同期デモ/本番モード切替あり。現状は安全のため本番注文は無効化
stock_view株価チャート表示、監視銘柄一覧、データ可視化、外部 API読み取り専用ビューア+API サーバ
stock_analyze風読みシナリオ・業界ランキング・異常出来高アラート分析結果を REST API で提供
mcp銘柄検索・板情報など MCP ツールから API を利用エージェント連携用

各サービスは別ポートで起動し、必要に応じて他サービスの API や共有 DB を参照します。

chat から MCP 経由でアクセス

この基盤には、chat(例: Cursor のチャットなど)から MCP(Model Context Protocol) 経由でアクセスすることもできる。MCP サーバーが stock_get や stock_view の API を呼び出すツールを提供しており、チャット画面から監視銘柄一覧の取得・銘柄検索・板情報の参照などを自然言語で依頼できる。将来的には注文の実行も MCP 経由で行えるようにする想定だ。


作成状況

1. stock_get(株価取得システム)

状況: コア機能は実装済み。

  • 監視銘柄管理: Web UI で銘柄の追加・削除・更新。複数時間足(日足・週足・月足)に対応。
  • 株価データ取得: Stooq API をメインに使用(無料・認証不要)。J-Quants API・Yahoo Finance API はフォールバック・補完用として仕様はあるが未実装。
  • データカバレッジ管理: 銘柄・時間足ごとの連続取得期間を管理。Web UI で横棒グラフ表示。
  • スケジューラー: 指定時刻(既定 19:00)に全監視銘柄の株価を一括取得。平日のみ実行オプションあり。
  • その他: 先物(Twelve Data)、ADR(Yahoo)、日経平均株価(Yahoo)の定期取得スケジューラーあり。

2. stock_tran(注文・保有同期)

状況: 立花証券 API 連携の基本は実装済み。注文はデモ環境でのみ有効。

  • 認証・セッション: ログイン・セッション維持。テストモードフラグでデモ/本番を切替。
  • 保有銘柄同期: API から取得した保有一覧を DB に反映。Web UI で表示。
  • 注文送信: 成行・指値、買い・売りを API で送信可能。本番環境では意図的に注文送信を無効化しており、テストモード時のみ動作。
  • 注文履歴: 送信した注文を DB に記録し、一覧取得 API を提供。

本番で自動売買を行う場合は、別途「戦略エンジン」から注文 API を叩く形を想定しており、その前にリスク管理・約定確認フローなどの検討が必要です。

3. stock_view(表示・外部 API)

状況: 表示機能と外部 API は実装済み。株価チャート(複数銘柄・時間足・期間選択)、監視銘柄一覧、データ取得状況のヒートマップ、API キー認証・レート制限付きの外部 API(MCP や他ツールから利用可能)。

4. stock_analyze(分析)

状況: 3 機能とも実装済み。風読みシナリオ(日経先物から市場の強弱)、業界ランキング(ADR から業界リーダーの寄付き状況)、異常出来高アラート。いずれも REST API で結果を返し、自動売買の「シグナル」の入力として利用する想定です。


今後の予定(イメージ)

  • 戦略エンジン: 分析結果や株価データを入力にシグナルを生成し、stock_tran の注文 API を呼び出すコンポーネント。ルールベースやバックテストを検討中。
  • 本番注文の有効化: リスク管理・約定確認・障害時のフォールバックを設計したうえで判断する予定。
  • J-Quants / Yahoo の実装: stock_get のフォールバック・補完データ源として実装し、取得の安定性を高める。

まとめ

項目内容
目的株価の自動売買を実現するための基盤を、取得・分析・表示・注文に分離して構築している
現状データ取得・注文・保有同期・表示・API・分析まで一通り実装済み。注文はデモ環境のみ有効
次のステップ戦略エンジンの設計・実装と、本番注文を有効にするかどうかの判断

まだ「自動で売買が回る」ところまでは至っておらず、基盤ができつつある段階です。進捗に応じてまた記事を更新する予定です。


作成日: 2026年3月

]]>
https://hiro-gear.com/2026/03/04/%e6%a0%aa%e4%be%a1%e8%87%aa%e5%8b%95%e5%a3%b2%e8%b2%b7%e3%81%ae%e3%81%9f%e3%82%81%e3%81%ae%e5%9f%ba%e7%9b%a4%e3%81%a5%e3%81%8f%e3%82%8a-%e2%80%95-%e6%a7%8b%e6%83%b3%e3%81%a8%e7%8f%be%e5%9c%a8%e3%81%ae/feed/ 0
LVMキャッシュでHDDをSSD並に高速化する構成(dm-cache / lvmcache) https://hiro-gear.com/2026/03/04/lvm%e3%82%ad%e3%83%a3%e3%83%83%e3%82%b7%e3%83%a5%e3%81%a7hdd%e3%82%92ssd%e4%b8%a6%e3%81%ab%e9%ab%98%e9%80%9f%e5%8c%96%e3%81%99%e3%82%8b%e6%a7%8b%e6%88%90%ef%bc%88dm-cache-lvmcache%ef%bc%89/ https://hiro-gear.com/2026/03/04/lvm%e3%82%ad%e3%83%a3%e3%83%83%e3%82%b7%e3%83%a5%e3%81%a7hdd%e3%82%92ssd%e4%b8%a6%e3%81%ab%e9%ab%98%e9%80%9f%e5%8c%96%e3%81%99%e3%82%8b%e6%a7%8b%e6%88%90%ef%bc%88dm-cache-lvmcache%ef%bc%89/#respond Wed, 04 Mar 2026 13:13:40 +0000 https://gonta.f5.si/?p=218 はじめに

デスクトップPCで大容量 HDD を使いつつ、SSD 並みの速度を得たい ── そんな要望に応えるのが Linux カーネル標準の dm-cache(lvmcache) だ。本記事では、2TB HDD のルートパーティションを NVMe SSD でキャッシュし、高速化している実際の構成を紹介する。


環境

項目内容
マシンASUSTeK TUF B450M-PLUS GAMING
OSUbuntu 24.04.4 LTS (Noble Numbat)
カーネルLinux 6.8.0-101-generic (x86-64)
HDDSeagate ST2000DM001 (2TB, SATA)
NVMe SSDWD Blue SN550 500GB (WDS500G2B0C)

ストレージ構成

NVMe SSD (WD Blue SN550 / 465.8GB)
├─ nvme0n1p1  200MB  EFI       → /boot/efi
├─ nvme0n1p3  243GB  BitLocker → Windows
└─ nvme0n1p6  221GB  LVM       → キャッシュプール (180GB data + 2GB meta)

HDD (Seagate ST2000DM001 / 2TB)
├─ sda1       928GB  BitLocker → Windows
├─ sda2       488GB  LVM       → ルートLV のオリジン (320GB)
└─ sda3       447GB  ext4      → /mnt/backup

LVM 構成:
  VG: vg_main
  ├─ root_lv        320GB  ext4  → / (キャッシュ済み)
  ├─ root_lv_corig  320GB        → オリジンデータ(HDD sda2 上)
  └─ cache_lv_cpool              → キャッシュプール(SSD nvme0n1p6 上)
      ├─ cpool_cdata  180GB      → キャッシュデータ
      └─ cpool_cmeta    2GB      → キャッシュメタデータ

ポイント

  • Windows とのデュアルブート環境で、Linux パーティションのみ LVM キャッシュを適用
  • HDD の 488GB パーティション上に 320GB のルート LV を配置し、SSD の 180GB でキャッシュ
  • SSD の容量は HDD の約 56% をカバーしており、高いヒット率が期待できる

LVMキャッシュ(dm-cache)の仕組み

アプリケーション
      ↓
  root_lv(320GB / ext4 / マウント: /)
      ↓
  dm-cache(カーネル層)
  ├─ キャッシュ HIT  → SSD(NVMe)から高速読み出し
  └─ キャッシュ MISS → HDD から読み出し → SSD にキャッシュ保存

dm-cache は Linux カーネルの Device Mapper サブシステムに含まれるブロックレベルのキャッシュ機構。LVM2 が lvmcache コマンドとしてフロントエンドを提供しており、LVM の論理ボリュームに対して透過的にキャッシュを追加できる。

キャッシュモード

モード動作特徴
writethrough書き込みは HDD と SSD の両方に同時に行う安全性が高い。SSD 故障時もデータ損失なし
writeback書き込みは SSD のみ。後から HDD に非同期反映書き込みも高速だが、SSD 故障時にデータ損失リスクあり

本構成では writethrough(デフォルト)を採用。読み込みが SSD 速度になり、書き込みの安全性も確保される。

キャッシュポリシー: smq

Linux 4.2 以降のデフォルトポリシー smq(Stochastic Multiqueue) を使用。アクセス頻度に基づいてキャッシュ対象を自動選択し、メモリ消費も少ない優れたアルゴリズム。


セットアップ手順

1. 前提条件

  • LVM2 がインストール済みであること
  • キャッシュに使う SSD パーティションが同じ VG に属していること
sudo apt install lvm2

2. 物理ボリューム(PV)の作成

# HDD パーティション
sudo pvcreate /dev/sda2

# SSD パーティション
sudo pvcreate /dev/nvme0n1p6

3. ボリュームグループ(VG)の作成

sudo vgcreate vg_main /dev/sda2 /dev/nvme0n1p6

4. ルート論理ボリューム(LV)の作成

# HDD 上にオリジン LV を作成
sudo lvcreate -L 320G -n root_lv vg_main /dev/sda2

# ファイルシステム作成
sudo mkfs.ext4 /dev/vg_main/root_lv

5. キャッシュプールの作成とアタッチ

# SSD 上にキャッシュプール LV を作成
sudo lvcreate --type cache-pool -L 180G -n cache_lv_cpool vg_main /dev/nvme0n1p6

# キャッシュプールをルート LV にアタッチ
sudo lvconvert --type cache --cachepool vg_main/cache_lv_cpool vg_main/root_lv

これだけで root_lv へのアクセスが自動的に SSD キャッシュ経由になる。既存のマウントポイントやファイルシステムの変更は不要。

6. 確認

# キャッシュの状態確認
sudo lvs -a -o +cache_mode,cache_policy vg_main

# Device Mapper の状態確認
sudo dmsetup status vg_main-root_lv

現在の使用状況

$ df -h /
Filesystem                    Size  Used Avail Use%  Mounted on
/dev/mapper/vg_main-root_lv  315G  107G  194G  36%  /
項目
ルート LV サイズ320GB(実効 315GB)
使用量107GB(36%)
キャッシュデータサイズ180GB
キャッシュメタデータサイズ2GB
キャッシュモードwritethrough
キャッシュポリシーsmq

使用量 107GB に対してキャッシュが 180GB あるため、頻繁にアクセスされるデータのほぼすべてが SSD 上にキャッシュされ、高速にアクセスできる状態にある。


Bcache との比較

同じ「SSD で HDD をキャッシュする」仕組みとして Bcache がある(Raspberry Pi 5 での Bcache 構成記事を参照)。両者の違いを整理する。

比較項目lvmcache(dm-cache)Bcache
管理方法LVM コマンドで統合管理専用ツール(bcache-tools)
カーネル統合Device Mapper の一部独立したカーネルモジュール
既存 LV への追加容易(lvconvert 一発)デバイス再作成が必要
RAID との組み合わせLVM RAID と統合可能mdadm RAID の上に構成
キャッシュポリシーsmq(自動最適化)lru / fifo
運用の柔軟性キャッシュの着脱が容易分離手順がやや複雑

LVM を既に使っている環境であれば lvmcache が管理しやすく、Bcache は LVM を使わない構成や Raspberry Pi のような環境で手軽に導入できる利点がある。


まとめ

構成要素役割
HDD(Seagate 2TB)大容量データの永続保存
NVMe SSD(WD Blue 500GB)180GB のキャッシュで読み込みを高速化
lvmcache(dm-cache)ブロックレベルで透過的にキャッシュ
writethrough モードデータ安全性を確保しつつ読み込みを高速化

LVM キャッシュは既存の LVM 環境に対して lvconvert 一発でキャッシュを追加でき、ファイルシステムの変更も不要という手軽さが最大の利点だ。2TB の HDD を 500GB の NVMe SSD でキャッシュすることで、日常的なデスクトップ用途ではほぼ SSD の速度で動作する環境を実現できている。


作成日: 2026年3月

]]>
https://hiro-gear.com/2026/03/04/lvm%e3%82%ad%e3%83%a3%e3%83%83%e3%82%b7%e3%83%a5%e3%81%a7hdd%e3%82%92ssd%e4%b8%a6%e3%81%ab%e9%ab%98%e9%80%9f%e5%8c%96%e3%81%99%e3%82%8b%e6%a7%8b%e6%88%90%ef%bc%88dm-cache-lvmcache%ef%bc%89/feed/ 0
Raspberry Pi 5 で Bcache を使ったストレージ高速化構成 https://hiro-gear.com/2026/03/04/raspberry-pi-5-%e3%81%a7-bcache-%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e3%82%b9%e3%83%88%e3%83%ac%e3%83%bc%e3%82%b8%e9%ab%98%e9%80%9f%e5%8c%96%e6%a7%8b%e6%88%90/ https://hiro-gear.com/2026/03/04/raspberry-pi-5-%e3%81%a7-bcache-%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e3%82%b9%e3%83%88%e3%83%ac%e3%83%bc%e3%82%b8%e9%ab%98%e9%80%9f%e5%8c%96%e6%a7%8b%e6%88%90/#respond Wed, 04 Mar 2026 12:35:38 +0000 https://gonta.f5.si/?p=211 はじめに

Raspberry Pi 5 は USB や SATA 接続のストレージを活用できるが、大容量 HDD は読み書き速度が遅いという課題がある。
本記事では、安価な SSD をキャッシュとして使う Linux のカーネル機能 Bcache を活用し、HDD の速度を SSD 並みに引き上げる構成を紹介する。


環境

項目 内容
機器 Raspberry Pi 5 Model B (8GB RAM)
OS Debian Bookworm (Linux 6.12, aarch64)
ブート microSD 119GB (/boot/firmware)

ストレージ構成

SSD (MSI S270 240GB / SATA)  ← キャッシュデバイス
 └─ sda2 (200GB) → bcache キャッシュ

HDD1 (1.8TB / sdb)
 ├─ sdb1 (1.5TB) ─┐
 └─ sdb2 (327GB)  ─┤
                   │ RAID1 (ミラーリング)
HDD2 (3.6TB / sdc) │
 ├─ sdc1 (1.5TB) ─┤→ md2  (1.5TB RAID1) → bcache0 → /data (1.5TB)
 └─ sdc3 (336GB)  ─┘→ md127 (327GB RAID1) → bcache1 → /     (327GB)

ポイント

  • 2 台の HDD を RAID1(ミラーリング) で冗長化 → 片方の HDD が壊れてもデータを保護
  • SSD をキャッシュ として RAID1 ボリュームに重ねることでアクセス速度を向上
  • ルートパーティション (/) とデータパーティション (/data) をそれぞれ独立した bcache デバイスとして構成

RAID1(ミラーリング)の構成

RAID1 とは

RAID1 は 2 台以上のディスクに同じデータを書き込むミラーリング方式。
片方のディスクが故障しても、もう片方から読み出し続けられるためデータを失わない

書き込み → [HDD1] ─┐
                   ├─ 同一データ
           [HDD2] ─┘

HDD1 故障時 → HDD2 から自動的に読み続ける(無停止)

本構成での RAID1

アレイ 構成デバイス サイズ マウント先
md2 sdb1 + sdc1 1.5TB bcache0 経由 → /data
md127 sdb2 + sdc3 327GB bcache1 経由 → /

RAID1 セットアップ手順(mdadm)

1. mdadm インストール

sudo apt install mdadm

2. RAID1 アレイ作成

# /data 用 (1.5TB × 2)
sudo mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

# / 用 (327GB × 2)
sudo mdadm --create /dev/md127 --level=1 --raid-devices=2 /dev/sdb2 /dev/sdc3

3. 設定を永続化

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u

RAID1 の状態確認

cat /proc/mdstat

正常時の出力例:

md2 : active raid1 sdc1[1] sdb1[2]
      1610480640 blocks super 1.2 [2/2] [UU]

md127 : active raid1 sdc3[0] sdb2[1]
      342768704 blocks super 1.2 [2/2] [UU]

[UU] = 両ディスク正常稼働。[_U][U_] になった場合は片方が故障。

故障時の対応

# 故障ディスクを取り外す
sudo mdadm /dev/md2 --fail /dev/sdb1 --remove /dev/sdb1

# 新しいディスクを追加してリビルド
sudo mdadm /dev/md2 --add /dev/sdb1

# リビルド進捗確認
watch cat /proc/mdstat

Bcache の設定内容

bcache0(/data 用・1.5TB)

パラメータ 説明
cache_mode writeback 書き込みもキャッシュ経由(高速)
sequential_cutoff 0(無効) シーケンシャルアクセスもキャッシュ対象
readahead_cache_policy all 先読みもキャッシュに乗せる
状態 clean キャッシュと本体が同期済み

bcache1(/ 用・327GB)

パラメータ 説明
cache_mode writeback 書き込みもキャッシュ経由(高速)
sequential_cutoff 4MB 4MB 以上の連続アクセスはキャッシュをバイパス
readahead_cache_policy all 先読みもキャッシュに乗せる
状態 dirty キャッシュに未書き込みデータあり(正常)

キャッシュヒット率(実績)

デバイス ヒット数 ミス数 ヒット率
bcache0 (/data) 920,178 72,257 92%
bcache1 (/) 2,205,814 75,134 96%

ルートパーティションで 96% のキャッシュヒット率を達成しており、HDD 単体と比較して体感速度が大幅に向上している。


Bcache の仕組み

アプリ
  ↓
bcache(カーネル層)
  ├─ キャッシュHIT → SSD から高速読み出し(μs オーダー)
  └─ キャッシュMISS → HDD から読み出し&SSD にキャッシュ保存(ms オーダー)

writeback モードとは

書き込みリクエストをまず SSD に書き込み、後から HDD へ非同期に反映するモード。

  • メリット: 書き込み速度が SSD 速度になる
  • デメリット: SSD が突然故障した場合、キャッシュ上の未書き込みデータが失われる可能性がある(本構成では RAID1 で HDD 側を保護)

Bcache セットアップ手順(概要)

1. パッケージインストール

sudo apt install bcache-tools

2. キャッシュデバイスの作成(SSD 側)

sudo make-bcache -C /dev/sda2

3. バッキングデバイスの作成(HDD/RAID 側)

sudo make-bcache -B /dev/md2
sudo make-bcache -B /dev/md127

4. キャッシュデバイスを登録・アタッチ

# キャッシュセット UUID を確認
ls /sys/fs/bcache/

# バッキングデバイスにキャッシュをアタッチ
echo <UUID> | sudo tee /sys/block/bcache0/bcache/attach
echo <UUID> | sudo tee /sys/block/bcache1/bcache/attach

5. キャッシュモードを writeback に変更

echo writeback | sudo tee /sys/block/bcache0/bcache/cache_mode
echo writeback | sudo tee /sys/block/bcache1/bcache/cache_mode

6. 設定を永続化(/etc/rc.localudev ルールで起動時に適用)

# /etc/rc.local の例
echo writeback > /sys/block/bcache0/bcache/cache_mode
echo writeback > /sys/block/bcache1/bcache/cache_mode
echo 0 > /sys/block/bcache0/bcache/sequential_cutoff

現在の使用状況

/dev/bcache1 (/)    321GB 中 117GB 使用(39%)
/dev/bcache0 (/data) 1.5TB 中 601GB 使用(42%)

まとめ

構成要素 役割
HDD × 2(RAID1) 大容量・冗長性の確保
SSD(Bcache キャッシュ) アクセス速度の向上
writeback モード 書き込み速度の最大化

Raspberry Pi 5 のような非力なシングルボードコンピューターでも、Bcache を組み合わせることで 実用的なファイルサーバー・ホームサーバー として活用できる。
96% というキャッシュヒット率は、日常的なワークロードではほぼ SSD の速度で動作していることを意味する。


作成日: 2026年3月

]]>
https://hiro-gear.com/2026/03/04/raspberry-pi-5-%e3%81%a7-bcache-%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e3%82%b9%e3%83%88%e3%83%ac%e3%83%bc%e3%82%b8%e9%ab%98%e9%80%9f%e5%8c%96%e6%a7%8b%e6%88%90/feed/ 0
T-CROSSにてEPC(警告灯)が表示された https://hiro-gear.com/2025/12/28/t-cross%e3%81%ab%e3%81%a6epc%ef%bc%88%e8%ad%a6%e5%91%8a%e7%81%af%ef%bc%89%e3%81%8c%e8%a1%a8%e7%a4%ba%e3%81%95%e3%82%8c%e3%81%9f/ Sun, 28 Dec 2025 02:26:52 +0000 https://gonta.f5.si/?p=181 import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true });

起きた事象

運転中に突然、エンジンのふけが悪くなり警告灯が付いた。6年目、6万キロを走っているのでいろいろと問題は出るので、淡々とOBDⅡを接続しエラーコードを確認。

エラーコード:P302

二番のシリンダの着火不良とのこと。エアフィルターを外し、イグニッションコイルを外し、プラグを確認。割と汚れているので、インジェクションクリーナーとパーツクリーナで洗浄し、一時的に復活した。

イグニッションコイルの確認

プラグの状態

くみ上げる際にイグニションコイルを2番と3番のシリンダで交換をし、再発時に2番で問題がおきたら、プラグの問題であるかを切り分けようとくみ上げた。

症状の再発

4日後、事象が再発した。エラーコードは P302P300

一時的に、P0300, P0302, P0303 のエラーも出た。

エラーコードの再確認

エラーコードには出なかったが、ブースト圧力モニターユニットの結果も不合格となった。
ディーラに聞いてみたところ二次災害的なものではないかとのこと。これも気になるのでしばらくは様子見とする。

ブースト圧力モニター

ディーラーでの対応

P300P302 の影響を受けている可能性がありそうだったため、プラグ交換が必要と判断しディーラーで交換をお願いした。
新品のプラグに交換しても P302 が消えないとのこと。イグニッションコイルを交換したことは伝えた上でのディーラーの見解は、現時点では2番(旧3番)のイグニッションコイル不良とのこと。

2番のコイルを交換して、無事に事象は改善された。(約2.5万 ※部品代約1.8万)

壊れたイグニッションコイルは以下の型番のコイルだった。

04E.905.110.M

壊れたイグニッションコイル

ネットを見てみるとわりと5万キロ以下で故障することが多い製品とのことだった。
ちなみに交換された部品は 04C.905.110.N

04E04C の違いは色んな説が見つかったが、少なくともBOSCHでは区別をしていないものだった。
語尾の MN は世代を指すものらしく、N の方があたらしいものとのこと。

今回は、よくわからないが2番シリンダのイグニションコイル(旧3番シリンダで使用)の交換で直ったが、これはもともと3番についていたコイル。そのため、点火プラグで問題がおきるか、または別箇所で問題がおきるとみている。別箇所の場合、ディーラーに世話になるため、今回はディーラーで修理してもらうことにした。


その後事象

警告灯やエラーコードはでないものの、発進時に1気筒の調子が悪い。ちょっとだけがたつくため、3番にあるイグニッションコイルを、互換品と言われている以下のBosch製のものに交換。

  • BOSCH(ボッシュ) 車用イグニッションコイル フォルクスワーゲンアップ/ゴルフ VII/ポロ等
  • サイズ: 22×40×72mm
  • 型番: 0986221057
  • 価格: 約8千円とお手頃

これで2、3番が新しいイグニッションコイルとなりかなり安定した。
今のところ他に不具合はないが、念のため1番用のイグニッションコイルを買っておこうかなと。

]]>