📚

【ポートフォリオ 05 検証】Python CLI メッセージアプリをラズパイ内で実行してみた

に公開

はじめに

以下、UNIXドメインソケットを使って作成した CLI メッセージアプリがサーバ上(Ubuntu Serverをインストールした Raspberry Pi4)で動作するかを検証したプロセスをまとめていきます。

https://qiita.com/mabo23/items/5dfb0ae6af6bbdaf3486

前提

  • Ubuntu Server をインストールした Raspberry Pi 4(以下、「ラズパイ」と表記)をセット
  • 使用PCは MacBook Pro(M2)
  • ラズパイは MacBook・GitHubとSSH連携済み(git pullでプログラムを取得)
  • ラズパイ・使用中の MacBook は同じローカルネットワークに所属
  • サーバはバックグラウンドで起動

ディレクトリ構成

backend-portfolio
    └──local_chat_messenger/
          ├── src/
          │    ├── server.py
          │    └── client.py
          ├── tmp/
          ├── venv/ # 仮想環境構築後
          ├── config.json
          ├── README.md
          └── requirements.txt

実際の git pull 後の動作検証(途中のエラー解決手順込み)

1. 仮想環境の構築

Image 2025-09-15 at 12.41.jpeg

実行コマンド
python3 -m venv venv

通常のコマンド操作よりも少し実行後に時間がかかりました。

2. ディレクトリの確認

Image 2025-09-15 at 12.50.jpeg

venv/ が作成されたことを確認

3. 仮想環境の有効化

Image 2025-09-15 at 12.51.jpeg

実行コマンド
source venv/bin/activate

4. 仮想環境内で依存関係をインストール

Image 2025-09-15 at 12.54.jpeg

実行コマンド
pip install -r requirements.txt

これでプログラムで使用するパッケージをインストールします。

5. サーバをバックグラウンドで起動

Image 2025-09-15 at 12.57.jpeg

ここでエラー発生

実行コマンド
python3 src/server.py &

Image 2025-09-15 at 12.59.jpeg

フォアグラウンドで実行しても結果は同じ

6. ファイルの確認

Image 2025-09-15 at 13.02.jpeg

ファイルまたはディレクトリがみつからないということなので、ファイルがあるかを確認

しかし、実際にファイルは存在していることを確認

もう一度エラーメッセージをチェック

Image 2025-09-15 at 12.59.jpeg

ここで、server_address がバインドできていないのでは?と仮説を持つ

7. ファイルパスの確認

Image 2025-09-15 at 13.05.jpeg

ファイルパスは存在している。
ということは、ファイルパス自体が間違っている可能性がある。

8. vim でファイルパスを編集

Image 2025-09-15 at 13.08.jpeg

9. プロジェクトディレクトリで再度サーバをバックグラウンドで起動

Image 2025-09-15 at 13.11.jpeg

うまくいった
→ ファイルパスに問題があったと判明

10. クライアントを起動

Image 2025-09-15 at 13.13.jpeg

11. メッセージを入力・送信

「Hello World」と入力
Image 2025-09-15 at 13.14.jpeg

  • クライアント側の送信
  • サーバ側の受信
  • サーバ側の送信
  • クライアント側の受信
  • サーバ待機
  • クライアント終了

正しく動作することが確認できました。

エラーの原因: 実行するディレクトリによる違い

tmp/udp-server-socket-file という相対パスは、プログラムを実行したカレントディレクトリを基準とします。

この場合、tmp/ ディレクトリは 04_local_chat_messenger/ の中を探します。

しかし、server.py の中で相対パスを使用した場合、Pythonは server.py があるディレクトリ、つまり src/ を基準にしようとします。
そのため、src/tmp/udp-server-socket-fileというパスを探しに行ってしまい、ファイルが見つからずにエラーとなってしまっていたということです。

まとめ

この記事では、作成した CLI メッセージアプリが動作するか、検証したプロセスを一つの記事としてまとめさせていただきました。

カレントディレクトリをどことして判断するかによって、実行結果が変わってしまうことには気をつけていきたいと思います。

また、絶対パス・相対パスによる違いについて自分の弱点であることに気づけたことが今回の収穫でした。

最後までお読みいただき、ありがとうございました。

Discussion