ALL Program Python

【Python】herokuへデプロイしLINE通知する方法【初心者OK】

herokuへのデプロイ方法が難しい。。。

Pythonで作成したアプリをサーバー(heroku)乗っけてみたいです!

 

こんな疑問にお答えします。

 

本記事は、以下のような人向けです。

 

こんな人

  • heroku(サーバー)へのデプロイ方法を知りたい
  • サーバーに乗せてPythonを利用する感覚を知っておきたい
  • Webスクレイピング情報をLine通知してみたい

 
 

ちなみに、本記事は以下の記事でPython環境が整えられている前提で説明します。
Nakamura

 

Pythonのインストールがまだの人はコチラから


python-インストール方法
Pythonのダウンロードとインストール方法(全手順-画像付)

続きを見る

 

コードエディターはATOMのインストール方法


pythonオススメコードエディター
【Python】ATOMのインストール方法と日本語化を説明【簡単】

続きを見る

 
 
 

本記事で出来ること

本記事では、以下の手順で行います。

最終的に「YahooファイナンスのヘッドラインニュースをLineへ通知させる」を目標にやっていきます。

手順

  1. 実現したいことの確認
  2. ローカル環境で動作確認
  3. Herokuの環境構築
  4. Herokuへデプロイ

 

では、さっそくやっていきましょう!
Nakamura

 

実現したいことの確認

本記事で実現させることを確認しましょう。

 

実現内容

Yahoo!ファイナンスのヘッドラインニュースをSeleniumで情報抽出しLine通知させる。

 

イメージとしては、画像の通り。

heroku_Line通知方法の説明

 
 

ローカル環境で動作確認

大原則として、ローカル(あなたのPC)上で動かないプログラムは、サーバー(heroku)上では動きません

この要点を抑えたうえで、作業をしていきましょう。

 
 

pipで必要なものをインストール

Windows利用者はコマンドプロント or Windows PowerShell を開きましょう

Mac利用者はターミナルを開いてください。

以下のコマンドを入力し、pip インストールしましょう。

 

Webサイトからの情報抽出で必要


<Seleniumのインストール>

 

LINE通知させるのに必要


<Requestsのインストール>

 

既にインストールが終わっている人は、本手順は無視して問題ありません。
Nakamura

 

 

ChromeDriverをダウンロード&配置

あなたのPCに合ったChromeDriverをダウンロードしましょう。

本記事では説明の為に、ChromeDriverをデスクトップに配置します。

 

ChromeDriverのダウンロードが不安な方は、別記事にまとめてますのでコチラを参照ください。。
Nakamura

Python-Webスクレイピング実行環境を整える
【Python】Webスクレイピングの実行環境を整える【初心者】

続きを見る

 

LINE Notifyのトークンを発行

Line Notifyのトークンを発行しましょう。

 

トークン発行手順は、以下の画像の通り。

注意ポイント

・トークンの表示画面は2度表示されません。確実にコピーして保管しておきましょう。

 
 

 

デスクトップ上に開発用フォルダを作成

デスクトップ上に新規開発用フォルダ作成しましょう。

本記事では「【開発中】Line通知」というフォルダ名でやってます。

 

開発用フォルダに.pyファイルを格納

NakamuraBlogではコードエディター「ATOM」を推奨しています。

よって、ATOMをベースに説明していきます。

 

以下のコードをATOM上でコピペし、
ChromeDriverのディレクト情報」と「LineNotifyのトークン情報」を書き換えましょう。

あなたがすること

  • コードエディターにコピペ
    7行目 :ChromeDriverのディレクトを書き換える
    39行目:LineNotifyのトークンに書き換える
  • 最後に開発用フォルダに保存(本記事では「main.py」として保存。※任意名称でOK)

 

<コードエディターにコピペ>

 
 

<開発用フォルダに保存>

 
 

ちなみに、現時点での開発用フォルダディレクトリ構造は以下の通り。

ディレクトリ

【開発中】Line通知
   ┗ main.py

 
 

動作確認

動作を確認してみましょう。

ATOMの場合、Atom Runnerをインストールしてる場合「ALT + r」で 動作を確認することができます。

ここは別記事で説明していますので、こちらを参照ください。

 
 

あなたのLineYahooのヘッドライン情報が通知されたら、動作確認OKです。

 
 

