tkfmを作り直す
#react.js #gui #web
結論
TKoolFacetileMaker2をリファクタリングしてメンテできる形にもっていき、最終的にKotlinに移植する方針で決定
2016年にJavaFXで作成したツール(TKoolFacetileMaker2)のリファクタリングをした
/icons/hr.icon
以降は過去に考えたこと
GitHub - jiro4989/tkfm
TKoolFacetileMaker2を移植するプロジェクト、難航してる
なぜ難航しているか
もとのソースがイケてない
クロスプラットフォームで動作するGUIツールキットの選定が難しい
/icons/fail.icon Goのqtは情報が不足していて難しい
環境構築も難しい
/icons/fail.icon NimのnimxやNiGuiも情報不足、開発途中
ただし環境構築はまだ楽な方
/icons/fail.icon Kotlinだと配布がめんどくさくなりそう
Java系のはもうRunTimeをPCにインストールする方針ではないから
Java系での開発はもうやりたくない
ElectronはJavascriptなので単純に言語が好きでない
かと言ってTypeScriptを今から勉強するのも大変そう
/icons/fail.icon ClojureScriptも面白そうではあるけれど、Webの情報量が少なそうだし、仕事に繋がらなさそう
日本だとぶっちゃけ流行ってないから、いま勉強するメリットがあまりない気がする・・・
GitHubPagesへ移植すると今度はファイル操作が難しくなる
保守しやすい、保守したいと思うかという点も考慮が必要
ツールは作ったあとの保守期間のほうがずっと長い
保守しやすいかどうか
機能拡張しやすいかどうか
JavaScriptのコードは正直保守したくない
僕が単純に嫌いだから
Goは保守したい、しやすい
Clojureも保守したい
ある程度現実的な選択肢だけに絞った
Electron
Webの情報が豊富なので、詰まったときにすぐ解決できそう
ローカルのファイルアクセスができる
Javascript自体は嫌いだけれど、最近の構文はだいたい把握してるのでコーディングにも苦労しない
クロスコンパイルして各プラットフォーム向けにバイナリを生成できる(らしい)
しかし、ファイルサイズが巨大なので、インストールの敷居が高そうに思える
React.js /icons/badge-react.icon
ローカルのファイル操作はもはや諦める、というアプローチ
ドラッグ・アンド・ドロップのみで画像ファイルを追加すると割り切れば意外とありかも
ユーザはインストール不要なので、手軽に使ってもらえる
ある程度はすでに作りかけのものがあるので何かしら役に立つかも
懸念
ただファイル操作周りはめんどくさいが・・・
画像のスケーリングアルゴリズムに何を採用しているか?
ニアレストネイバー法とかだと画像が荒く拡縮されてしまう可能性がある
qt
QMLという記法でレイアウトが定義できる
普通にウィジェットをコードで組み立てることもできる
goplsがうまく処理できてないのか、上書き保存しようとしたら固まる
フォーマッタもエラーを吐く
まともに開発できそうにないので諦める
方針
Electron+TypeScriptの構成にする
素のJavascriptは正直書きたくない
軽いスクリプトなら構わない
これから開発、保守続けるアプリには使いたくない
TypeScriptなら
型がある
それなりにWebに情報がある
VSCodeのサポートが強い
仕事でも使う
cssはMaterialize
TypeScriptとElectron - Qiita
Electron & React & Redux & TypeScript アプリ作成ワークショップ 1日目 - Qiita
$ sudo sysctl kernel.unprivileged_userns_clone=1
https://github.com/electron/electron/issues/17972
ファイルメニューからファイルを追加するとファイルリストにファイルを追加
FileList.tsxが更新される
ファイルメニューを押したときの挙動はindex.jsに書かれてる
メインプロセスとレンダラープロセス間の通信
ファイルリストを選択するとImageCropに画像が描画
FileListのボタンを押すとTileImagePreviewが更新
ファイルメニューから保存を押すと画像が保存される
メインプロセスとレンダラープロセス間通信
仕事につながらなくてもいいからClojureで作りたい欲がでてきた
Clojure+Reagent+Electronでデスクトップアプリを作る
ずいぶんたって、現実的な選択肢
trustable-code/NiGui: Cross-platform desktop GUI toolkit written in Nim
Win32APIとGTKのAPIを使ってるのでネイティブの機能をつかう
軽量
クロスプラットホームサポートらしい
移植にあたって必須の機能
ファイル選択ダイアログ
ファイル保存ダイアログ
マウスイベント
マウスホイール
キーイベント
画像描画
リストアイテム
gtkだとListBoxと呼ぶ
まだない