夜勤明け (のなんでも出来そうな気分の中) Kotlin/JS
を初めて触ったら面白かったので記事にする。
本題
残りの日数を数えるWebサイトをKotlin/JS
で作ります。
これなら簡単に作れそう。
Kotlin/JS #とは
KotlinコードをJSにトランスパイルする。
JSみたいにDOM操作とかも出来る。
IDEAを開き新規プロジェクトを作成します
追記 2023/12/26
なんか画面が変わって作り方も変わってしかもよく分からなくなってるのでこっちも見て下さい。
https://takusan.negitoro.dev/posts/kotlin_js_fix_javascript_mediarecorder_webm_seek/
Gradle
を押して、Kotlin DSL build script
にチェックを入れ、Kotlin/JS for browser
を選択します。
名前とかは適当に入れてください。
生成後しばらく待ちます。
起動する
IDEA右下のTerminal
をおして、以下のコマンドを入れます。
./gradlew run --continuous
これはホットリロード付きで開発サーバーを起動するコマンドです。勝手にブラウザが起動するはずです。
初回起動時は、ファイアウォールが許可するか聞いてくるので許可してあげてください。
無事ブラウザにHello World
が出てれば成功です。
index.html を書き換える
src/main/resources/index.html
がindex.html
になります。
script
タグを移動
<script>タグ
を<body>
タグの下に移動させます。
これをしないと多分DOM操作時にぬるぽ吐きます。
適当にUIを作る
Kotlin
とりあえず日付を取得するまで
日付を入れてボタンを押したらアラートが出ると思います。
日付計算ライブラリ
別にJS標準のDate
を使うって手もある。
今回はdayjs
を入れようと思います。
Kotlin/JS
でもnpm
からライブラリを入れることが出来ます。
build.gradle.kts
に書き足します。
日付ライブラリといえばmoment.js
ですが、今回はdayjs
を使います。軽いらしい?
JSのライブラリをKotlinで使う
JS
は動的に型をつけますが、Kotlin
では静的に型をつけます。
普通に考えるとJSライブラリが使えないように見えますが、Kotlin/JS
にはdynamic
型が用意されています。
これを使うとJS
みたいに書くことが出来ます。なおこれを使うとKotlin
のNull安全
等の恩恵が受けれなくなるのでKotlinで書く意味・・・?
残り日数計算
を含めた完全版です。
これで残りの日数を表示できます。やったね。
書き出す(ビルド)
ターミナルに以下のコマンドを入力すことでHTMLを書き出すことが出来ます。
build/distributions
に書き出されます。
ホスティング
今回はNetlify
にホスティングして公開します。
とりあえずGitHubに公開する
ここから出来ます。
Netlifyで公開
ビルドコマンドのところを空白にします。
おま環だろうけど、Netlify
でビルド出来なかったのでGitHub Actions
でビルドして、結果だけNetlifyに公開するようにする。
ビルドしないように設定を変更します。Site settings
からBuild & deploy
をおし、Stop builds
します。
GitHub Actions の前に
リポジトリの設定を開いて、Secrets
を開きます。
この中に、必要な値を保存しておきます。
NETLIFY_AUTH_TOKEN
Netlifyのアカウント設定へ進んで、Applications
の中のPersonal access tokens
までスクロールして、New access token
を押して払い出してもらいます。
NETLIFY_SITE_ID
これはさっき公開したサイトの設定へすすんで、Site information
の中のAPI ID:
の値です
こんなふう
GitHub Actions を組む
リポジトリのActions
を選択して、set up a workflow yourself
を押して作成します。
そしたら以下コピペ
できたらCommit
してActions
へ移動して見てみます。
作業進行中
終わったらNetlifyで公開したサイトのURLを開いてます。無事開けたら成功です。
終わりに
完成品です:https://countdown-kotlinjs.netlify.app/
ソースコードです:https://github.com/takusan23/CountdownKotlinJS