見出し画像

グラフアプリつくってみた。

背景

実務でダッシュボード作成に従事する可能性が出てきたので、その予習です。すぐに忘れるので、備忘録として記事にしました。

概要

Docker上にDash(データの可視化に強いPythonのフレームワーク)環境を構築し、日本の人口推移グラフを実装しました。アプリがローカル環境で動くことを確認した後、Herokuへデプロイしました。

しかしまぁ、なかなか苦労しました。Qiita記事を参考に進めたのですが、環境構築について丁寧に説明いただくも、PCの差異でどうしてもエラーを量産してしまいます。
本記事では、自他の利益のためにアプリの公開までに参考記事通りに行かなかったポイントを実際の開発の流れに沿いながらまとめたいと思います。同じような境遇の方の参考になれば幸いすぎます。

流れは以下のようになります。
1. DockerでDash環境を構築する
2. ローカル環境で動くか確認
3. Herokuへデプロイ

完成イメージ

※アプリのイメージです。各都道府県ごとの人口推移をブラウザ上で確認することができます。(画像クリックすると実際のアプリに飛びます)

アプリ画像例

実際のコード

githubにあるのでご自由にどうぞ(ディレクトリ構造を変えると動かないので注意です。)

ディレクトリ内のファイルの構成

ディレクトリは以下のファイルで構成されています。

app.py:c01.csvを読んで、グラフの出力をする
c01.csv:男女別人口ー全国, 都道府県(大正9年~平成27年)
Procfile:Heroku上で実行するコマンドを記載
Procfile.windows:Heroku上でローカル実行するコマンドを記載
requirements.txt:app.pyの実行に必要なライブラリ一覧
runtime.txt:実行するPythonのバージョンを定義する

参考サイト

参考にしたサイトも紹介します。非常にお世話になりました。
以降、基本的にこの記事に沿って進めます。

DockerでDash環境を構築

Dockerは仮想環境の作成のために使います。
(一応記事あるので興味ある方はぜひ見てやって下さい\(^o^)/)

なぜこれが大事かというと、requirements.txtやruntime.txtがスムーズに作成できる点にあると思います。ローカル環境で行うと、例えばアプリの実装に不要なモジュールまでrequirements.txtに記載され、ごちゃごちゃした結果うまく行かない可能性が高いです(体験済み)。
なのでアプリ実装に必要最低限のモジュール(かつ正確な動作を確認しているバージョンのもの)がインストールされているスリムな環境を構築します。
Dockerの実行はコマンドラインによるものと、docker-composeというスクリプトファイルを実行するものがあります。今回はdocker-compseを使います。実行にはまず以下のファイルを用意します。(一応githubに上げました!https://github.com/ryujun1117/Dash-Env/tree/master

docker-compose.yml
Dockerfile

コマンドプロンプトを起動し、該当するファイルが存在するディレクトリまで移動し、以下のコマンドを実行します。

#Python系 #ダウンロード後 #cmdを起動。ファイルのディレクトリまで移動 #コンテナを起動
$ docker-compose up -d --build

#コンテナへ接続
$ docker-compose exec python3 bash

#ひとつ下のoptへ移動。ダウンロードしたローカル環境のファイル内にoptファイルが作成されているので、そこにapp.pyを入れておく。
$ cd opt

#実行
$ python app.py

実行したら、localhost:8001とブラウザに打ち込み、ローカル環境での起動を確認します。完成イメージと同じものが確認できればOK!

Herokuへのデプロイ準備(各ファイルの作成)

Procfile
以下のコードを記載します。

web: gunicorn app:server

gunicornはローカル環境での起動には必要ありませんが、Herokuでデプロイする際に必要なモジュールです。環境にない場合は、インストールします。(> pip install gunicorn)

Procfile.windows
以下のコードを記載します。

#portdockerfile, docker-compose.ymlと合わせて、8001とします。
web: python app.py runserver 0.0.0.0:8001

requirements.txt 
コンテナへ接続した状態で、以下のコマンドを実行します。
これでrequirements.txtがディレクトリ内に出力されます。

pip freeze > requirements.txt

runtime.txt
docker desktopで、dash > INSPECT と進むと、PYTHON_VERSIONが記載されている。今回は3.9.5(2021/05/07)

python-3.9.5

!このとき各ファイルの改行コードはすべてUnix形式で!(LF)
※gitの改行コード自動変換機能を停止しておく

Herokuへのデプロイ!

Herokuは最新のものにアップデートしておく
ここからは参考記事と同じなので詳しい説明は割愛します。
実際のコードを載せておきます。

初めての際には以下を実行!
Heroku CLI をインストール - Heroku Dev Center
gitのインストール

!注意
ここからdocker環境から抜けて、ローカル環境で作業することを想定しています。理由としてはdocker上での作業の知識が足らず、デプロイにあたって様々なディレクトリの規約等の存在を甘く見積もっており、手が回らなくなったからです。docker環境でのデプロイは今後の課題としたいと思います\(^o^)/

#ファイルの存在するディレクトリに移動する
#gitリポジトリを作成し、ファイルをコミットする
#ファイル管理のためのディレクトリ(隠れてる)を作成
git init
#コミットするファイルを指定
git add .
#コミット -mはコメントオプションだけど常につけといたほうが良い。
git commit -m "Make dash app for Heroku"
#git statusで確認
git status

#Herokuにログイン
heroku login
#-iオプションをつけると、コマンド入力でログインが可能
heroku login -i

#Herokuのアプリを作成する
heroku create <application-name>

#Herokuサーバーにgitリポジトリのファイルをアップロードする
git push heroku master

#ブラウザでアプリの起動を確認!
heroku open

以上で終了になります。

おわりに

データの可視化は様々な方法がありますが、dashは比較的新しく豊富なライブラリーがあります。
データ可視化の次のステップとしては、以下の順に考えています。
・csvファイルの集計方法を記事化
・様々なグラフの出力を試してみる。
・スクレイピングを行いリアルタイムデータを可視化する実装をする。
・streamlitなどの他の可視化フレームワークを試す。
・docker環境から一気通貫でデプロイまで持っていくためのコード追記

ここまで読んでいただきありがとうございました(^^)

では。

今後のための記事メモ
dockerで環境構築からデプロイまで一気通貫して行っている例。


この記事が気に入ったらサポートをしてみませんか?