(32) プロジェクト再始動とBLE開発の第一歩 - 開発ログ@2025/06/29(日)
この日は、久々にプロジェクトを再始動させるべく、GitHubのプライベートリポジトリを活用して開発を進めることに決めた記念すべき一日だった。以前はプロジェクトを細かく分けすぎた反省を活かし、今回は「One Big Project」として、FlyoutMenuやBLE接続を中心に、MAUIを使ったクロスプラットフォーム開発に挑戦。手順書ベースで進めつつ、プラットフォームごとの課題にも向き合った一日を振り返る。
プロジェクトの再構築とFlyoutMenuの確認
ここでは、プロジェクトの全体構造を再定義し、FlyoutMenuの動作確認を行ったプロセスを振り返る。GitHubでの共同作業の基盤を整え、WindowsとMac環境での開発環境をチェックした話や、プロジェクトを一つの大きな単位で進める方針について、ざっくりまとめてみるよ。
GitHubプライベートリポジトリでの共同作業スタート
一晩じっくり考えた結果、GitHubのプライベートリポジトリを使って、お互いにプッシュ・プルしながら開発を進めることに決定。
これまでのプロジェクトは、細かく分割しすぎて管理が大変だったから、今回は「One Big Project」として、全部まとめて進める方針に切り替えた。この選択、意外といい感じで、プロジェクトの全体像が見やすくなったよ。開発は基本的にWindows環境で行いつつ、必要に応じてMac環境も活用する流れ。まずは、FlyoutMenuの動作確認からスタート。
Windows環境ではWinUIとAndroid、Mac環境ではMacCatalystとiOSでチェックしたけど、思った以上にスムーズに動いてくれて一安心。このままの勢いで進められそう!

プロジェクト構造の設計と共有モジュールの整理
プロジェクトの構造をどうするか、頭を悩ませつつ、こんな感じで整理してみた。`Features`フォルダに`FeatureA`や`FeatureB`を置いて、それぞれに`ViewModels`、`Views`、`Models`、`Services`を入れる。
で、アプリケーション全体で使う共通モジュールは`Shared`フォルダにまとめて、将来的に他のアプリでも使えるモジュールが出てきたら`Core`に切り出す予定。あと、BLE関連は完全に独立したフォルダで管理することに。これで、MAUIを使ったクロスプラットフォーム開発の基盤が整った感じ。
FlyoutMenuの動作確認も終わって、プロジェクトの骨組みがしっかりしてきたから、次は具体的な機能実装に進むぞ!

BLE接続機能の実装とプラットフォーム対応
BLE接続機能の実装に本腰を入れて取り組んだパート。Connect機能のViewModelから始めて、Scan機能の実装、さらにはプラットフォームごとの課題対応まで、結構濃密な作業だった。Androidのパーミッション問題や、MacCatalystの設定変更など、プラットフォームごとの違いに振り回されつつも、着実に前進した話だよ。
Connect機能のViewModel実装と画面遷移の構築
BLE接続の第一歩として、Connect機能のViewModelから実装開始。手順書ベースで進めて、`RelayCommand`を使って`Scan`、`Connect`、`Disconnect`、`List`、`Edit`、`Clear`を実装。
さらに、`Scan`、`DeviceInfoList`、`DeviceInfoEdit`もそれぞれコマンドを整理して、画面遷移をサクッと作れるようにした。MAUIに慣れてきたおかげで、ボタン配置や画面遷移くらいなら、もう手慣れたもんよ。ViewModelの実装は順調で、BLEのScan機能に進む準備が整った。
この辺は、過去の経験も活きて、思ったよりスムーズに進んだな。次はいよいよ、BLEデバイスのスキャン実装だ!

BLE Scan機能の実装とプラットフォームごとの課題対応
Scan機能の実装に取り掛かったけど、プラットフォームごとの違いにちょっと苦労した。
Windowsは特に問題なくスキャンが動いたけど、Androidは最初まるっきりスキャンできず。調べたら、Androidはパーミッションのリクエストを手動で処理しないといけないんだね。旧ソースコードから引っ張ってきたコードでなんとか解決。`Platforms`フォルダに配置したけど、最初は`Ble`配下に置こうとしたらIDEのIntelliSenseがエラーを吐き続けて断念。結局、ルートの`Platforms`に置くことにした。
MacCatalystとiOSは、plistの設定変更だけでスムーズに動いたよ。この辺、プラットフォームごとの癖を把握するいい機会になった。

BleDeviceManagerとBleDeviceInfoManagerの導入
Scanしたデバイスの選択機能を実装する段階で、`BleDeviceManager`と`BleDeviceInfoManager`を導入。
`BleDeviceInfoManager`でデータの管理、`BleDeviceManager`で接続や選択されたデバイスの管理を担当させる形に。設計としては、データの流れがクリアになってきた感じ。Windows、Android、MacCatalyst、iOSでそれぞれ動作確認しつつ、プラットフォームごとの微調整を加えた。
接続処理の実装はまだこれからだけど、ここまででBLE機能の基盤はかなり固まってきた。問題は、実際の接続テストでどんな課題が出てくるかだな。

まとめ
この日の作業は、プロジェクトの再始動とBLE接続機能の基盤構築に注力した一日だった。
GitHubのプライベートリポジトリを活用することで、共同作業の基盤を整え、以前の反省を活かして「One Big Project」としてプロジェクトをまとめた。FlyoutMenuの動作確認では、WindowsとMac環境でのクロスプラットフォーム対応がスムーズに進み、MAUIの扱いにも慣れてきた実感がある。BLE接続機能では、ConnectのViewModel実装からScan機能、プラットフォームごとの課題対応まで、着実に前進。Androidのパーミッション問題やIDEの挙動に振り回されつつも、旧コードや設定変更で乗り切った。`BleDeviceManager`と`BleDeviceInfoManager`の導入で、データと接続の管理も整理でき、接続テストに向けて基盤が整った。
全体的に、計画通り進んだ上に、プラットフォームごとの違いを学べたのは大きな収穫だったよ。
これから
明日以降は、BLE接続機能の完成度をさらに高めるのが目標だ。
まずは、Scanしたデバイスの選択機能を実装し、`BleDeviceManager`を使った接続処理をテストする。プラットフォームごとの挙動の違い、特にAndroidの癖やMacCatalystの設定周りには引き続き注意が必要そう。接続テストで新しい課題が出てくる可能性もあるから、旧コードやドキュメントを参考にしつつ、柔軟に対応していきたい。プロジェクト全体としては、FlyoutMenu以外の機能も徐々に肉付けしていく予定。
`Shared`モジュールの整理や、将来的な`Core`への切り出しも視野に入れつつ、まずは目の前のBLE接続をしっかり仕上げたい。MAUIの扱いにも慣れてきたし、この勢いで一気に形にしていこう!
