Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8725

Kotlin/JSでもサーバーサイドしたい!

$
0
0

こんにちは、マヤミトです。
今回はKotlin/JSとkotlinx-nodejsを使ってサーバーを立てる簡単なサンプルを作ってみました。

kotlinx-nodejsの紹介

kotlinx-nodejsは、Node.jsのAPIのKotlin/JS向けの型定義を提供します。TypeScriptでいう d.tsファイルがまとまっていると考えるとわかりやすいかもしれません。
https://github.com/Kotlin/kotlinx-nodejs

導入

build.gradleに依存を追加し、targetをnodejsにします。

build.gradle.kts
repositories{mavenCentral()jcenter()// 追加}dependencies{implementation(kotlin("stdlib-js"))implementation("org.jetbrains.kotlinx:kotlinx-nodejs:0.0.7")// 追加}kotlin.js{nodejs()// 追加}

簡単なhttpサーバーを書いてみる

リクエストが来たらそれのurlとmethodを返すだけの簡単なサーバーを書いてみます。

main.kt
funmain(){valserver=http.createServer{req,res->res.write("url: ${req.url}\n")res.write("method: ${req.method}")res.end()}server.listen(8080)}

Node.jsでサーバーを書いたことのある人ならわかるかもしれませんが、用意されている関数の使い方などはほぼ変わりません。私はNode初心者ですが、JavaScriptで書かれたサンプルをほぼそのままKotlinに書き換えることができました。

サーバーの起動

ターミナルで

./gradlew nodeRun

を実行すると、指定したポート(今回は8080)でサーバーが起動します。
実際にcurlで叩いてみるとこんな感じです。

curl -X GET localhost:8080/hoge
url: /hoge
method: GET

curl -X POST localhost:8080/hoge
url: /hoge
method: POST

JSへのビルド

Gradle経由ではなく、JSのファイルを吐き出してnodeコマンドで実行したい場合、追加でいくつか設定が必要です。

まず、 build.gradlewebpack-node-externalsの依存を追加し、ターゲットにbrowserを追加します。

build.gradle.kts
dependencies{implementation(kotlin("stdlib-js"))implementation("org.jetbrains.kotlinx:kotlinx-nodejs:0.0.7")implementation(npm("webpack-node-externals","2.5.1"))// 追加}kotlin.js{browser()// 追加nodejs()}

プロジェクトルートの webpack.config.dディレクトリの中に webpack.config.jsファイルを以下の内容で作成します。

webpack.config.js
varnodeExternals=require('webpack-node-externals');config.target='node';config.externals=[nodeExternals()];

ターミナルで

./gradlew browserWebpack

を実行すると、 build/distributions以下にビルド後のJavaScriptのファイルが生成されます。デフォルトだと生成されるファイル名は プロジェクト名.jsですが、任意の名前に変更したい場合は以下の内容を build.gradlewebpackTaskに追加します。

build.gradle.kts
kotlin.js{browser{webpackTask{outputFileName="main.js"// 生成したいファイル名}}nodejs()}

生成されたJavaScriptのファイルは、nodeコマンドから実行することができます。

node main.js   

まとめ

  • Kotlin/JSでもサーバーサイドはできる
  • JSを吐き出したいときにはターゲットをブラウザにしてWebpackでビルドするという直感に反する作業が必要

情報が少なかった割には意外とすんなりできてしまいました。Kotlin好きの皆さんもぜひ一度試してみてください。

今回のサンプルコードは自分のGitHubにて公開しているのでよかったらどうぞ。
https://github.com/yt8492/KotlinOnNodeJSSample

参考

https://github.com/Kotlin/kotlinx-nodejs
https://saku.io/build-for-node-runtime-using-webpack/


Viewing all articles
Browse latest Browse all 8725

Trending Articles