見出し画像

TWSNMP FC: Wails v2 + Svelteの環境の細々した問題に悩む

今朝も4時から開発を開始しました。TWSNMP FCの起動ツールの開発の続きです。昨日、大幅に仕組みを変更したので沢山コードを書き直しました。やっと出来たと思ってテストすると細々した問題にぶつかって午前中いっぱいかかりました。
一つ目の問題は、閉じる(X)ボタンで終了処理が実行されないことです。
自分で終了処理を作ってGO言語側でos.Exit(0)をコールして終了していました。どうやらそれが良くなかったようです。ドキュメントでは見つけられませんがruntime.Quit()で終了すればよいようです。

runtime.Quit()で終了できる

GO言語側とJavaScript側のどちらでも終了できました。これを使うようにしてスッキリ終了できるようになりました。
もう一つの問題は、一つ目の問題を調べている時に気づいたものです。

wails devがエラー終了

のようにwails devがエラー終了しています。これを調べるのに2時間ぐらい悩みました。wails devの起動パラメータをいろいろ変えて試しましたが、解決しないので最終的にwailsコマンドのソースコードを調べました。問題は、

wailsコマンドのバグ?

ソースコードを変更したら再ビルドして再起動するためのファイルの変化を監視する処理で開くファイルの数がオーバーしたため停止したようです。赤い矢印の部分でエラー終了していました。このソースコードを良く読むと黄色の矢印の部分で.gitのような隠しフォルダは除外したいようですが、たぶん、書き方が間違っていて除外されていないようです。wailsコマンドを自分でビルドしようと思いましたが、エラーになるので、やめておきました。
単位

$ulimit -n 10240

を実行した後、wails devを実行すれば、エラーは発生しなくなりました。

昨日は、OS依存の設定ファイル・ディレクトリを取得するための外部パッケージを使おうと思っていましたが、調べるとGO言語の標準パッケージで取得できることがわかりました。

です。os.UserConfigDir()という関数がありました。
これを使えばスッキリ、設定ファイルの保存場所が決められます。

func getConfigName() (string, error) {
	c, err := os.UserConfigDir()
	if err != nil {
		return "", err
	}
	return path.Join(c, "twlauncher.conf"), nil
}

のような感じです。
Mac OS環境での起動/停止はできました。Windowsのタスクスケジューラーを使った起動/停止が残っています。

明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。