【LINE BOT】Java(Maven)+Heroku+SpringBootでラーメンBOTを作ってみたよ(1)


# HerokuとLINE APIを繋いでリプライ機能を作る！
   LINE APIを使ってラーメンBOTを作りたい！と、いうわけで
   まずは手始めに[Java LINE Bot SDK](https://github.com/line/line-bot-sdk-java)を使ってオウム返しを行う "echo" ボットを作る。
▼以下のURLを参考に実装
「Herokuでサンプルボットを作成する」
https://developers.line.me/ja/docs/messaging-api/building-sample-bot-with-heroku/
# 利用したツール
・[LINE Messaging API](https://developers.line.me/ja/)
・[Java LINE Bot SDK](https://github.com/line/line-bot-sdk-java)
・Heroku
・java

# 手順
1.LINE Messaging APIを設定する
2.Herokuを設定する
3.Maven Projectを生成
4.Herokuにデプロイ
※今回、LINE Messaging APIとHerokuの設定は割愛します。


# Maven projectを作成
**1.pom.xml**

```xml:pom.xml
.
.
.

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
	</parent>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>
    
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
		</dependency>
		<dependency>
			<groupId>com.linecorp.bot</groupId>
			<artifactId>line-bot-api-client</artifactId>
			<version>1.12.0</version>
			<scope>compile</scope>
			<exclusions>
				<exclusion>
					<artifactId>commons-logging</artifactId>
					<groupId>commons-logging</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>com.linecorp.bot</groupId>
			<artifactId>line-bot-model</artifactId>
			<version>1.12.0</version>
			<scope>compile</scope>
			<exclusions>
				<exclusion>
					<artifactId>commons-logging</artifactId>
					<groupId>commons-logging</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>com.linecorp.bot</groupId>
			<artifactId>line-bot-spring-boot</artifactId>
			<version>1.11.0</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
```

**2.application.yml**
AcccessTokenとChannel Secretは、LINE Messaging APIで新規Channel作成すると生成されます

```yaml:application.yml
line.bot:
  channel-token: 'AcccessToken'
  channel-secret: 'Channel Secret'
  handler.path: /callback
```
**3.Procfile**
★☆ポイント☆★
1.ルートディレクトリ配下にfileを生成
2.file名は「Procfile」※はじめの「P」は大文字で！
https://devcenter.heroku.com/articles/procfile

```js:Procfile
web: java $JAVA_OPTS -jar target/{APPNAME}-0.0.1-SNAPSHOT.jar --server.port=$PORT
```

**4.App.java**
[Java LINE Bot SDK](https://github.com/line/line-bot-sdk-java)にあるコードをコピペしました。

```java:App.java
@SpringBootApplication
@LineMessageHandler
public class App {
	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
		System.out.println("hello");
	}

	@EventMapping
	public TextMessage handleTextMessageEvent(MessageEvent<TextMessageContent> event) {
		System.out.println("event: " + event);
		return new TextMessage(event.getMessage().getText());
	}

	@EventMapping
	public void handleDefaultMessageEvent(Event event) {
		System.out.println("event: " + event);
	}
}
```
# Herokuにデプロイ！
```js
//ローカルでリポジトリ生成、コミット
$ git init
$ git add -A  
$ git commit

//herokuにCLIツールからログイン
$ heroku login

//Heroku内にwebアプリケーション生成（このときリモートリポジトリも生成される）
$ heroku create APPNAME 

//ローカルリポジトリとリモートリポジトリを紐づけ
$ heroku git:remote --app APPNAME 

git push heroku master
```
# Webhookの設定
・Webhook送信⇒利用する
・Webhook URL⇒https://{APPNAME}.herokuapp.com/callback
   {APPNAME}は自分の作ったアプリケーション名を入れる
   
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/218644/ad75d922-07ff-d95e-09d4-b54548f2286e.png)

**接続確認で成功すればOK！！**


# これで、リプライ機能が実装できました！！
簡単だと思っていましたが、LINE Message APIとherokuがつながらず苦戦しました。
是非参考にしてくださいね☆
次回は、ラーメンBOTを実装します。