PyCharmからRasberry Piにssh接続して開発する

# はじめに
JetBrainsのIDEじゃないと開発できない体になってしまったので最初はRaspberryPi（以下ラズパイ）にPyCharm入れようと思ったのですがあまりにも非力すぎてIDE動かすのは無理ということでMacのPyCharmから操作できないかなと思って調べました。
公式のリファレンスが古い＆ディレクトリのマッピングまでは載ってなかったので書いておきたいと思います。
**ssh接続はProfessional版でしかできません。**

# 環境
macOS Catalina
Raspberry Pi 3 Model B+  OS:Raspberry Pi OS(GUI版で検証しています)
PyCharm 2021.1.2 Professional

# 本文
## ０. 前準備
マイコンでssh接続とかVNC使うときのお決まりを書いてるだけなのでわかる方は読み飛ばしてください。
### IP固定化
起動する度に接続先修正するのが微妙なので固定化しちゃいます。
以下を参考に固定化しましょう。

https://mugeek.hatenablog.com/entry/2019/05/27/230256

### ラズパイ側のSSH有効化
GUIなら設定からSSHを有効にするだけです。

https://qiita.com/m4saka/items/e79f8a4b4e24dcd99406

## 1. ラズパイ側
Mac側のディレクトリとマッピングするためのディレクトリを作成しておきます。

```Bash:RaspberryPi
pi@raspberrypi:~ $ mkdir qiitaproject
pi@raspberrypi:~ $ ls
Bookshelf  Documents  Music     Public     Videos     nfcpy
Desktop    Downloads  Pictures  Templates  nfclocker  qiitaproject
```

## 2. PyCharm側
任意のPythonプロジェクトを作成して右下のインタプリタの設定でInterpreter Setting...を選択
![スクリーンショット 2021-09-06 17.41.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/87d78e36-c3f0-3e62-7a76-fa7f9187ed9e.png)

インタプリタの設定が出るので Python Interpreterの歯車からAddを選択
![スクリーンショット 2021-09-06 17.44.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/b79c9a2e-fe45-83d7-f009-fd0dae866efc.png)

SSH InterpreterのNew server configurationのHostにラズパイのIPを指定
UserNameはラズパイのユーザー名（デフォルトでpi）
Portはデフォルトで22なので何もしてなければそのままで大丈夫です。
![スクリーンショット 2021-09-06 16.50.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/3ac51ef7-7cfe-c12f-020d-355731f13383.png)

次画面のpasswordはユーザー名に対するパスワードを入力してください。（さすがに貼ると怒られそうなので）

正常に接続できると使うインタプリタの設定画面が出ます。
デフォルトが/usr/bin/pythonになっています。
これはRaspberry Pi OS:2021-05-07の時点でPython2.7です。
2系を使う方はそのままで大丈夫ですが自分は3系にしたいので変更します。
右のディレクトリマークをクリックするとラズパイに接続して中身が見れるのでデフォルトで入っている3系である/usr/bin/python3.7のインタプリタを選択します。
Sync foldersには最初に作成したマッピングしたいディレクトリを選択します。
![スクリーンショット 2021-09-06 17.50.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/64e43b93-6c78-d219-4f7d-c5356569339a.png)
Local PathがMac側の現在のPyCharmプロジェクト Remote Pathが最初に作成したラズパイ側のディレクトリです。

Execute code using  this ~ sudoはPyCharmからコマンドを実行するときにsudoをつけるかどうかというチェックボックスなので、ラズパイ側で特に何もしてなければチェックしておきましょう。
Automaticlally ~ serverはファイルの変更があった場合自動でラズパイにアップロードしてくれるモノですが設定しても次回起動時から手動に勝手に変わるのでどちらでも大丈夫です。
以下はチェックしなかった場合で進めます。

Finishを押してこんな感じになればOKです。
![スクリーンショット 2021-09-06 17.56.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/70e7d9a7-bdff-56cf-2c45-9abae21a232a.png)

OKを押すと初回のみラズパイ側との初回設定が始まるので待ちます。（5分くらいかかります）

## 3.実行
準備はできたので早速ラズパイ側にコードをアップロードして実行してみましょう。
アップロードしたいファイルを右クリックしてDeployment→Upload to... でアップロードします。
![スクリーンショット 2021-09-06 17.59.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/d75788a7-3c66-4e3f-744a-560c234e5eef.png)

PyCharmでRun

```Bash:PyCharm
ssh://pi@192.168.11.50:22/usr/bin/python3.7 -u /home/pi/qiitaproject/main.py
Hi, PyCharm

Process finished with exit code 0
```

### 最後のRunでディレクトリが見つからないエラーが出る場合
今回やっていて毎回再現できるわけではないのですが、アップロードはできるけどRunしたときにうまくパスを入れてくれないエラーが出てきました。
その場合はもう一度以下のPython Interpreterからマッピングし直してみてください。
![スクリーンショット 2021-09-06 18.31.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/eb7200ae-135f-e81f-d664-83fb5e017543.png)

これじゃ動かないよとかありましたらコメントください。

# 参考
https://pleiades.io/help/pycharm/configuring-remote-interpreters-via-ssh.html