ここまでで上手く行かない時は?

ここまでで上手く行かない人は、以下の点を確認してみて下さい。

  • ChromeDriverのディレクト情報」が正しく入力されているか?
     ┗ ①ChromeDriver.exeまで含めたディレクトリ情報を入力してください。
     例)C:\Users\desktop\chromedriver.exe

    ┗ ②ディレクトリ情報の\を2つ並べましょう(Windowsの場合\\でないと反応しない事例有)
     例)C:\\Users\\desktop\\chromedriver.exe

 

Herokuの環境構築

Heroku CLIをインストール

Herokuのアカウント登録を済ませた後、Heroku CLIをインストールしていきましょう。

Heroku CLI はコチラの公式HPからダウンロードできます。

あなたのPCに合ったものをダウンロードしましょう。
Nakamura

 
 

Herokuへログイン

ここからターミナル側での作業となります。
 ※Windowsの場合:コマンドプロント or Windows PowerShell

 

以下のコマンドを入力してHerokuへログインしましょう。

進めていくと以下の画面が出現しますので「Log in」をクリックしてください。

heroku login

その後、ターミナル側では以下の内容が出力されていれば、OK。

Logged in as あなたのログインメールアドレス

 
 

ちなみに、「Logged In」の画面は閉じても大丈夫です。

 
 

Heroku上に新規アプリを作成

ターミナル側で以下のコマンドを入力しアプリを作成しましょう。

尚、≪アプリ名≫ は任意の名称でOK。

本記事では、Herokuを無償バージョンで利用します。
そのためパブリック(共用)利用となることから、既に誰かが作成しているアプリ名の場合、使用できません

パブリック環境下で同一名称は、名前の重複になりますからね。
Nakamura

ちなみに、既に重複された名称でCreateコマンドを実行した場合
Name ≪アプリ名≫ is already taken」と表示されます。

 

<参考:line-pythonというアプリ名称は既にありました。>

ということで、この点を注意して作成してみましょう。

尚、任意の≪アプリ名≫は この後に使用するため、コピーして保管しておきましょう!

 
 
 

Build Packを挿入

先ほど作成した ≪アプリ≫に対してBuild Packを入れていきます。

ターミナル上で以下のコマンドを合計3つ入れてあげて下さい。

 

Heroku-アプリ上でPythonを使う宣言


 
 

Heroku-アプリ上でChromeブラウザを使うために必要


 
 

Heroku-アプリ上でChromeDriverを使うために必要


 
 
 

これら 3つのBuild Packがセッティングされているかを確認しましょう。

HerokuのSetting画面の下部に 入力した3つの項目が入っていることが確認できます。

 

 
 
 

メモ:HerokuアプリのタイムゾーンをAsia/Tokyoに変える方法

Herokuでは、サーバー上で定期実行(Cron)ができます。

その際、タイムゾーンを Asia/Tokyo にしておかないと、意図した時間帯に定期実行しません。

 

本記事では、裾を広げないためにCron設定はしませんが、このタイミングでやっておくと良いと思います。
Herokuに乗せるメリットの1つにCron実行(定期実行)がありますので。
Nakamura

 
 

Herokuアプリ側の環境変数にLineNotifyのトークン情報を挿入

Herokuの無償利用では、コードは基本的に共用物として扱われます。

ですので、あなたのLineNotifyトークンをpyファイルに記載したままだと、
第三者にあなたのLineへのアクセス許可情報が見られてしまいます。

よって、Herokuアプリ側に、環境変数として取り込んでおきましょう。

Heroku-環境変数を挿入


************の部分を、あなたのトークン情報に書き換えて、ターミナル上で実行しましょう。
Nakamura

 

Heroku側に環境変数が挿入された場合、以下の場所をクリックすれば、
ターミナルで挿入したLineトークンが表示されます。

 

 
 

Herokuへデプロイ

Heroku用にmain.pyのコーディング内容を修正

Herokuへのデプロイ用に、開発フォルダ内の「main.py」のコードを修正していきます。

 

結論、以下の通りのコードとなります。

変更点コード内コメントアウトで「###★変更ポイント:理由」と記載しております。

あと少しですので、頑張りましょう!
Nakamura

 
 

Heroku用にファイルを追加

