見出し画像

[後編] 文系初学者がPython×Flask×データベースをつかって検温記録WEBアプリをつくってみたメモ

前編ではローカルでの実装〜テストまでやり切ったので、後編はいよいよインターネッツの大海原に飛び出していきます。

今回、Herokuを使ってインターネット公開を目指します。

サラッと涼しい顔で書きましたが「ヘロクって何?強めの武器?」という状態からなんとかなったのでご安心ください。

↓↓ 前編はコチラ ↓↓

↓↓ここからアップデートを重ねた今の姿はコチラ↓↓

9.Githubにリモートリポジトリをつくる

ローカル環境からインターネットの世界へ飛び出す一歩目です。
リポジトリって何やねん!ですが、ファイルの保管庫のことですね。

・いまVSCodeで編集している [ken-on-kun] が 'ローカルリポジトリ'
・WEB公開するためにインターネット上に置く保管庫が 'リモートリポジトリ' 

後者を、Github上につくります。
* アカウント登録・ログイン手順などは割愛します。

GitHubにログインして、右上の「+」から「New repository」をクリック

スクリーンショット 2020-06-22 10.13.25

・リポジトリ名入れる(なんでもいいですがローカルと同じ名前とか)
・「initialize ~」にチェック入れる
・Create する

スクリーンショット 2020-06-22 10.20.25

スクリーンショット 2020-06-22 10.24.00

できました。

保管庫をつくっただけなので、いまは空き箱状態です。(README.mdっていう自己紹介ファイルだけが生成されてます)


10.ローカル ⇄ リモートリポジトリをつなぐ

ローカル(PC内保管庫 [ken-on-kun])のファイルを、リモート(Github内保管庫[ken-on-kun])にアップロードして、いわゆる同期状態にすることが次のステップです。ここで「Git」と「Github」を使っていきます。

同期したあとの変更履歴を管理する仕組みが「Git」で、それをWEBブラウザで使いやすく多機能にしてるサービスが「Github」、という感じで解釈してます。

 リモート先Gitを設定する

Githubサイトの右中段「Clone or download」をクリック→ 表示されたURLをコピー(=リモートリポジトリのURLです)

スクリーンショット 2020-06-22 11.11.24


ターミナルで、下記を1行ずつ実行 *記号は変えずにそのまま

$ git remote add origin <GitHubのリモートリポジトリURL>
$ git config --global user.name "GitHubに登録しているユーザー名"
$ git config --global user.email GitHubに登録しているメールアドレス

ちゃんと入ったかどうかは、下記で確認できます。

$ git remote -v
$ git config user.name
$ git config user.email

スクリーンショット 2020-06-22 11.25.35

黒塗りのところにGitHubに登録している内容が返ってきたら成功です。

 リモート先からローカルにフェッチする

リモート側(GitHub)の最新情報を、ローカル側(PC)に落としてくる行為を「フェッチ」というそうです。専門用語モリモリですがまぁ同期設定のひとつ、くらいのノリでいきます。

ターミナルで下記を実行

$ git fetch

スクリーンショット 2020-06-22 11.45.14

何やらwarningが出ていますが気にせず。最後の1行が出ればOKです。

ローカルのmasterブランチが、リモートのorigin/masterブランチの最新情報を見にいく、みたいな感じですかね

「フェッチ」とか「プル」とかGitの基本についてはコチラがわかりやすかったです。


11.ローカル ⇄ リモートリポジトリを同期する

ここまでのGit設定によって、知らぬ間にVSCodeとGithubが仲良くなり、連携いつでもOK牧場です。

ローカル(PC)でファイル修正 → 変更点をリモート先(GitHub)に反映、という一連の作業がすべてVSCodeでできます。VSCode便利。

なおこのローカル → リモートへの反映行為を「プッシュ」と呼ぶそうです。さきほどの「フェッチ/プル」とは逆方向ですね。

今回初期設定して以降も、修正したらプッシュを繰り返して、ローカルとリモートが同期されている状態を保ちます。

 VSCodeで変更履歴を「コミット」

また新キャラ登場、「コミット」てなんやねんですが、「プッシュ」の前に必ず挟まるGitのお作法です。考えず感じましょう。

VSCodeの枝分かれ的なアイコンをクリック (Souce Controlというメニュー)

スクリーンショット 2020-06-22 12.12.23

入力欄に、何がしか変更履歴コメントを入力して、Command+Enter(もしくは入力欄右上のチェックマークアイコンをクリック)

スクリーンショット 2020-06-22 12.15.43

この行為が「コミット」です。リモート先にプッシュする前に、ローカル内で待機状態にしておく感じでしょう。コメントを入力するのは、変更内容が後からわかるように、という目的かと思います。

