feat: Raspberry Pi 限定の BLE ロジックを Transport 抽象層で汎用化 - #40
Conversation
BLE(bleak / PyBluez L2CAP / bluetoothctl)に固定されていた送受信を transport.py の TransportService(scan / start_discoverable / send_payload / receive_payload)で抽象化し、config/transport.json の mode で「ble」と 「file」(共有 inbox + スキャン結果 CSV)を切り替えられるようにした。 PyBluez / bleak は実行時 import に隔離し、macOS 等でも import と file 方式の実行が可能。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com>
🤖 AI ReviewPR レビュー1. 概要本PRは、Raspberry Pi 限定だった BLE 通信ロジックを Transport 抽象層( 2. 良い点
3. 懸念点・改善提案(重要度順)【高】file 方式の受信が無限ループになる可能性 【高】file 方式のファイル名衝突リスク 【中】 【中】file 方式の 【低】 【低】 【低】README の file 方式の説明がやや冗長 4. セキュリティ・バグの可能性
|
CI の pylint(Python 3.9 で全 *.py を対象)で検出された C0116 / C0415 / C1803 / C0301 / E1111 / E1128 / R0903 を修正。 併せて Python 3.9 互換のため PEP 604 記法(Path | None)を Optional[Path] に変更した。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com>
AI レビューボットの生成失敗(NotFoundError)を受けて再実行を促す。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com>
背景
変更内容
src/ble_blockchain/transport.pyを新設TransportService(Protocol:scan/start_discoverable/send_payload/receive_payload)BleTransportService(既存 BLE 実装を wrap。PyBluez / bleak は実行時 import に隔離し、モジュール import 時に解決しない)load_transport(settings)(config/transport.jsonのmodeで ble / file を選択)src/ble_blockchain/transport_file.pyを新設FileTransportService(共有 inbox モデル: 送信は受信者 ID プレフィックスのファイルを書き、受信は自分のsender_idプレフィックスのファイルを読む。スキャン結果はscan_csvから読む)config/transport.jsonを新設(mode: "ble"(既定)/"file")app/main.pyの BLE 直結コード(scan / SEND / l2cap_server / start_discoverable の直 import)を transport 経由に書き換えconfig/loader.pyにTransportConfig/load_transport_config()追加、device_settings.pyにsettings_path追加、ble/start_discoverable.pyのimport subprocessを実行時化tests/unit/test_transport.py/test_transport_file.py/test_main_transport.py(計 25 件)影響範囲
src/ble_blockchain/config/(JSON)transport.json追加(mode 切替)settings*.json/keys/*.pemaddr*キー互換維持。鍵もそのまま使用)tests/docs//docs/diagrams/mode: "ble"既定で従来と同じ挙動。install_package.pyも変更なし)要件
config/transport.jsonのmodeに応じてload_transport(settings)が ble / file 実装を返すscan_csv(bt_addrs/device_nameの 2 列 CSV)からスキャン結果を読み、共有 inbox でペイロードを送受信できるimport ble_blockchain.app.mainが成功する)セルフチェックリスト
共通
本リポジトリ(BLE_Blockchain)
uv run pytestが通ること(79 passed)config/transport.jsonに集約)keys/*.pemや.envをコミットしていないことdocs/diagrams/ble-blockchain-architecture.drawioを更新したこと(今回は未更新)任意
uv run pylint(CI と同様)をローカルで確認したこと(10.00/10)uv sync --group docs→cd docs && make htmlで Sphinx がビルドできること(build succeeded)🤖 Generated with Claude Code
Made with Cursor