LoginSignup
4
5

More than 3 years have passed since last update.

Python初心者がFlaskでLINEbotを作ることになった(Flaskざっくり解説編)

Last updated at Posted at 2020-05-07

なんでそんなことになっちゃったの?

フリーで独立直後、仕事でLINEbotを作ることになりました。
せっかく作るなら人工知能や自然言語処理が得意といわれるPythonで実装して、拡張性を持たせてみたいなと思い、独学をはじめました。
筆者、Python初心者です。

この記事について

細かいbotの仕様が決まる前に、自学のため以下を学習しました。
https://www.udemy.com/course/python-flask-python-api-line-bot/

しかし、PythonはドットインストールやProgateで学習したのみで、フレームワークの知識がなかったため、「Flask?」となったわけです。
この記事ではFlaskについて自分用にまとめてみようと思いました。
筆者ほんとに初心者なので、なんか違うということがあればご指摘ください。。

FlaskはPythonのwebフレームワーク

要は、ゴリゴリ手作業でPython書いてwebページを作ろうとすると大変だから、共通化できる枠組みを使って楽に開発進めようよ、ということらしいです。

参考:https://dividable.net/python/flask-python/

「マイクロウェブアプリケーションフレームワーク」を謳っており、必要最低限の機能しかないそうな。

同じwebフレームワークであるDjangoとのざっくり比較↓

Flask Django
重さ 軽め 重め
カスタマイズ性 高い 細かなカスタマイズには不向き
初期セットアップ 早い 諸々準備が必要
学習コスト 機能が少ないので低め いろいろできるけど結構大変そう
向いている業務 単機能のWebアプリケーション・業務用の管理画面 企業向けの大規模なサービス

こんな感じなので、botを作るときにはFlaskのほうが向いているということらしいです。
スピーディーに返答を返してほしいですからね!

Flaskのざっくり使い方

インストールや環境構築等々は公式をご参照ください。

インストール後、以下を書くだけで、もうWebサービスとして動いちゃうって話。
とても簡単ですね!
筆者はJavaをゴリゴリ書く研修を受けた経験があるので、めまいがするほど楽だなと感動しました。

おなじみHello Worldの作り方

hello.py
from flask import Flask      #Flaskクラスをインポート
app = Flask(__name__)        #Flaskアプリケーションの名前を宣言

@app.route('/')              #ファンクションを起動するURLを設定
def hello_world():           #ファンクションの定義
    return "Hello World!"    #今回はブラウザに"Hello World!"を表示する

if __name__ == '__main__':   #アプリケーションとして起動した場合
    app.run()                #ローカルサーバーでアプリケーションを実行

特徴的なのは、app = Flask(__name__)__name__ == '__main__'でしょうか。
私はここの理解になかなか時間がかかりました。

__name__ってなに?

まず、このアプリケーションのモジュール名について述べます。 もしあなたが使うモジュールが一つだけなら、 __name__ を使わなければなりません。 それがアプリケーションとして起動したときとモジュールとしてインポートされたときで名前が異なるからです (アプリケーションとして起動したときは '__main__' 、インポートされたときはそのインポート名)。

if __name__ == '__main__': は、そのスクリプトがPyrhonインタープリタから直接実行されたときだけに そのサーバで走り、モジュールとしてインポートされたときには走らないことを保証します。

公式では上記のように記載があります。ほう、なるほど?

__name__ というのは、自動的に定義される変数で、現在のファイルのモジュール名が入るのだそうです。

Flaskのアプリケーションを3つ(名前をOne, Two, Threeとしましょう)作ったとして、
OneとTwoを、Threeがインポートしている状態の場合を考えてみます。

3つそれぞれに、if __name__ == '__main__':app.run()の記載があったとします。

例えばThreeをサーバで実行したとき、__name__が適切な名前に置き換わることで、
One,TwoはサーバでRUNしないという設計ということのようです。
(この時のモジュール名は、Threeは__main__、 OneはOne、TwoはTwoとして扱われるってことかな。)

ローカルサーバでRUN

さて、作成したhello.pyを実行してみましょう。

$ python hello.py

Flaskにはローカル開発サーバが内蔵されているので、
上記をコマンドラインから実行すると、ローカルホストの5000番ポート(http://127.0.0.1:5000/)でアクセスできます。

Webブラウザを開いてURLにアクセスしてみましょう。
「Hello World」と、か細く左上に表示されればOKです。
これであなたはFlaskを使えるようになりました。やったね!

Dockerなどの仮想環境を利用している場合は、対応したアドレス・ポートにアクセスしてください。
(そのうち別記事書くかも…。。)

サーバを止めるには、control-Cを押せばOK。

Hello Worldはできた。次は?

筆者はここまでできた後、オウム返しのbotを試しに作ってみて、それから仕事用の開発に進みました。
オウム返しbotの作り方は、いろんな方が記事にしているのでそちらを見ていただければ難なく進められるかと思います。

次回は仕事用開発のときにめちゃくちゃ詰まった、データベース関連の記事から書こうかなと思います。
ご興味あれば覗いてみてください。。

参考

https://a2c.bitbucket.io/flask/installation.html#installation (公式)
https://www.udemy.com/course/python-flask-python-api-line-bot/
https://methane.github.io/flask-handson/start.html

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5