ちなみにコメント欄の下に並んでいるファイルが、このコミットにぶら下がる「これ変更したよ」の一覧でして、「コミット」すると、左メニューに並んでいた変更履歴がリセットされます。

スクリーンショット 2020-06-22 12.27.58

あと道路標識みたいなミニアイコンを押すと、過去履歴を見れます。ほかにも履歴があるので、どうやらFirst commitではなかったようです。(という記憶喪失も可視化してくれます)

 コミットしたら、リモートに「プッシュ」

左下の「雲にGo!」的なアイコンをクリック

スクリーンショット 2020-06-22 12.33.47

すると・・・

スクリーンショット 2020-06-22 12.36.00

Oh... あきまへんがな...

Open Git Logを押してみます。

スクリーンショット 2020-06-22 13.13.33

右下のOUTPUTってところにエラーログが表示されます。VSCodeすご。

さきほどのウォーニングとログから察するに「Pushの前にまずPullしなはれ!」ということかなと。。。自信ないけどやってみる。

 ターミナルでリモート先からGitをプル

「プルせい!」と言われたものの、前の工程で「フェッチ」までいってしまってるので、ここでは「マージ」をします。

わけわかんないですよね、以下が方程式だそうです。

プル = フェッチ + マージ


むずい。でもやるべし。ターミナルで以下実行します。

git merge origin/master

そしてもう一回、VSCodeで「雲へGo」をクリック。

すると・・・

スクリーンショット 2020-06-22 13.49.32

今度はうまくいったんでは?

リモートリポジトリ側、Githubでチェックします。

スクリーンショット 2020-06-22 13.54.42

もとあったREADME.mdのほかに、前編でつくったファイルが追加されました。OK。

ローカルリポジトリ側も見てみます。

VSCodeを開いて、左上の資料風アイコンをクリック。

スクリーンショット 2020-06-22 13.53.43

エクスプローラーを見ると、さっきまでなかったREADME.mdが追加されたことがわかります。(Githubのリポジトリを作った時に生成されたやつ)

上げも下げも、同期できたようです。うれしい...


12.Heroku連携前の下準備

ここのパートは、ひとつひとつの意味がむずかしいので(自分でもうまく説明できない)、淡々と作業を羅列します。ただどれもエラーを起こさないための重要な工程なので、モレなく確実にやっておきましょう。

 ターミナルでgunicornとpsycopg2をインストール

1行ずつ実行します。

$ pip install gunicorn
$ pip install psycopg2

スクリーンショット 2020-06-22 14.16.34

こんな感じで 'Successfully~' が出れば成功です。

 ~/Procfile

VSCodeに戻り、[ken-on-kun] の下に [Procfile] というファイルをつくります。拡張子はいりません。

つくったら、エディタでコードを1行書き込み、保存します。

web: gunicorn run:app --log-file -

スクリーンショット 2020-06-22 14.24.54

紫のアイコンが勝手につくられて、大切な設定ファイル感が匂い立ちます。実際、これがなくてエラーが起きたときはわけわからず迷宮入りし、かなり凹みました。

 ~/requirements.txt

同じく[ken-on-kun] の下に、[requirements.txt] というファイルをつくりますが、こちらはターミナルで操作します。

$ pip freeze > requirements.txt

特にエラーがなければ、ファイルが生成されているはずです。

VSCodeを開きます。

スクリーンショット 2020-06-22 14.30.27

ファイルが新設され、内容も勝手に書き込まれています。

これはローカル側でインストール済みのパッケージ/ライブラリの一覧で、インターネット側でプログラムを実行する際、Herokuはこの一覧を見て「このパッケージ/ライブラリの、このバージョンが要るのね」とインストールしてくれるようです。

遠い彼の地で作業してくれるHerokuさんへのお手紙ですね。

 コミットして、プッシュする

いま作ったのはローカル側なので、忘れずリモート側に同期させましょう。

スクリーンショット 2020-06-22 15.42.18

手順はさきほどと同じです。レッツコミプ!

成功すると、Githubのファイル一覧に追加されます。

スクリーンショット 2020-06-22 15.45.26


13.Herokuでの設定 〜 WEB公開まで

Herokuサイトにログインした状態からはじめます。

 Heroku内にアプリを作成

右上の「New」をクリック、「Create new app」をクリック

スクリーンショット 2020-06-22 14.49.16

アプリ名を入力(何でもいいですが、リポジトリ名に揃えました)。Create app します。

スクリーンショット 2020-06-22 14.50.10

 Heroku Postgres アドオンを追加

インターネット側でのデータベース管理に、Herokuのアドオン機能「Heroku Postgres」を使います。

アドオンカタログサイトで検索、インストール

スクリーンショット 2020-06-22 15.21.32

