記事のターゲット
- WindowsでLinux用のプログラムを作る。
- 最終的にはLinux側でビルドしなくてはならないため、出来ればLinux上でビルドをしながら開発したい。
- デバッグはプリント文いれて何とかする。
- VSCodeで開発したい。
最終目標
手順
- VSCodeをDL・インストールする。
- Remote Workspaceというプラグインを入れる(リモート先をワークスペースに出来る)。
- HotReloadっぽいことをやるために、ソースファイルを監視させるプロセスを作る。※ソースの変更を感知したら、
make && ./hello
を実行してもらう。※ファイル監視 → 変更を感知 → ビルド
- ファイル監視プロセスを起動しながら、ソースを変更していく。
1. VSCodeをDL・インストールする
2. Remote Workspaceというプラグインを入れる
Remoto Wrokspaceを入れたら
{
"folders": [
{
"uri": "sftp://user:pass@localhost:2222/home/",
"name": "Test"
}
]
}
.XXX.code-workspace
を作る。その後VSCode上部のファイル>ワークスペースを開く
から選択をすると、リモート先のディレクトリが見れるようになる(権限があれば編集も可能)
↓この方が詳しくまとめてくれています。
https://qiita.com/jerrywdlee/items/b239958d3df04364875d
3. HotReloadっぽいことをやるために…
ファイル監視 → 変更を感知 → ビルド
上記を実現するために、今回はPythonのwatchdog
を用いた。以下、ソース
# -*- coding: utf-8 -*-
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
import os
import time
import sys
import subprocess
import hashlib
hashes = {}
target_dir = ""
cmd = ""
class ChangeHandler(FileSystemEventHandler):
def on_modified(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
with open(filepath, 'rb') as f:
checksum = hashlib.md5(f.read()).hexdigest()
if filename not in hashes or (hashes[filename] != checksum):
# コマンド実行
subprocess.Popen(cmd, shell=True)
else:
# ハッシュが既存のものと変更していない
pass
if __name__ in '__main__':
args = sys.argv
target_dir = args[1]
cmd = args[2]
while 1:
event_handler = ChangeHandler()
observer = Observer()
observer.schedule(event_handler, target_dir, recursive=True)
observer.start()
print("Start!")
try:
while True:
time.sleep(0.1)
except KeyboardInterrupt:
observer.stop()
observer.join()
ARG1="./src"
ARG2="
make &&
echo ++++++++++++++ &&
./bat/hello &&
echo ++++++++++++++"
python3 dir_watch.py $ARG1 "$ARG2"
# ./dist/dir_watch $ARG1 "$ARG2"
引数1で渡されたPathの./src
下を監視して、ファイルに変更があれば、引数2で渡されたコマンドを実行している。
また、pyinstaller
を使うと、ワンバイナリに出来るため、Pythonが入っていない環境でも、HotReloadもどきの事が出来るようになる。
※監視対象とするPathに実行ファイルを生成しようとすると、大変なことになる!!!なので、実行ファイルを生成する場所は別ディレクトリにする。
pyinstaller dir_watch.py --onefile
4. ファイル監視プロセスを起動しながら…
VSCodeのターミナルから、sshでリモート先に入り、3.
で作成したプログラムを実行する。
その状態でソースの変更&保存をすると、HotReloadもどきの動きをしてくれる。
参考URL
https://qiita.com/jerrywdlee/items/b239958d3df04364875d
https://qiita.com/hirohiro77/items/466e411fa41f144c8b2a
https://python-minutes.blogspot.com/2017/06/python.html
http://ur0.work/ahCv