main.py」が格納された開発フォルダに、2つのファイルを格納していきます。

ここまでの開発用フォルダディレクトリ構造は以下の通り。

ディレクトリ構造

【開発中】Line通知
   ┗ main.py
   ┗ requirements.txt ←★これから追加していきます。
   ┗ runtime.txt ←★これから追加していきます。
   ┗ Procfile ←★これから追加していきます。

 

これからターミナル上で ファイルを出力していくため、
ターミナル側で出力先を指定します。

 

では、それぞれ説明します。

 
 
 

requirements.txt の作成方法

ターミナルで以下のコマンドを実行すると、requirements.txtが出力されます。

ちなみに、中身はこんな見た目になってるはず。
(皆さんとちょっと違うかもしれませんが、問題ないので安心ください。)

requirements.txt中身

はてな

requirements.txt:Heroku側で使用するPythonのモジュールを記載するとHerokuが認識してくれる。

 
 
 

runtime.txt の作成方法

事前に、自分のPCのPythonのバージョンを確認しておきましょう。

手っ取り早く確認する方法は、ターミナル上で以下のコマンドを実行すればOK。

 
 

今回、僕のPCでは「Python 3.9.0」と出力されましたので、これを runtime.txt として 出力させます。

pythonのバージョン部分は、必要に応じて各自変更くださいね。
Nakamura

尚、Heroku側で使用可能なPythonのバージョンは、
コチラの公式HPより最新のものが分かりますので参考までに。

 
 

ちなみに、runtime.txt の中身はこんな感じになっているはず。

runtime.txtの中身

はてな

runtime.txt:Heroku側で使用するPythonのバージョンを認識させるために記載

 

Procfileファイルの作成方法

この作業により、開発用フォルダに「Procfile」ファイルが作成されてます。

注意ポイント

  • main.py の名称は、あなたが作成している pyファイル名称に変更してください。
本記事では「main.py」で作成しているから上記のコマンドになります。
Nakamura

 

はてな

Procfileファイルとは、Herokuのプラットフォーム上にあるWebアプリがどのようなコマンドで実行されるのかを記述する指示書のこと。

PCによってはProcfileが無くてもデプロイできるみたいですが、有ることに越したことは無い+簡単ですので、ちゃちゃっとコマンド実行しちゃいましょう。
Nakamura

 
 
 

Heroku用にファイルを追加時の注意点(.txt保存形式を確認)

出力されたメモ帳(.txtファイル)の保存形式がBOM形式だと、デプロイできません

よって、txtファイルである

  • requirements.txt
  • runtime.txt

の2つのtxtファイルを 「UTF-8」形式で上書き保存しておきましょう。

herokuデプロイはUTF-8

UTF-8で動作確認済ですので、安心して進めて下さい。
Nakamura

 
 
 

Herokuへデプロイ

最後の作業をしていきましょう。

以下のコマンドを順番に、ターミナルで入力していきます。

 

step
1
cdコマンドでローカルリポジトリを設定

 

これまでに作成していた開発フォルダのディレクトリ情報を入れてあげましょう。

cdコマンドにより、PC側に「このフォルダを使う!」と認識させることが出来ます。
Nakamura

 

ちなみに、僕の場合は、以下の記入例の通りです。

記入例:「cd C:\Users\デスクトップ\【開発中】Line通知

ここまでのディレクトリ構造

【開発中】Line通知
   ┗ main.py
   ┗ Procfile
   ┗ requirements.txt
   ┗ runtime.txt


リポジトリって何?

リポジトリは「保管場所」という意味に置き換えて覚えておけばOKです。

ローカルリポジトリとは、「あなたのPC上の保管場所」という意味。

STEP3でリモートリポジトリの単語がでますが、
本記事では「Heroku上の保管場所」と理解しておけばOK。

 

step
2
Gitの初期ファイルを作成

 

この作業により、Heroku側でアプリを使用するため必要なフォルダが作成されます。

Git未インストールの人は?

Gitのインストールが未実施の人は、
こちらの公式HPよりダウンロード&インストールしてから「git init」コマンドを実行してください。

 

git init」コマンド実行後は、ディレクトリ情報が以下のようになっていますので確認しましょう。

ここまでのディレクトリ構造