スクリーンショット 2020-06-22 15.22.06

スクリーンショット 2020-06-22 15.24.40

さっきつくったアプリ名を選択して、「Provision add-on」をクリックすると、インストールが始まります。

スクリーンショット 2020-06-22 15.28.41 2

終わるとこんな画面になります。「Add a Procfile」というウォーニングが出てますが、すでに作ってあるので大丈夫なはず。。。 進みます。

 Heroku CLIをインストール

ターミナル上でHerokuを操作するために必要になります。

$ brew tap heroku/brew && brew install heroku

 Herokuのタイムゾーンを日本時間に変更

これやっとかないと、いろいろ時間がずれます。サーバーは北米のを借りてるし、データベース(HerokuPostgres)は基本UTCで登録するらしいので。

ひきつづきターミナルで作業します。

% heroku config:add TZ=Asia/Tokyo

うまくいったかは下記で確認できます

% heroku run bash
~ $ date

スクリーンショット 2020-06-24 9.39.00

’date’ を実行したあと、こんな感じで 日本の現在時刻 'JST' が返ってくれば成功です。

 GithubとHerokuを連携 → デプロイしてみる

この工程は、コチラのサイトがめちゃくちゃ丁寧でわかりやすいです。

”Githubと連携しよう” のところから参照ください。

"手動deployを実行しよう!!” のところまでやってみると、、、

スクリーンショット 2020-06-22 15.49.34

Your app was successfully deployed. が出ました。

さっそく View してみると。。。(ワクワク)

スクリーンショット 2020-06-22 15.52.42

Oh...

そんな一筋縄ではいかないですね。めげずにいきましょう。


14.直す

いろんな公式ガイドや文献をつぎはぎで何とかここまでは来れましたが、知識が乏しい人間がパッチワーク式ですすめると、たいがいどこか抜け漏れがあって、最後の最後にエラーで返って絶望します。

でも落ち着いて、ログを見るところからはじめましょう。

さきほどheroku CLIをインストールしたので、ターミナルからログが見れます。

% heroku logs

スクリーンショット 2020-06-22 16.26.00

見れません。あれ?

Error: Missing required flag:

これ、なんか見覚えが・・・ ググってみます。

Oh... ドンピシャ鴨。

書いてある通りやってみます。

% git remote -v

スクリーンショット 2020-06-22 16.31.22

はいドンピシャ。書いてある通り直します。

heroku git:remote -a アプリ名

スクリーンショット 2020-06-22 16.34.01

直りました。ログを見にいきます。

% heroku logs

ログが出るようになりました!(内容は非公開にさせてもらいます)

heroku logsの見方は、このサイトがとても参考になります。ただここに書かれているような顕著なエラーコードは無く、代わりにこんな1行が。

(Background on this error at: http://sqlalche.me/e/f405)

データベースつくるとこで引っかかってる?

Herokuサイトを見てみます。

スクリーンショット 2020-06-22 17.16.40

スクリーンショット 2020-06-22 17.17.20

Ohhhh...  テーブルないやん。。。

やっぱり基本的な工程の抜け漏れ、凡ミスでした。

 Heroku上にデータベースをつくる

ターミナルで以下のコマンド実行。models.pyを実行してデータベースを初期化=テーブルを作成します。ローカルでもやってた基本工程です。

heroku run python -c "import main.modelsmain.models.init()" 

さて、気を取り直してさっきのページをリロードすると、、

スクリーンショット 2020-06-22 17.26.08

やたーー!

胸の鼓動を抑えつつ、Herokuのダッシュボードに戻って [Open App] します。

スクリーンショット 2020-06-22 17.29.06

↓↓↓

↓↓↓

スクリーンショット 2020-06-22 17.30.53

キターーーー!!!!

データを送ってみます(ドキドキ)

スクリーンショット 2020-06-22 17.31.39

↓↓↓

スクリーンショット 2020-06-22 17.33.25

入ったーーーー!!!

直ってよかったーー


現場からは以上です

というわけで、細かい課題は残るものの、

・Python×Flask ×データベースをつかって検温記録アプリをつくってみる
・WEBで公開するまでの段取りをスルーで実況的にまとめる

ふたつの目的を達成できたので、これにて終了とさせていただきます。

チュートリアルとしてはかなりクドイ感じになってしまいましたが、特に自分と同じ初学者・非エンジニア・趣味レベルの皆さんにとって少しでも参考になればうれしいです。

最後まで読んでいただいた皆様、お付き合いいただきありがとうございました!皆さんもHappy Coding!


再掲

↓↓ 前編はコチラ ↓↓

↓↓ここからアップデートを重ねた今の姿はコチラ↓↓





この記事が参加している募集

つくってみた

やってみた

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