Djangoの開発用サーバーを使ってデスクトップアプリを作成できないかなと考えていました。
というのも、Excel VBAのユーザーフォームで項目100個以上あるようなシステムがあるのですが、改修が非常にめんどくさい。HTML+JavaScriptなら改修は比較的楽になるので、社内Webシステム化したいが、諸事情によりNGをくらいました。それならDjangoでデスクトップアプリを作成できないかなと試行錯誤中です。
いろいろ課題はあるのですが、まずはワンクリックで開発用サーバーの起動からブラウザ表示までを考え、ある程度はバッチで実現できました。
ちょっと強引なところがあるのでデスクトップアプリで使うとすると抵抗があるのですが、Django開発では使えるシーンがあるので、いったんまとめたいと思います。
バッチの処理の流れ
- 仮想環境に入る
- 開発用サーバーを起動
- ブラウザで表示
作成したバッチ(runserver.bat)
Windowsで実行できます。
django40envはPython仮想環境のフォルダ、test_projectはDjangoのプロジェクトフォルダです。
@REM Python仮想環境に入る
call C:/Users/test/django40env/Scripts/activate
@REM 開発用サーバーを起動
start python C:/Users/test/Learning/django40env/test_project/manage.py runserver
@REM ブラウザ表示
timeout /nobreak 5 > nul
start http://127.0.0.1:8000/
コメントなので、@REMの行はなくてもOKです。
startを付けると非同期でコマンドを実行します。
開発用サーバー起動後はずっと実行された状態になるので、startを付けないと次のブラウザ表示が実行されません。
こちらのstartは指定したURLをデフォルトブラウザに表示させます。
開発用サーバーの起動前にブラウザ表示が実行されると、「このページに到達できません」というエラー画面が表示されてしまうので、timeoutで5秒待ってから、ブラウザ表示するようにしています。秒数は適当です。本当は開発用サーバーの起動後にブラウザ表示としたいのですが、妥協しました(ここが最初に言ったちょっと強引なところです)。
「このページに到達できません」の表示がでても、開発用サーバの起動後にリロードすると正しい画面が表示されます。
開発で使う場合は、パスを相対参照の方が便利かもしれません。
以下のバッチでは、Python仮想環境フォルダと同じ階層にバッチを保存して実行します。
@REM Python仮想環境に入る
call ./django40env/Scripts/activate
@REM 開発用サーバーを起動
start python ./django40env/test_project/manage.py runserver
@REM ブラウザ表示
timeout /nobreak 5 > nul
start http://127.0.0.1:8000/
上記のバッチ実行後、runserverを「Ctrl + C」で抜けると、コマンドプロンプトも閉じてしまいます。
runserverを抜けた後もコマンドプロンプトを起動したままにしたい場合は、次のコマンドをバッチの最後に追加してください。こちらを追加すると、runserverを抜けた後にPython仮想環境に入った状態のコマンドプロンプトが残ります。
@REM コマンドプロンプトを起動したままにする
cmd /k
もっといい方法が分かり次第、まとめたいと思います(遠い目)。