Slide 1

Slide 1 text

Kotlin/JSでもSSGしたい! Zli・LOCAL学生部 合同LT会2021

Slide 2

Slide 2 text

自己紹介 HN: マヤミト 会津大学26期 (学部3年) 所属サークル: Zli GitHub: https://github.com/yt8492 好きな言語: Kotlin, Java, Scala 趣味: Kotlin, 同人音声, VTuber Twitter: yt8492

Slide 3

Slide 3 text

突然ですが 僕のポートフォリオを見てください

Slide 4

Slide 4 text

使用技術 - Kotlin/JS - 1.4.30 - React - styled-components - kotlin-wrappers - kotlin-react - kotlin-styled - kotlin-css

Slide 5

Slide 5 text

皆さんはこう思いませんでしたか?

Slide 6

Slide 6 text

皆さんはこう思いませんでしたか? HTMLとCSSだけでいいじゃん

Slide 7

Slide 7 text

それはそう

Slide 8

Slide 8 text

イケてない点 - 吐き出されたJSがデカい - 291kB - そもそもJS(React)を使う意味とは - このページに動的な要素ないじゃん - HTMLとCSSだけで表現可能 - レンダリングされた状態で返してほしい

Slide 9

Slide 9 text

💡Kotlin/JSからHTMLを生成しよう

Slide 10

Slide 10 text

Reactの要素をHTMLにレンダリングする - ReactDOMServer.renderToString でReactの要素をHTMLのStringに変換する - kotlin-reactにはない😇 - なので自分でラッパーを書きます

Slide 11

Slide 11 text

Reactの要素をHTMLにレンダリングする

Slide 12

Slide 12 text

スタイルが死んでる🤔

Slide 13

Slide 13 text

styled-componentsのスタイルもレンダリングが必要 - ServerStyleSheetを用いてReactの要素をラップする必要がある - kotlin-styledにはない() - なので自分でラッパーを書きます

Slide 14

Slide 14 text

今度こそレンダリングする

Slide 15

Slide 15 text

できた🎉

Slide 16

Slide 16 text

デバッグが大変だな🤔 1. コードを書く 2. GradleのタスクでKotlin/JSをJavaScriptにトランスパイルする ./gradlew browserWebpack 3. Nodeで吐き出されたJSを実行しHTMLを生成する node main.js 4. 画像などのリソースが配置されたディレクトリにコピーする 5. ブラウザから開く

Slide 17

Slide 17 text

SSGにする前はデバッグが簡単だった 1. Gradleのタスクでホットリロードが有効な状態でブラウザで動かす ./gradlew browserRun -t 2. コードを書く 3. 変更が反映される

Slide 18

Slide 18 text

開発中はCSR、本番はSSGにする - Gradleはモジュールを分けることができる - sharedモジュールにReactの要素と画像などのリソースを置く - 開発用のcsrモジュールと本番用のssgモジュールを作り、それぞれからsharedモ ジュールを参照する - resourcesのリソースは参照できなかったのでシンボリックリンクで対応 - いい方法知ってたら誰か教えて - csrモジュールのmain関数にはブラウザで動かすためのコードを書く - ./gradlew :csr:browserRun -t - ssgモジュールのmain関数にはnodeで動かすSSGのコードを書く - ./gradlew :ssg:browserWebpack - node main.js

Slide 19

Slide 19 text

shared csr ssg - Reactの要素 - 画像などのリソース - ブラウザで開くための HTML - SSGのためのラッパー関数

Slide 20

Slide 20 text

開発が楽になった🎉

Slide 21

Slide 21 text

KotlinでSSGするまとめ - Reactやstyled-componentsのSSGに必要な関数は自分でラッパーを書く必要が ある - 逆にラッパーさえ用意してしまえばすんなりできてしまった - デバッグ用にCSRのモジュールも用意すると楽そう

Slide 22

Slide 22 text

あわせて読みたい Kotlin/JSでWebフロント開発をはじめよう https://qiita.com/yt8492/items/250e4f7ac19fa8a66a74 Kotlin/JSでもサーバーサイドしたい! https://qiita.com/yt8492/items/1271b30ecd26f5ca0efb