【開発中】Line通知
   ┗ .git ←★追加されてる
   ┗ main.py
   ┗ Procfile
   ┗ requirements.txt
   ┗ runtime.txt

≪参考:ここまでのフォルダ内-構造≫

 
 

step
3
ローカルリポジトリに紐づくリモートリポジトリを設定

 

事前に、あなたが作成した「アプリ名」に置き換えてコマンドを実行しましょう。

これによりHerokuの対象アプリに紐づきがされます。
Nakamura

 

step
4
変更したすべてのファイルをインデックスに登録

ここは深く考えずにコマンド実行すればOKです。
Nakamura

 

step
5
デプロイする際のコメントを入れる

僕は「commit」とか適当にやってます。
Nakamura

 

step
6
デプロイ実行

デプロイ完了後は、ターミナル側で以下の内容が出力されます。

remote: Verifying deploy... done.

 

画像で表現すると以下の感じ。

≪ターミナル側の出力≫

 
 

デプロイしたアプリを実行

デプロイしたアプリの動作確認してみましょう。

ターミナル側で以下のコマンドを実行し動作を確認しましょう。

main.pyの部分は、必要に応じて変更くださいね。
Nakamura

 

ここまで上手く出来た人は、あなたのLineYahooファイナンスのヘッドニュースが通知されていると思います。

 

以上でデプロイ作業と動作確認は終わりとなります。

お疲れさまでした!

 
 

(参考)メモ:デプロイしたファイルを変更したい場合の処理

自分用のメモですが、デプロイ後にファイルを変更(更新)したい場合は、
以下手順をターミナル側で実行。

①cdコマンドで開発用フォルダを指定
cd 開発用フォルダのディレクトリ(記入例:C:\Users\desktop\【開発中】Line通知)

②ローカルリポジトリに紐づくリモートリポジトリを設定
heroku git:remote -a <アプリ名>

③変更したすべてのファイルをインデックスに登録
git add .

④デプロイする際のコメントを入れる
git commit -m "任意のコメントに書き換える"

⑤デプロイ実行
git push heroku master

 

新規デプロイする際の「git init」コマンドは省くと覚える!(理由:既に .gitフォルダがあるから)
Nakamura

 

(参考)メモ:Heroku側アプリ名称の変更方法

こちらも自分用のメモですが、以下のコマンドで既存アプリ名称を変更できる。

 
 
 

終わりに

お疲れさまでした!

今回はここまでとなりますが、PythonをHeroku(サーバー)で動かす感覚を体験できましたでしょうか?

初めて体験した時、僕はかなり感動しました。笑
同じ感覚を味わって貰えたのなら、記事作成冥利につきます。
Nakamura

今回、Webスクレイピングの結果をLineで通知する構成でしたが、
Pythonのサードパーティーモジュールに「beautifulsoup4」というのがあり、
Webスクレイピングをする際に楽になるものがありますから、
もし興味があれば、ググってみてると視野が広がるかもしれません。

beautifulsoup4の専門書もたくさん出版されてますからハードルは低いと思います!

僕の場合、DOM操作が苦ではないので「beautifulsoup4」は あまり使用しませんので、ここから先はあなたの興味に従って進めば良いと思います。
Nakamura

ということで、ここまでありがとうございました!

今後ともNakamuraBlogをよろしくお願いいたします。

 

補足:ちなみにPythonを学べるプログラミングスクールは?

プログラミングスクールはたくさんありますが、Pythonを学べるオススメなスクールは「TechAcademy」ですね。

理由は3つあります。

  • Pythonに必要なスキルを体系的に学べる
  • 短期集中プランがある
  • 無料体験会がある

Pythonを実務レベルで習得するなら、プログラミングスクールを選択するのは、賢い選択の1つです。
(人に聞けるって、楽です。)

決して安い値段では無いので、まずは無料体験会参加してみると良いと思います。

無料体験会はWeb上で受けられるますので、かなり気楽に受けられます(お菓子食べながらでも。笑)

 

オススメのプログラミングスクール

正直、時間と気力があれば、Pythonはソコソコ触れるようになりますので、
ショートカットしたい人はプログラミングスクールは如何でしょうか?というお話でした。

もし行くなら「TechAcademy」がオススメという感じですね。
Nakamura

 

 




-ALL, Program, Python
-, ,