SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

日本一わかりやすいLINE Bot開発講座

LINE Bot開発の概要と実装の基本

日本一わかりやすいLINE Bot開発講座 第2回


Procfileの作成と設定

 では次に、Herokuにデプロイしたプロジェクトの動作設定を、Procfileを使って指定しましょう。

 ProcfileとはHerokuにデプロイしたアプリケーションに関する設定を指定するファイルで、使うWebサーバーの種類、ドキュメントルート、条件を指定してのリダイレクト先の指定などが可能です。

 今回は使うWebサーバーのみ指定しておきましょう。

 まずはプロジェクトフォルダにProcfileという名前のファイルを新たに作成します。拡張子は要りません。

Procfileの作成
Procfileの作成

 できたら、以下のように編集し、保存してください。

web: vendor/bin/heroku-php-nginx

 これでWebサーバーにNginxを使うように指定することができました。NginxはApacheで知られるWebサーバーの一つなのですが、Apacheと比べはるかに高機能なので始めからこちらを使いましょう。

 Procfileが存在するプロジェクトをデプロイすれば、以後は設定した環境で実行されます。

index.phpの作成と編集

 LINE Bot SDKを使う準備とHeroku上の動作設定が終わったので、実際にコードを書いていきましょう。

オートローダの指定

 プロジェクトのルートにindex.phpを新たに作成し、以下のように編集してください。

index.phpを作成
index.phpを作成
<?php

require_once __DIR__ . '/vendor/autoload.php';

 ?>

 autoload.phpはComposerが作成するオートローダーで、この一行でComposerがvendorフォルダにダウンロードしたすべてのライブラリを参照できるようになります。

 新しいライブラリを導入するなどしてvendorフォルダの中身が変更されると自動的に生成されるので、いちいちインクルードしなくても良くなり非常に便利です。

CurlHTTPClientとLINEBotのインスタンス化

 次に以下のコードを追記します。

require_once __DIR__ . '/vendor/autoload.php';

$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient(getenv('CHANNEL_ACCESS_TOKEN'));
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => getenv('CHANNEL_SECRET')]);

 ?>

 LINE Developersで取得し、HerokuのSettingで設定したCHANNEL_ACCESS_TOKENを用いてCurlHTTPClientをインスタンス化、同じくCHANNEL_SECRETを用いてLINEBotをインスタンス化しています。

Heroku環境変数
Heroku環境変数

署名の検証作業

 次に以下のコードを追記します。

$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => getenv(‘CHANNEL_SECRET’)]);

$signature = $_SERVER["HTTP_" . \LINE\LINEBot\Constant\HTTPHeader::LINE_SIGNATURE];
try {
  $events = $bot->parseEventRequest(file_get_contents('php://input'), $signature);
} catch(\LINE\LINEBot\Exception\InvalidSignatureException $e) {
  error_log("parseEventRequest failed. InvalidSignatureException => ".var_export($e, true));
} catch(\LINE\LINEBot\Exception\UnknownEventTypeException $e) {
  error_log("parseEventRequest failed. UnknownEventTypeException => ".var_export($e, true));
} catch(\LINE\LINEBot\Exception\UnknownMessageTypeException $e) {
  error_log("parseEventRequest failed. UnknownMessageTypeException => ".var_export($e, true));
} catch(\LINE\LINEBot\Exception\InvalidEventRequestException $e) {
  error_log("parseEventRequest failed. InvalidEventRequestException => ".var_export($e, true));
}

 ?>

 LINEからPOSTされてきたデータをパースし、Eventの配列である変数$eventsに格納します。

 この際、ヘッダーからLINEが付与した署名を取得し、リクエストがLINE Platformから送信されたものであることを確認しています。確認ができなかった場合は変数$eventsが空になり、以降の処理は行われません。

次のページ
デプロイと動作確認

修正履歴

この記事は参考になりましたか?

日本一わかりやすいLINE Bot開発講座連載記事一覧

もっと読む

この記事の著者

立花 翔(タチバナ ショウ)

 LINE株式会社テクニカルエバンジェリスト  個人アプリケーションデベロッパーとして世界中で1000万近くのユーザーと接点を持った経験を元に、デベロッパーのLINEのAPIを利用したビジネスの成功をお手伝いさせて頂いております。 各種APIを始めとするプラットフォームとしてのLINEを啓蒙し、目指...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9811 2016/12/20 16:36

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー