GAE/Kotlin을 시작한다!

Kotlin Advent Calendar 2015의 16 일째 기사입니다.

Kotlin은 JVM에서 실행되는 프로그래밍 언어입니다.
이마도키의 문법과 타입 세이프한 형 시스템으로 작게 안전하게 쓸 수 있는 언어입니다.

그리고 Google App Engine은 Google.com과 동일한 인프라에서 애플리케이션을 실행할 수 있는 Google PaaS에서 지원되는 언어는 Python/Java/PHP/Go입니다.

어떤 사이즈의 어플리케이션도 처음부터 스케일을 의식해 써야 해서 조금 잡기 어렵습니다만 요즘은 일본어의 문서도 늘어나고 있으므로 초보자도 취급할 수 있게 되어 오는 것은 아닐까 생각 합니다.

특히 요금도 무료 테두리가 있으므로 사용하지 않으면 돈이 들지 않습니다.
갑자기 대량의 액세스가 있어도 스케일이 용이하기 때문에 개인 개발이나 스타트 업에는 추천의 플랫폼이라고 할 수 있다고 생각합니다.

환경



MacOSX
Google Cloud SDK 1.9.28
Kotlin 1.0.0-beta-2423

프로젝트 만들기



디렉토리를 만들고 gradle init로 프로젝트 만들기
build.gradle를 편집합니다.

build.gradle
buildscript {
    ext.kotlin_version = '1.0.0-beta-2423'
    ext.gae_sdk_version = '1.9.28'
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.appengine:gradle-appengine-plugin:1.9.18'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

repositories {
    jcenter()
}

apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'war'
apply plugin: 'appengine'

sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7

dependencies {
    appengineSdk "com.google.appengine:appengine-java-sdk:$gae_sdk_version"

    compile 'javax.servlet:servlet-api:2.5'
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile "com.google.appengine:appengine-api-labs:$gae_sdk_version"
    compile 'net.sf.jsr107cache:jsr107cache:1.1'
    compile "com.google.appengine:appengine-jsr107cache:$gae_sdk_version"

    testCompile "com.google.appengine:appengine-api-stubs:$gae_sdk_version"
    testCompile "com.google.appengine:appengine-testing:$gae_sdk_version"
}

appengine {
    downloadSdk = true
    appcfg {
        oauth2 = true
    }
}

task layout << {
    sourceSets*.allSource.srcDirs*.each { it.mkdirs() }
    new File(sourceSets.main.resources.srcDirs[0], 'META-INF').mkdirs()
    new File(webAppDir, 'WEB-INF').mkdirs()
}
./gradlew layout에서 src 디렉토리를 만들 수도 있습니다.
IntelliJ 등으로 프로젝트를 로드해 두면 작업이 편해집니다.

Hello GAE/Kotlin



공식 문서 코드를 Kotlin으로 만들었기 때문에 코드는 재미 없지만 일단
src/main/kotlin에 패키지를 만듭니다.
이번에는 com.inukoya.example에서 만들었습니다.

바로 아래에 MyServlet.kt를 만듭니다.
class MyServlet : HttpServlet() {

    public override fun doGet(req: HttpServletRequest, res: HttpServletResponse) {
        res.contentType = "text/plain"
        res.writer.println("Please use the form to POST to this url")
    }

    public override fun doPost(req: HttpServletRequest, res: HttpServletResponse) {
        val name = req.getParameter("name")
        res.contentType = "text/plain"
        if (name == null) {
            res.writer.println("Please enter a name")
        }
        res.writer.println("Hello $name")
    }
}

그런 다음 src/main/webapp/WEB-INF/appengine-web-app.xml를 만듭니다.

application에는 applicationId를 넣습니다만 이번은 로컬로 움직일 뿐이므로 넣지 않아도 괜찮습니다.

appengine-web-app.xml
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application></application>
    <version>1</version>
    <threadsafe>true</threadsafe>
</appengine-web-app>

그런 다음 라우팅합니다. appengine-web-app.xml과 동일한 디렉토리에 web.xml를 작성하십시오.

web.xml
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>com.inukoya.example.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

welcome-file-list의 index.html은 src/main/webapp/에 작성해 둡니다.

이 작업이 완료되면 다음 명령으로 dev 서버를 시작할 수 있습니다.
$ ./gradlew appengineRun

http://localhost:8080에 액세스할 수 있으면 OK입니다.





코드는 GitHub에 제공됩니다 https://魏Tub. 작은 m/K2 완코/가에코 t인-에 MP

요약



내 생각에 시도했지만 나쁘지는 않다고 생각합니다.
그렇지만, 별로 지금은 단지 Java의 치환일 뿐이기 때문에
무리하게 사용할 필요도 없다고 생각합니다.

Kotlin의 WebFramework도 아직 개발 도상이므로 Kotlin다움을 살렸다
GAE에서 움직이는 Framework가 등장하기를 기다릴지 만들지 할 필요가 있을 것 같았습니다.

참고

좋은 웹페이지 즐겨찾기