たくさんの自由帳
Androidのお話
たくさんの自由帳
投稿日 : | 0 日前
文字数(だいたい) : 18520
目次
本題
作った
ソースコード
公式
ざっくり
つくる
環境
Figma デスクトップアプリ版を入れる
プラグインをつくる
VSCode で開く
git を使う(お好みで)
Vite + React で UI 部分を開発できるようにする
そもそも Vite とか Webpack とか esbuild って何?
esbuild
Vite
Figma の esbuild サンプルを見る
フロントエンド難しすぎ
Figma プラグイン開発で esbuild + Vite + React + Tailwind CSS を使うようにセットアップ
フォルダ構成を変更しておく
esbuild
Vite と React
package.json の編集
React で UI を作る
ビルドしてみる
Figma 側で読み込んでみる
タイプチェックをする
Tailwind CSS を入れる(欲しければ)
Figma Plugin API になれよう
code.ts
座標系
console.log
アイテム(ノード)の選択イベント
片っぽだけ矢印をつける
PluginAPI['mixed'] ←こいつ何?
UI 側のダークモード対応
Figma の UI コンポーネントを使いたい
localStorage はなさそう
ところでどうやって線を書こう?
プラグインを作る
線を書く
矢印を書く
UI とプラグインでやり取りするメッセージ
UI 部分
公開
リリースビルドする
二段階認証を有効にする
公開に必要なもの
審査通った
まとめ
メモ
おわりに
どうもこんばんわ。
届きました。こちら
Rin'ca、待望のアルバム
— Peak A Soul+ (@PAS_STAFF) February 17, 2024
2ndアルバム『Piece of Rin'ca~Pleasant~』全12曲
3rdアルバム『Piece of Rin'ca~natural ~』全13曲
2月23日2枚同時リリース!https://t.co/GwkbMU2ZNhhttps://t.co/Va7oo3QbLa
収録曲は↓
宜しくお願いします。#ピースオブりんか pic.twitter.com/lgOAIwAVU3
特におすすめなのが 恋するMODE(2ndアルバム) と 青い春は君と。(3rdアルバム) です!!!
恋するMODE、ガチ名曲。ずっと聞いてられる。ついでにゲームのD.C.4
もいい!!!。
あと後者もめっちゃ好きなんだけどCUFFS 系列
全然CD出してくれないからこの値段ならすごく安い!!
Figma
で矢印を引くプラグイン、どれがいいんだろう?
選択した2つのアイテム?間を矢印で引いて欲しいんだけどいまいちどれが良いのか分からないのでもういっそのこと作るかになってる。
2つ図形を選んで、その間を矢印で結んでくれます。
ちゃんと右左折が必要な場合は曲がってくれます(複雑じゃなければ)
https://www.figma.com/community/plugin/1344710416431362546
今回はこの話です。
どぞー
https://github.com/takusan23/yajirushi-mode
https://www.figma.com/plugin-docs/
デスクトップ版Figma
を入れるだけでいいらしい(無料ユーザーでも作れるぽい)。
そしてTypeScript
で作れるらしい。よかった。
ユーザーの入力を受け付けるUI
の部分と、実際にFigma
のキャンバス?で図形書いたりする部分はコードレベルで分かれているらしい。(ui.html
、code.js
)
UI
の部分は<iframe>
で読み込まれるらしい。そしてブラウザ用のAPI
も叩けるって!
(Webブラウザの技術、localStorage
とか<input type="file">
、fetch()
も使えるのかな?)
(localStorge
は使えんかった)
UI
側じゃない、Figma
側の方はブラウザではないJavaScript
実行環境らしいので、
JavaScript
の言語機能は使えるけど、ブラウザ由来の機能は使えないとのこと。ちなみに、使える言語機能はES6
までです。
コートレベルで分かれてるので、それぞれメッセージを投げ合ってやり取りすればいいらしい。シリアライズ出来ないとだめですね。
これElectron
のレンダラープロセス、メインプロセスの関係に似てますね。今のElectron
分からんけど;;
https://www.figma.com/plugin-docs/how-plugins-run/
せっかくなので、UI
部分はhtml / css
直書きよりはReact
とかTailwind CSS
を使いたいところですが、、、
どうやらui.html
以外のファイルを渡すことが出来ないらしい。
React
は複数の<script>
からなるし、CSS
もどっかに出てくるので、どうにかして1つのHTML
に全てのJS
とCSS
とHTML
を詰め込まないといけない。
というわけでありました。Bundle
に関しての話
https://www.figma.com/plugin-docs/libraries-and-bundling/
というか、React
の例とesbuild (Vite?)
の例がありました。今回はこれに乗っかります。
create-react-app
のようにWebpack
で良い感じにやるNext.js (や他のフレームワーク)
がオーバースペックすぎる!React
だけよこせな構成で使われるVite
のサンプルもあるあとあんまり関係ないけどなんかとてもわかりやすく説明してる気がする。なんだこれ?
ご丁寧にGIF
画像つかってコマンドラインの操作方法とか書いてる。でもやってることは難しそう。
https://www.figma.com/plugin-docs/plugin-quickstart-guide/
矢印が引ける、Figma Plugin
作ります。
あ、今回はFigma プラグイン
開発には必須ではないReact
、Vite
、esbuild
、Tailwind CSS
とかを使うので、最小限の例が見たければ他行ったほうが良いと思います。
必要なものは、Figma デスクトップアプリ
、VSCode(テキストエディタなら何でも良い)
、Node.js
です。
なまえ | あたい |
---|---|
OS | Windows 10 Pro |
Node.js | v20.9.0 |
https://www.figma.com/ja/downloads/
こちら、私はWindows
版をいれます。秒でインストールが終わりました。。。
UAC
とか求められなかったけどどういう事なの?
https://www.figma.com/plugin-docs/plugin-quickstart-guide/
なにか適当なプロジェクトを開いて(なければ作ります)
↓ デザインの方を押す
次に、左上のロゴを押して、プラグイン
→開発
→プラグインの新規作成
を押します。
名前は適当につけて、今回はFigma
のデザインの方だけで動けばいいので、デザインの方
を選びます。
矢印を作るプラグインを作るわけですが、矢印の設定とかをするための画面が必要なので、カスタムUI
を選びます。
あとは保存先を尋ねてくるので、適当に選びます。
これで最小限のプラグインのコードが出来たらしいです。
完了を押すとプラグインにありました!
https://www.figma.com/plugin-docs/plugin-quickstart-guide/#install-project-dependencies
保存先をVSCode
で開きます。
ファイルの中身はこうなってるでしょうか?
Node.js
を使ったことがあれば気付くかもしれませんが、node_modules
とか言うのがいませんね。
というわけでnpm i
します。
まあコマンドプロンプト
とかGitBash
でも何でも良いんですが、VSCode
から起動できるのでもうそれで、
ターミナル
をVSCode
で開きます。Windows
以外はしらんけど多分おんなじ感じだと思う。
そこでnpm i
を打ち込んでエンターです。
ながい。gradle
のそれと違ってライブラリはプロジェクト毎にダウンロードするので長いです。
これで依存関係もおっけー
Git
を使いたい場合は。git init
コマンドを叩いてね。
コミットとかしたい場合は。とりあえず動かしたければ要らないね。
gitignore
がすでにあるので便利ですね。
git init
Next.js
とかはこのWebpack
とかのバンドラーの設定をいい感じにやってくれてたから。。。いざ自分がやろうとするときついな。
雰囲気でesbuild
サンプルとにらめっこしてみる。
ガチでフロントエンド何もわからない。
型付きでおなじみTypeScript
のコードはブラウザでは動かせないんですね。ブラウザはJavaScript
しか分からないので。
なので、TypeScript
をJavaScript
に変換しないといけないのですが、これはesbuild
がやってくれるらしい。
あ、今更ですがTypeScript
はJavaScript
に変換される都合上、お硬い言語にあるinstanceof
とかはありません。
型情報はJavaScript
に変換する際に消え去るので、実行時にクラスを判別とかは出来ないです。
また、React
のJSX / TSX
もJavaScript
に直さないといけないのですが、これもJavaScript
にしないといけません。
これもesbuild
がやってくれるらしい。
その他、ライブラリのコードを自分の書いたコードといっしょに吐き出して本番で動かせる(node_modules
無しで起動)ようにする機能、
古いJavaScript
実行環境でも(Figma
のプラグイン(UIじゃない方)はES6+
までの言語機能はサポート)新しい言語構文を使えるように、古くても動くように書き直す機能とかもesbuild
がやるらしい。
これらはesbuild
以外のWebpack
とかも同じことをやるらしい。
Vite
は何?
ありざいす
どうやら、esbuild
には開発サーバー機能がないらしい?。
React
とかのフロント開発では、開発サーバーを立ち上げて快適ホットリロードのありがたみを感じつつ開発をすると思いますがないらしい。これがないといちいちビルドし直さないといけない?
→ というより、Figma プラグイン
はUI
に必要なJS / HTML / CSS
を一つのhtml
にしないといけないので、ホットリロードよりもこのためかも。
そのためにVite
を使ってるとかなんですかね?もうよくわからない。
https://github.com/figma/plugin-samples/blob/master/esbuild-react/package.json
どうやら、UI
部分の開発にはVite
、Figma
上で動く方はesbuild
にやらせているそうです。
てなわけで普通にReact
を使ったWebサイト
を作りたければ、すぐに使えるNext.js
とかを選ぼうねってReact
の人が言ってる。
Figma プラグイン
開発でReact
使いたければ地道にセットアップするしか無いと思いますが。。。
https://ja.react.dev/learn/start-a-new-react-project
Vite
じゃなくてWebpack
でも良いはずなんだけど、Webpack
はNext.js
で使ったことあるので今回はVite
にしてみる。
React
のコンポーネント置き場ようにsrc
みたいなのを置いておくべきかなと思ったので。
src-ui
とsrc-plugin
を作りました。src-ui
にはReact
とかのUI 関連
を、src-plugin
にはUIじゃないFigma
上で動く方を。
src-plugin
の方には早速code.ts
を移動させました。
また、code.js
と、ui.html
は要らなくなるので消します。消すのはcode.jsの方で、code.tsの方はsrc-plugin
に移動させてください。
それから、tsconfig.json
も消しちゃいましょう。
そしてsrc-plugin
フォルダ内にtsconfig.json
を追加します。削除せずとも移動させるでも良かったんですが。中身はこんな感じ。
サンプル通りです。https://github.com/figma/plugin-samples/blob/master/esbuild-react/plugin-src/tsconfig.json
最後、変更した都合上、パスが変わってしまったので、manifest.json
を変更します。
変更点は、main
の"code.js"
が"dist/code.js"
に。ui
の"ui.html"
が"dist/index.html"
になります。
ここまでのファイル構成と、manifest.json
です。
https://esbuild.github.io/getting-started/
まずは簡単そうな、Figma
上で動く方を(UI
じゃない方)。
VSCode
のターミナルへ戻り、esbuild
ライブラリを追加します。
開発時しか使わない(React
みたいにブラウザ側では使わない)ので--save-dev
ですね。
ひとまずこれで、次にVite + React + Tailwind CSS
でUI
側いきます。
Vite
を入れて、React
も使えるようにします。
・・・が、npx create
以外の方法が書いてないのかな?npm install vite
の方法で地道にセットアップしたいんやが?
というわけで手探りでやってみる。
サンプルをみると、vite /vite-plugin-singlefile / plugin-react-refresh の3つを入れているのでまずは入れてみる。
plugin-react-refresh
が非推奨になってしまったので、@vitejs/plugin-react
の方を入れます。
次に、React
を入れます。--save-dev
は付けません。
TypeScript
なので型定義ファイルも入れます。
次に、vite
の設定ファイルを作ります。
vite.config.ts
をsrc-ui
があるフォルダと同じところに作成して、サンプルを参考にしながら(というかほぼコピペ)こんな感じ。
https://github.com/figma/plugin-samples/blob/master/esbuild-react/vite.config.ts
多分パスを./src-ui
にすればいいはず。
現時点のファイル構成
Figma
の方はesbuild
でJavaScript
に、React
で作るUI
の方はVite
でJavaScript
にできるようにします。
package.json
を開き、scripts
の部分を変更します。scripts
以降は変更ないです。
変更点はscripts
内の、build
、build:plugin
、build:ui
コマンドの追加です。
build
コマンド
plugin
とui
のビルドをやるbuild:plugin
esbuild
を使い、code.ts
をJavaScript
にしてdist
に入れるように。
--target=es2015
の部分。
optional chaining
がES6
だと使えないJavaScript
に入れてねって。build:ui
vite
を使ってvite.config.ts
を元にJavaScript
にしたのちdist
に入れてねってしてるらしい。消してしまったui.html
をReact
で再現させましょう。
code.ts
の方はそのままなので、ui.html
の画面をReact
で作って、ui.html
でやっていたJavaScript
を書けば良いはず。
src-ui
にApp.tsx
って名前でファイルを作り、以下のtsx
を貼り付けてね。
次に、同じフォルダへmain.tsx
を作り、App()
コンポーネントを呼び出します。
最後に、また同じフォルダにindex.html
を作り、以下をコピペします。
React
を呼び出すやつですね。
で、消えないエラーがあると思います。src-plugin/
にはtsconfig.json
がありますが、src-ui/
にはtsconfig.json
が無いからですね。
というわけでsrc-ui
フォルダ内にtsconfig.json
を追加し、以下コピペ。これもサンプル通りです。。。
https://github.com/figma/plugin-samples/blob/master/esbuild-react/ui-src/tsconfig.json
あと、vite-env.d.ts
ファイルを置くのが、Vite + React
アプリのお作法?らしいので置いておきます。
src-ui
内にvite-env.d.ts
ファイルを作って、以下コピペ。
ここまでのファイル構成です。
npm run build
をターミナルで叩くことで、UI
側とプラグイン側のJavaScript
吐き出しが行われます。
dist
フォルダが出来て、code.js
とindex.html
があれば成功!!!
おっめでと~~~~🎉🎉🎉
まだ設定が終わったところなんですけどね初見さん。あとホットリロードとかはscripts
で書いてないので無いです。
Figma
のデスクトップアプリを開いて、作ってるやつを押してみれば良いはず。
はえ~最初に書いてあったui.html
はこんな姿だったんですね~
(React
で書くため速攻で消したので知らなかった)
ボタンを押してみる。えいっ
オレンジの四角形が5個並びました!おお~
とりあえずesbuild
でFigma プラグイン側
、Vite
でFigma UI側
両方がちゃんと設定されてうまく動いていそうです。
よかったよかった。
esbuild
はTypeScript
の型が合っているかまでは見てくれないので、プロパティが足りないとか、型があってないとかのエラーがあってもトランスパイルされちゃいます。
VSCode
上でも見れますが、開いてないと分からないので型チェックするようにしましょう。
package.json
を開いて、tsc
コマンドを追加します。scripts
に1個追加です。
tsc
コマンドを足しました。src-plugin
とsrc-ui
の中にあるTypeScript
コードで型があっているかのチェックができるようになりました。
あ、要らなければ別にいいです。私は欲しいので...
https://tailwindcss.com/docs/guides/vite
React
で書けるようになった!!でもCSS
書きたくない。
というわけでTailwind CSS
を入れます。Vite
環境下での導入方法がちゃんとあります!
Tailwind CSS
を入れて。
Tailwind CSS
の構成ファイルを以下のコマンドで生成します。
tailwind.config.js
とpostcss.config.js
がでてくるはず。
できたら、tailwind.config.js
を開いて書き換えます。
Tailwind CSS
のユーティリティ名の走査対象ファイルをsrc-ui
にします。
次に、src-ui
にApp.css
を追加します。
中身はこんな感じ。
そして最後、App.tsx
を開き、App.css
をimport
します。
ついでに、味気ないのでApp.tsx
をTailwind CSS
でいい感じに見た目を揃えておきます。
センスが無いのであれですが、とりあえずTailwind CSS
のセットアップも出来ました。
本題の矢印を書く前に、手始めに四角形
じゃなくて矢印
を出せるようにしてみましょう。
サンプルコードではcreateRect()
してますが、これをcreateLine()
にすれば棒が出てくるようになります。
また、strokes
で線の色、strokeCap
で矢印を出せるようです。
こんな感じ。
なるほど。。。
Figma
は上に向けてマイナスになる。(WebGL のそれと違うのか...)
右向かってプラスは他と変わらんかも。
ここのコンソールを表示/非表示
を選ぶことで、見慣れた画面が出てきます。
console
タブに移動すれば、console.log()
の内容が出力されます。これはUI
側(React
)もFigma で動く側
(code.ts
)もここに出てきます。
code.ts
でこんな感じに書けば、、、取れます。
選択中アイテムを配列で返してくれます。
注意点ですが、selection
の配列の順番は決まっていません。
これは、2個選択した際に、0
番目が最初に選択したノードになるかもしれないし、2回目に選択したノードになるかもしれないということです。
https://www.figma.com/plugin-docs/api/properties/PageNode-selection/
strokeCap = 'ARROW_LINES'
すれば矢印が引けることがわかりました、、、が、
別に両方矢印は要らない。片方ついてたらそれでいい。
↓これ。こんな感じに右側だけ矢印をつけたい。
というわけで調査してみた。Figma
で矢印を引いてNode
をconsole.log
して色々見てみた。
結果、あれは線(createLine())
ではなく、ベクターで出来てて(createVector()
)、
VectorNetwork
で、ストロークに矢印をつける(?)ようにすればいいらしい。
vectorPaths
した後に、またsetVectorNetworkAsync
してて何がしたいんだって話ですが、
SVG
のパスを書くのが一番速く、簡単なのですが、矢印をストロークに付けたい場合は、
VectorNetwork
オブジェクト内のvertices
に入ってるストロークを変化させる必要がある、、、が、VectorNetwork
オブジェクトを作るのが多分とてもつらいので、
SVG
のパスをvectorPaths
で書いてから、vectorNetwork
プロパティに反映されたオブジェクトから最後のストロークだけ変化させて、setVectorNetworkAsync
で反映させる。
が一番いいのかなと思いました。
こんな感じにかたっぽだけ矢印が付きます。
たまにこの、number
とPluginAPI['mixed']
のunion
で定義されているプロパティーがあります。
で、このPluginAPI['mixed']
はJavaScript
のSymbol
らしい、、、Symbol
、はて何なんだ?
というわけで見てみたけど、どうやら表現できない値の時にnumber
ではなくPluginAPI['mixed']
を入れているらしい。
symbol
の言語機能を使っているとかではなく、ただ表現できない時にsymbol
を入れてるだけだった。symbol
使ったことないから助かる(?)。
https://www.figma.com/plugin-docs/api/properties/figma-mixed/
だからunion
なんですね、で、その表現できない値が何?
ってわけなんですが、どうやら角を丸くするやつとかは、右上だけ丸くする。など部分的に丸めたい時、1つのプロパティでは表現出来ないため、
代わりになる別のプロパティに値を入れて、元のプロパティにはPluginAPI['mixed']
で表現出来ないよって表しているらしい。
この辺参照。
https://www.figma.com/plugin-docs/css-variables/#semantic-color-tokens
背景勝手に暗くなるけどFigma
が既に用意してくれてるやつだしそれ使ったほうが良さそう(?)
この辺見て、
このサイト知ったのが作ったあとなので、私は使ってない!(頑張ってTailwind CSS
で見た目整えた)
気が向いたらやるかも。もっと早く言って欲しかった
https://www.figma.com/plugin-docs/figma-components/
使えないっぽい。
代わりに、Figma プラグイン
側にfigma.clientStorage
っていう、Key-Value
で設定とか保存できるlocalStorage
みたいなやつがいるので、それを使えば良さそう。
UI
から保存したい場合は、プラグイン側へメッセージを投げて、保存して貰う必要があります。
https://github.com/takusan23/yajirushi-mode/blob/master/src-plugin/code.ts#L41
環境構築とFigma Plugin API
ちょろっといじって気付いた。
どうやって線を書こう。というか、曲がった線なんて引けなくない?
createLine()
の場合は、多分真っ直ぐにしか引けず、しかも傾けるとかは厳しそう雰囲気。
てなわけで調べた。SVG
のパスが使えるらしい。
https://www.figma.com/plugin-docs/api/properties/figma-createvector/
どうやら、figma.createVector()
とか言うので、VectorNode
が作成できる。
これが、SVG
で線がかけるやつらしく、例えばこんな感じなSVG
のパスを書くと。。。
線が引ける。
これをいい感じにすれば良さそうね。
ちなみに、このSVG
のパス(M 5501 -9064 L 5829 -8772 L 5829 -8772
)は何を表しているかと言うと、1行毎に分解するとわかりやすいかも。
最初と最後だけがあれば良いわけではなく、2つ以上L
が無いといけない?
なんか中間点ないと矢印引けないとかだっけ?
もうつかれたので、ここからは端折ります。
愚直に線を伸ばして当たるかどうか試してるだけです。
U字で線が書けるか、一回折れ曲がるだけで書けるかなどを試してうまく行けば線を書いてる。
開始点、曲がる点、曲がる点、終了点の座標を入れた配列を返しています。
[ {x: 0, y: 0}, {x: 0, y: 0}, {x: 0, y: 0} ... ]
具体的にはこの辺のコード
https://github.com/takusan23/yajirushi-mode/blob/master/src-plugin/DrawLineAlgorithmTool.ts
線を書くための点をもらったら、そのとおりにSVG
を書きます。
書いたら、VectorNetwork
を取得して、ディープコピーした後、最初と最後の線を矢印で装飾します。
この辺です。
https://github.com/takusan23/yajirushi-mode/blob/master/src-plugin/CreateArrowTool.ts
何となく共通化しといたほうがいいかなと思ってこの辺に。
JSON.stringify
を使って文字列にした後、Figma プラグイン
側にメッセージを送るため、シリアライズできる必要があります。
https://github.com/takusan23/yajirushi-mode/blob/master/src-common/MessageTypes.ts
編集画面の各編集項目はコンポーネントに切り出してます。
面倒なので再レンダリングとかはまじで意識してないです、、、
https://github.com/takusan23/yajirushi-mode/blob/master/src-ui/components/ArrowSetting.tsx
そう言えば編集画面はかなり見通しが悪くなっちゃったので、カスタムフックに全部切り出しました。
といっても、位置と、UIで入力したパラメーターくらいしか渡していなく、線をどこまで書けばいいか等は全部プラグイン側なので、、、
https://github.com/takusan23/yajirushi-mode/blob/master/src-ui/hooks/useArrowSetting.ts
ちょっと頑張ったので、縦並びを選択したら縦になるし、横並びで選択したら横になるようにした。
https://github.com/takusan23/yajirushi-mode/blob/master/src-ui/hooks/useArrowSetting.ts#L85
以下を参考に
プラグイン一覧を開くと、開発中のも表示されるので、ここから公開を押す。
もしwebpack
とかvite
等のバンドラーが開発モードだった場合は本番にしてビルドしましょう。
Figma
アカウントを二段階認証できるようにしないとだめらしい
必要な、というか面倒なのは以下ですね。
1920x1080
)128x128
)説明とかは、まあ一応それっぽい英語と日本語で書いておきました。
連絡先とか、誰かと一緒に作った場合はここで追加できます。
次にプライバシー?の質問があるけど、これはスキップできるらしい。
サーバーにデータ送るか、ログイン機能があるか、インターネット経由でアセット(Webフォントとか)ダウンロードするか等。
今回作ったプラグインはインターネット切り離しても動くと思う(必要なものは全てバンドルした)からほぼNo
だと思う。
これで公開できます。
公開ボタンを押しましょう。
できた
アプリストアみたいに、審査があるらしい。わくてか
なんかプライバシーについての質問に答えると、ご協力ありがとうねって言ってくれます。
はやい。その日のうちに通ってない?
審査結果はメールで貰えます。
Figma
の座標系は上に向けてマイナスになるUI側
をHTML / CSS / JavaScript
で書いて、プラグイン側
をTypeScript (JS)
で書いてもいい
esbuild
とか使って余計にややこしくなったけど...esbuild
がとても速い
ES6
向けにビルドするよう注意ねReact
やその周辺ツールは動くハズ。(Tailwind CSS
、i18next
も動いた)
index.html
一つにまとめる必要があるのでVite
等のバンドラ設定しようUI
はFigma
のコンポーネントが使えるかもしれないcode.js
とui
のindex.html
は監視してる?
npm run build
した後にFigma デスクトップアプリ
に戻ると、プラグインが再読み込みされてるError: Syntax error on line 1: Unexpected token .
optional chaining
を使ったらエラーで進まなくなった。
dataOrNull?.name
とかdataOrNull?.getName?.()
みたいに、Null
の可能性がある場合でも?.
で呼び出せるやつFigma
のプラグイン
で動く方は、ES6+
までの言語機能しか無い
esbuild
のコマンドで--target=es2015
すると、?.
の構文をES2015 (ES6)
で動かせるようにesbuild
が書き直してくれます。TypeScript
力が試されている感が
Kotlin
にはない概念というか、、、TypeScript
の静的解析がとても賢いなと思うmanifest.json
に書いたり..とかではないesbuild
がめちゃめちゃ速い。以上です。