推しアイデア
完全無料、静的サイトホスティングでホストできる問題文を自動生成するタイピングゲーム 全てをフロントエンドで行っているため、学習データと生成する文字数を実行時に指定することができる
完全無料、静的サイトホスティングでホストできる問題文を自動生成するタイピングゲーム 全てをフロントエンドで行っているため、学習データと生成する文字数を実行時に指定することができる
久しぶりにゲームを作りたいと思い、いろいろ考えていたところ某タイピングゲームの文字列の一文字を置換すると「あつすぎだ」の部分文字列になるなと思ったため
Scala3 Scala.js
言語機能がとにかく強力で、全部盛り。 オブジェクト指向的機能, 第一級関数, 式指向はもちろん、do構文的機能(for式),パターンマッチ,高階多相(型レベルの高階関数のようなもの), ランクN多相, 暗黙的引数,マクロまでなんでもそろっている。 Scala3でインデント記法も使えるようになった。 JVMで動作するのはもちろん、Scala.jsでjs、Scala Nativeでネイティブバイナリにコンパイルすることができる。
AltJSの一つ。Scala.js対応ライブラリとJavaScriptのライブラリを使用することができる。ScalableTypedを使いTypeScriptのライブラリを型定義を自動変換してそのまま使用することもできる。 Scala(JVM)の最大の欠点である起動の遅さを克服することができる。
Reactのようなライブラリとされているが、触ってみた感じどちらかといえばVue3っぽかった。
おなじみ(?)CSSフレームワーク。
GitHub Actionsでデプロイ
変な文章、変なひらがな化のトラップがある
Scala.jsが思ったよりも良かった。小さなプログラムなのであまりScalaの機能は生かせていない(技術の無駄遣いポイント)が、それでも代数的データ型とパターンマッチが第一級なのとコレクションメソッドがやたらと強力なのはとても良いと思う。ほかの欠点(情報量など)はあまり使われていないのが原因だと思うのでみんな使って。
LaminarはほぼVueのように使用できたが、React.Suspenseのようなものがないのがややつらかった。とはいえLaminarのドキュメントをすべて読んだわけではないので別のベストプラクティスがあるのかもしれない。 scalajs-reactを使用するという手もあったが関数コンポーネントのuseEffectOnMountedByメソッドの挙動がドキュメントと違ったため見送った。あとで調査してバグならissueを立てる予定。
とにかくお金をかけないということにこだわった結果、文を生成する部分に時間をかけすぎた。形態素解析の部分はJavaScriptの標準APIで楽できたが、マルコフ連鎖の実装の部分とひらがな化APIの使用による非同期オブジェクトの良い扱い方について考えるのに時間がかかった。 時間をかけすぎてUIを整えるのとほかのあつい要素を含める時間を確保できなかったのが惜しい。
あと技術の無駄遣い枠なので後悔はしていないが、初めて使用する技術ばかりだったので学習コストがそれなりにあった。どうjsにトランスパイルされるかを意識してAPIを使用しないと詰まる。