LoginSignup
5
12

More than 5 years have passed since last update.

Kotlinでwebアプリ作成してHerokuにデプロイ

Last updated at Posted at 2018-11-14

はじめに

先日Kotlin1.3がリリースされました。
これからは、Kotlinが来るんじゃないかと思い、入門してみます。

目標

以下を順に行います。

  • Javaのインストール
  • Spring Initializrでひな形作成
  • 設定ファイルの修正
  • プログラムとテンプレートの作成
  • Herokuでのデプロイ

環境

ベースがJavaなので、Javaさえ動けば何とかなるかと思います。
今回はCloud9(Blank)で環境構築します。
なお、Cloud9のOSは ubuntu 14.04 と古いです。

環境構築

Javaインストール

デフォルトでインストールしてあるJavaはバージョンが1.7です。

$ java -version
java version "1.7.0_151"
OpenJDK Runtime Environment (IcedTea 2.6.11) (7u151-2.6.11-0ubuntu1.14.04.1)
OpenJDK 64-Bit Server VM (build 24.151-b01, mixed mode)

今回はSpring Boot 2を利用するため、8以上が必須です。
そのため、最新のJava11をインストールします。

リポジトリの追加

sudo add-apt-repository ppa:linuxuprising/java

アップデート&インストール

sudo apt update
sudo apt install openjdk-11-jdk

途中で、Oracleのライセンスの画面がでますので、画面の指示に従ってください。

$ java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

Spring Initializrでひな形作成

Spring Initializrでひな形を作成します。

Generate a [Gradle Project] with [Kotlin] and Spring Boot [2.1.0]

DependenciesはWebとThymeleafを選択してください。

「Generate Project alt + ⏎」
でひな形がダウンロードできます。
その後、任意のフォルダに展開してください。

※ curlでダウンロードしたほうが簡単かもしれません。

curl https://start.spring.io/starter.tgz -d type=gradle-project -d language=kotlin -d dependencies=web,thymeleaf | tar xvfz -

各種パラメータはこちらで確認できます。

curl start.spring.io

ファイルの修正

ひな形のKotlinは1.2.70になります。
せっかくなので、最新版の1.3.0にしましょう。

build.gradleの最初のほうに、Kotlinのバージョンが指定していあるので、そこを変更してください。

build.gradle
buildscript {
    ext {
        kotlinVersion = '1.2.70' # ここを'1.3.0'にする
        springBootVersion = '2.1.0.RELEASE'
    }
~ 以下省略 ~

コンパイル&実行

展開したフォルダで以下を実行するだけです。
必要なモジュールをダウンロードしたりコンパイルしたりして実行してくれます。

./gradlew bootRun

実行したら、試しにアクセスしてみてください。
Cloud9だと、自動的にアプリケーションリンクになります。
ローカル環境の場合は、localhost:8080にアクセスしましょう。

すると、まだコントローラーなどをコーディングしていないので、エラー画面が表示されます。

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Nov 13 02:42:09 UTC 2018
There was an unexpected error (type=Not Found, status=404).
No message available

プログラムとテンプレートの作成

プログラム(コントローラー)として、以下のファイルを作成します。

src/main/kotlin/com/example/demo/Hello.kt
package com.example.demo

import org.springframework.stereotype.Controller
import org.springframework.ui.Model
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestParam

@Controller
class Hello {
    @GetMapping("/")
    fun hello(
        @RequestParam(value = "name", required = false, defaultValue = "world") name: String,
        model: Model): String {
        model.addAttribute("name", name)
        return "index"
    }
}

htmlテンプレートとして、以下のファイルを作成します。

src/main/resources/templates/index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" http-equiv="Content-Type" content="text/html" />
    <title>Getting Started: Saving Web Content</title>
</head>
<body>
    <p th:text="'Hello, ' + ${name} + '!'" />
    <form action="." method="get">
        <input type="text" name="name">
    </form>
</body>
</html>

再度コンパイル&実行します。

./gradlew bootRun

画面に、「Hello, world!」が表示されます。
テキストボックスに名前を入れると、入力した名前が表示されます。

Herokuへのデプロイ

設定ファイル追加

以下のファイルを修正&追加します。

src/main/resources/application.properties
server.port=${PORT:5000}
Procfile
web: java -jar build/libs/demo-0.0.1-SNAPSHOT.jar

herokucliインストール

ubuntuならこれだけです。

sudo apt install heroku

herokuアカウント作成

アカウントがない人はこちらから作成してください。
https://signup.heroku.com/
gmailを利用している場合には、
いつものアドレス+xxx@gmail.comとすることにより、複数アカウントが作成できます。
確認メールが届いたら、パスワードを設定してください。

デプロイ

ログインして

$ heroku login
Enter your Heroku credentials:
Email: xxxxx@mail.xxx
Password: *************
Logged in as xxxxx@mail.xxx

ローカルにgitリポジトリを作成して

git init
git add .
git commit -m "first commit"

herokuアプリケーションを作成して、pushしましょう。

heroku create
git push heroku master

しばらく待つと、remoteでbuildしてデプロイしてくれます。

成功すると、以下のようなログが出力されます。

remote:        
remote:        BUILD SUCCESSFUL in 34s
remote:        4 actionable tasks: 4 executed
remote: -----> Discovering process types
remote:        Procfile declares types     -> (none)
remote:        Default types for buildpack -> web
remote: 
remote: -----> Compressing...
remote:        Done: 69.5M
remote: -----> Launching...
remote:        Released v3
remote:        https://xxx-xxx-xxx.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/xxx-xxx-xxx.git
 * [new branch]      master -> master

あとは、好きに改造してみてください。

終わりに

今まで、Java系はとっつきにくい気がして敬遠してましたが、Spring Bootを使うとあっという間にできてびっくりしました。
食わず嫌いはダメですね。

herokuもgradleの情報が少なかったですが、何も考えずにpushしたらできちゃいました。
これから利用していきたいと思います。

参考にしたページ

5
12
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
5
12