LINE BOTの作り方を世界一わかりやすく解説（２）【PythonのDjangoでローカル環境にBotアプリ準備編】

# はじめに

前回は、Line Bot 用のアカウントを作成していきました。
今回から本格的に Line Bot 用のシステムを構築していきます。

Line Bot のシステム構築のために、PHPで書かれている解説記事をよく見かけるのですが、今回は Python を使用したシステムの構築を行っていきます。
理由は、Line Bot のやりとりする文章を解析し、それに対して、最適な回答をするといった「自然言語処理」を使用すする予定であり、Pythonはそういった自然言語処理系のライブラリが豊富であるためです。

そして、PythonのWebフレームワークでも最も代表的な「Django（ジャンゴ）」を使用して、Bot用のアプリケーションを作成していきます。
Djangoや他のWebアプリケーションをつくったことのある人であれば、このまま進めて頂いて大丈夫かと思いますが、初学者やDjangoの使い方を知っておきたいという方は、以前書いた解説記事が分かりやすいので、ぜひご覧下さい。

|No.|タイトル|
|:--:|:--|
|1|[PythonのWebアプリケーション（Django）を初心者にもわかりやすく解説（１）【環境構築編】](http://qiita.com/carat_yoshizaki/items/f3c79e38b802c7fc8863)|
|2|[PythonのWebアプリケーション（Django）を初心者にもわかりやすく解説（２）【プロジェクト作成編】] (http://qiita.com/carat_yoshizaki/items/926f702198bdfe8c6bd2)|
|3|[PythonのWebアプリケーション（Django）を初心者にもわかりやすく解説（３）【アプリケーション作成・DB設定編】] (http://qiita.com/carat_yoshizaki/items/c9a5299b77b99ff07e4a)|
|4|[PythonのWebアプリケーション（Django）を初心者にもわかりやすく解説（４）【ルーティング設定・MTVデザインパターン入門編】](http://qiita.com/carat_yoshizaki/items/fbd235008d7484089270)|
|5|[PythonのWebアプリケーション（Django）を初心者にもわかりやすく解説（５）【Django shellでDB操作入門編】](http://qiita.com/carat_yoshizaki/items/8c57144dfd37e005fb17#_reference-8f82e1176420484c2fdd)|
|6|[PythonのWebアプリケーション（Django）を初心者にもわかりやすく解説（６）【MTVデザインパターン完成編】](http://qiita.com/carat_yoshizaki/items/f0b4f7d7fa3899f2d424)|


# 開発環境

* OS: Mac OS Sierra (10.12)
* Python 3.5.2
* Django 1.10.3　※ この後インストールします

Macの環境を前提として話を進めていきます。

Pythonのバージョン確認は以下の通りです。

```bash:システムのpythonのバージョン確認
$ python3 --version
Python 3.5.2
```

```bash:djangoのインストール
$ pip3 install django==1.10.3
```

```bash:Djangoのバージョン確認
$ python3
Python 3.5.2 (default, Jun 29 2016, 13:43:58)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.get_version()
'1.10.3'
```

# Line Bot の API 用プロジェクトを作成

まず、Pythonのプロジェクトを進めるための一番大きなくくりであるAPI用のPythonの仮想環境（VirtualEnvironment）を作成します。

```bash
$ python3 -m venv api
```

そして、この中にプロジェクトを作成します。
こちらも名前を `api` としています。

```bash:プロジェクトの作成
$ cd api
$ django-admin startproject api .
```

これで仮想環境が出来たのではないでしょうか。
```api``` という名前のディレクトリが作成され、ディレクトリ構造は以下のようになっています。

```bash:ディレクトリ構造の確認（bin等は省略）
$ tree -L 2 api
api
├── api
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── bin
├── include
├── lib
├── manage.py
└── pyvenv.cfg
```

# Djangoアプリケーションの作成

この `api` プロジェクトの中に、`linebot` というアプリケーションを作っていきます。
まず、pythonのwebフレームワークである `Django` をインストールします。
Djangoのバージョンは現在の最新版である `1.10.3` としておきます。

そして、linebotのアプリケーションをこの `api` プロジェクトの中で作成していきます。

```bash:アプリケーションの作成
$ cd api
$ django-admin startapp linebot .
$ tree -L 1 .
api
├── api
├── bin
├── include
├── lib
├── linebot
├── manage.py
└── pyvenv.cfg
```

## Djangoアプリケーション作成後の設定

アプリケーションを作成した後は、諸々の設定が必要になりますが、ここでは最低限必要なもののみを紹介します。

```py:api/settings.py（一部）
# Application definition
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'linebot',  # 追加
)
# タイムゾーンの変更
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
USE_TZ = False  # DefaultではUTCのタイムゾーンのため False に変更
```


### データベース（SQLite）の設定

DBの設定を行います。
今回は特に初期設定から変更無しのSQLiteを使用していきます。

```bash:DBの設定
$ python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK

  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying sessions.0001_initial... OK
```

## サーバーの起動

では、まずローカルでサーバーを起動し、初期設定のWebページが表示されるか確認しましょう。

```bash:Webサーバーの起動
$ python3 manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
November 12, 2016 - 13:04:05
Django version 1.10.3, using settings 'linebot.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
```

Webサーバーが起動すれば、http://127.0.0.1:8000/ へブラウザからアクセスします。


<img width="1066" alt="スクリーンショット 2016-11-12 13.05.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/130181/9911020a-9f42-892c-ce4b-11c423897a72.png">

# まとめ

これでローカルの開発環境が整いました。

Line botはローカルではなく、リモートのサーバーにこのWebアプリケーションを置かないと動作させることが出来ません。
そこで、次回はサーバーへこのアプリケーションを同期させるところまで解説していきます。

# 次回の解説記事
[LINE BOTの作り方を世界一わかりやすく解説（３）【Gitでサーバーとの連携編】](http://qiita.com/carat_yoshizaki/items/59a7a06d520fd33df2e1)


# おまけ

フォローお待ちしています！

* Qiita: [Carat 吉崎](http://qiita.com/carat_yoshizaki)
* twitter：[@carat_yoshizaki](https://twitter.com/carat_yoshizaki)
* はてなブログ：[Carat COOのブログ](http://carat-tech.hatenablog.com/)
* ホームページ：[Carat](http://caratinc.jp)

サービス紹介
「数学→プログラミング→Webアプリケーション」まで一気に学べる機械学習のマンツーマン家庭教師サービス「[キカガク](https://kikagaku.net)」に興味のある方はお気軽にご連絡ください。