[無料][2024年版] LINE Messaging API v3 + Python(Flask) でボットを作る [その1 - 準備編]

## 開発環境の準備

私が LINE bot の開発を始めたのは数年前のことで、機械学習（自然言語処理）をやっているので Python の知識はそれなりにあったものの、ソフトウェア開発やネットワーク関連の知識はほとんどありませんでした。デプロイ？PaaS?なにそれ？という状態でしたね。ただ、研究畑であっても成果物を公表する際にWeb化したりAPI化する必要に駆られることはあります。その一環でLINE bot の開発に取り組み、いろいろ勉強して今に至りました。同じような境遇の方もいると思い、なるべく初心者向けの解説を心がけます。

Python をある程度使える状態であることは前提として、開発環境として準備すべきものは以下になります。

1. [LINE Developer](https://developers.line.biz/ja/) アカウント + [LINE Official Account Manager](https://manager.line.biz/)
2. Python 仮想環境 (virtual environment)
3. Flask, line-bot-sdk
4. 作ったアプリをデプロイする何らかのホスティングサービス

GitHub は必須ではないものの、(4) の段階であった方が便利なことが多いですので、ここでは新規に `linebot` という名のレポジトリを作ってクローンし、その中で進めていきます。その他、私が使っているツールは

- ngrok
- [Postman](https://www.postman.com/)
- [UptimeRobot](https://uptimerobot.com/)

などがありますが、これは [その5 - tips 編](https://qiita.com/nozomiyamada/items/58918cd4024987ad1979) で解説します。データベースを併用する場合は、さらにこれに SQL 関連が入ってきますが、それは今回は割愛します。

まず (1) に関しては、Developer アカウントの開設方法、Messaging API のできることなどは他に良記事がたくさんありますのでそちらを参考にして下さい。細かい設定などは後の記事でまた触れることがあると思います。オフィシャルの説明もわかりやすいです。

https://developers.line.biz/ja/docs/messaging-api/getting-started/

## Python 仮想環境

次に 2. ですが、これはかなり重要です。正直私もアプリ開発をするまでは仮想環境の重要性がわかっていませんでした。そもそも仮想環境とは何か、についてはこちらにも詳しく書かれていますので参考にして下さい。

_Mac用_

https://www.python.jp/install/macos/virtualenv.html

_Windows用_

https://www.python.jp/install/windows/venv.html

Python のように多数の外部ライブラリを必要とし、バージョン管理が重要となる言語では仮想環境の構築なしではそもそもデプロイ（作ったアプリをサーバー上に配置すること）さえ成功しないことが多いです。自分のPCだけでプログラムを動かす場合には、常に最新のバージョンにしていても問題ないですが、他人様のプラットフォームを使う場合には、それに合わせなければなりませんからね。また、仮想環境を作ることで「必要なライブラリだけを管理し、サーバー上にインストールする」ということができます。仮想環境なしだと、自分のPCにインストールされている全てのライブラリをインストールすることになり、余計な容量を消費します。

仮想環境を作るにあたって、Python のバージョンも重要です。私のPCにも Python3.7 ~ Python3.12 が入っており、デプロイ先の環境に合わせて選択します。ですが、今回の場合 3.8 以上 3.11 以下であればどれでも問題ないと思います。

メインの Python のバージョンの確認は、ターミナルで `which python` または `which python3` で確認できます。ちなみに Mac ですので、Windows だとどうなるかはわかりません。

~~~bash
$ which python3
/Library/Frameworks/Python.framework/Versions/3.9/bin/python3
~~~

それに加えて、別バージョンもインストールしていると `python3.11` や `python3.7` のように確認できるかと思います。以下は私の例です。

~~~bash
$ which python3.11
/opt/homebrew/bin/python3.11

$ which python3.7
/usr/local/bin/python3.7
~~~

この辺はPATHとかエイリアスとか面倒くさい話も絡んでくるのでここでは割愛しますが、とりあえず 3.8 以上であればOKです。そのまま `linebot` リポジトリ内に移動し、

~~~
linebot $ python3 -m venv venv
~~~

このコマンドで、現在使っているバージョンの Python の仮想環境が入ったフォルダ `venv` が作れます。上記のリンクでは `python -m venv .venv` と、隠しフォルダの `.` を付けた名称で作成していますが、VSCode などのエディタを使っている場合はいずれにせよ見えますし、そもそも名前は何でも構いません。仮想環境を有効化するには

~~~bash
linebot $ source venv/bin/activate
(venv) linebot $
~~~

のようにします。仮想環境が有効時には、`(venv)` が前に付きます。この状態で、必要なライブラリを `pip` で再度インストールしていくことになります。

## Flask

**Flask** はPython用の Webアプリケーションフレームワークです。Ruby でいうところの Rails、PHP でいうところの Laravel です。これを使うことで、簡単な Webアプリケーションなら十分作れます。

Pythonの Webアプリケーションフレームワークといえば Django もありますが、Flask の方が軽量かつシンプルということでこちらを採用します。何よりLINE本家のサンプルコードが Flask を使っていますからね。

Flask を使うことで ウェブサイトとしての機能をもたせることもできますが、LINEボットとしてはあくまでバックエンド処理だけあればよく、ページは必須ではありません。Flask でウェブサイトも作りたい場合は、他の記事も参考にしてみてください。

先ほど仮想環境を有効化した状態で、この Flask と、LINE公式の開発キットである `line-bot-sdk` をインストールします。

~~~bash
(venv) linebot $ pip install flask line-bot-sdk
~~~

他にもボットの内容に応じて必要なライブラリをインストールする必要がありますが、今回のテーマは「無料」なので、あまりに欲張りすぎるとライブラリだけであっという間に容量オーバーするので気を付けて下さい。例えば `Pandas` をインストールすると、自動的に `numpy` やらなにやらが付いてきて150MB近く消費します。`tensorflow` とか使おうものなら無料枠だと一発アウトです。

とりあえずはこの2つだけインストールし、足りない分は後ほどその都度 `pip install` していけば良いです。

## ホスティングサービス

これが今回の「無料」ボット作成において一番の壁になります。以前は [Heroku](https://jp.heroku.com/) が圧倒的な人気を誇っていたのですが、2022年末に有料化して以来難民が大量発生しました。私もその難民の一人です。

本格的なものを作る際には AWS などの有料のサービスを使っていますが、誰が使ってくれるかもわからない簡易的なものにそこまでお金はかけられません。そこでオススメするのが、以下の3つです

- [Render](https://render.com/)
- [Python Anywhere](https://www.pythonanywhere.com)
- [Google Cloud Platform App Engine](https://cloud.google.com/appengine?hl=ja)

どれもメリット・デメリットはあるのですが、今回は Render を採用します。GitHubとの連携設定が非常に容易だからです。ただ、無料で作れるアプリは一つのみであり、また GitHub と連携できるアカウントも一つしか作れないので、複数のアプリを動かしたい方は他のサービスで複数アカウントを作るのも手です。実際に私もやっています。

Render のサインアップ、設定方法などはこちらの記事などに詳しく書かれていますので、参考にして下さい。デプロイは次回以降になりますので、GitHub の連携までで大丈夫です。

ただし、Render は**15分アクセスがないと自動でスリープしてしまい、アクセス時の再立ち上げにはかなり時間がかかります**。これを回避する方法は [その5 - tips 編](https://qiita.com/nozomiyamada/items/58918cd4024987ad1979) で解説します。

https://qiita.com/tks_00/items/73cf04c225e5f6113cd8

ここまでで準備完了です。では次回から具体的なボットのプログラム作成に入ります。


## 目次 : [無料][2024年版] LINE Messaging API v3 + Python(Flask) でボットを作る

[GitHub レポジトリ](https://github.com/nozomiyamada/linebot/tree/main)
`older_version` 内に、各回時点での `app.py` と `requirements.txt` があります。

- [その0 - v3 での変更点](https://qiita.com/nozomiyamada/items/dff5f240e8c936d731fd)
- その1 - 準備編
- [その2 - テストアプリ編](https://qiita.com/nozomiyamada/items/87389aacb151b8418501)
- [その3 - 情報検索理論(前編)](https://qiita.com/nozomiyamada/items/d1bcedcc885c43794ff7)
- [その4 - 情報検索理論(後編)](https://qiita.com/nozomiyamada/items/6b0b30ebc36eeddc73d2)
- [その5 - tips 編](https://qiita.com/nozomiyamada/items/58918cd4024987ad1979)
- [その6 - モジュール化編](https://qiita.com/nozomiyamada/items/b80eaf5aef0c294c4acf)
- [その7 - クラス化編](https://qiita.com/nozomiyamada/items/c8315c8a0f0f7d19129b)
- [その8 - Flex Message 編](https://qiita.com/nozomiyamada/items/1be9ae292b01fb35273e)
- [その9 - ポストバック編](https://qiita.com/nozomiyamada/items/8a236a2d38f33827b4ce)
- [その10 - リッチメニュー & LIFF 編](https://qiita.com/nozomiyamada/items/ffbeeafbadfa6e98c711)