#始めに
FlaskとPostgreSQLとDockerでウェブアプリを作った時のメモです
Windows環境でDocker+Flask+Dockerについて書いてある記事は意外と少ないので、Windowsユーザの参考になればと思います
#この記事を書いた人について
J2EEとRailsは作ったことはあるけれど、pythonはほとんど触ったことはありません
#やりたいこと
- 環境はすべてDocker上の仮想環境に構築する
- PythonのWebアプリを作る
- postgresqlに登録できるとこまで作る
その1 Docker上の仮想環境に構築する
Dockerfileの作成
ネット上にいろいろある情報を参考に、Dockerfileを作ってみました
FlaskをDebugモードで上げるためCMD文に
FLASK_APP=app.py FLASK_DEBUG=1 flask run
と記載しています
docker-compose.ymlの作成
Webモジュールの依存にPostgresqlを依存させています。
Flaskを使うことにしたのは特に深い理由はありません
その2 PythonのWebアプリを作る
app.pyファイルの作成
Web上でよくある例のように「app.py」にDBの接続やルーティング情報、DBの登録ロジックをすべて書くのは嫌だったのでDBの登録ロジックは別ファイルに記載することにしました 。
ただし、Pythonのimort文に関する仕様がよくわかっていなかったため、エラーの解消に時間がかかりました。
Javaの感覚でimport文を全部最初に記載するのではなく、スクリプト言語らしく必要な個所にimport文を記載する、ことがpythonのimport文を理解する上での鍵ですね
その3 postgresqlに登録にデータを登録する
JavaScript:クリップボートのイメージをBase64変換するで作ったHTMLファイルからPOSTしたBase64のデータをPostgresqlに登録させてみました
その4 アプリケーションを実行する
GitHubから適当なフォルダにクローンして、コマンドラインからdocker-compose up -dを実行すればWebアプリケーションが実行されます
雑感
環境構築
RailsのようにWindows固有の問題で頭を悩ますことはなく、J2EEのようにあれこれ設定する必要がなく割と楽に環境構築ができました。dockerに慣れていればほんの数時間で簡単なWebアプリケーションが作成できそうです
アプリケーション開発
- テーブルのCreateをDDLなしでできるので楽、カラムの変更もサーバ起動時に自動的にやってくれるのでこれも楽です
- ルートパスを@で指定できるのがJavaと同じなのでとっつきやすかったです
- App.pyにエラーがあるとサーバ起動がうまくいかない。App.pyから自作のモジュールを呼び出すときはimport文の定義する箇所に注意しなければならない。
- DBのコネクションを自前で保持しないといけないのが面倒くさいかも