3/3日記 ===== プログラミング(思考順) ===== * Rustのコンパイル環境を準備していた。 * だが、いくつか問題が発生していた。 * WSL環境でGUIを動かすと欠落やエラーが発生する。そのため、WSLを開発環境として使えても、動作環境としては使えない可能性が高い。 * そこで、Windowsをメインターゲットにしてコンパイルすべく環境を整えた。 * https://www.rust-lang.org/ja/tools/install * ただLinuxに慣れた身でコマンドライン使い続けるのは正直つらいと思った。 * よって、MSYSをインストールしてあるのでその環境でもRustを導入した。 * https://packages.msys2.org/package/mingw-w64-x86_64-rust * こうしてWSL・Windows・MSYSでのコンパイルが可能になった。重複しすぎとか言わない。わかってるしw * ついでにGoも同じようにしておいた。 * https://go.dev/dl/ * https://packages.msys2.org/package/mingw-w64-x86_64-go * これでGoアプリとRustアプリは比較的楽に開発できそう。 * あとはヘッダについて、ユニバーサル用のランタイムライブラリを使いたかったけど、一部コンパイラがまだ対応してないので諦め。 * なんで対応したいのかについては以下。 * https://qiita.com/yumetodo/items/d849a6dcf08e0435f815 * そしてテキストエディタをWindowsのターミナルに組み込もうとしたらMSVCだとコンパイルが面倒。もうやだVSCodeつかう!マキャチカおうち帰る! * メインの開発はWSLかMSYS2上で行って、最終的なコンパイルだけWindows上で行うことを検討かな。(MSYS経由でGCC使う段階でWindows上で使う分には問題ないはず) * 上で問題だったmicroはMSYS上でビルドした。Goアプリなので、MinGWを使ったGoのコンパイラを利用してるみたい。 * ついでにこのアプリをWindowsのターミナルからも使えるようにしておいた。これでWin側でテキスト処理したい場合もすぐ取りかかれる。 ---- * 今度はRustでGUIアプリを作る準備。 * 色々お試しして、まずicedというライブラリを使ってた。 * https://github.com/iced-rs/iced * これはすぐ作れたので楽だった。まず簡単にGUI作るのであればこれでもいいかもしれない。 * 即時描画のUIライブラリに類するので、簡単に動かせて楽。 ---- * 次にTauriというライブラリを使ってみた。Electronみたいな位置づけのアプリになるっぽい。 * https://tauri.app/ * 基本的にはマニュアル見ながら進める。 * MSYS2環境でTauriを準備してたがうまく準備できなかったので、「cargo install tauri-cli --locked」で一応事なきを得た。 * https://github.com/rust-lang/cargo/issues/9289 * 「Cargo.lock が最新である必要があります」だそう。つまりインストールできるバージョンはCargo.lockを参照するってことかな。 * 理想的な順番は以下の通り。 - cargo install tauri-cli --locked - cargo install create-tauri-app --locked - cargo create-tauri-app(プロジェクト作成) * 1.と2.は順不同でもいいけど、3.でどっちも使うことになる。 * どうもCargoを改造(機能追加)してビルドできるようにするみたいなので、ビルドも時間がかかった。 ---- * 試しに自動で構築されるサンプルプログラムをビルドしてみる。 * 開発版は「cargo tauri dev」で問題なく動く。 * 「cargo tauri build」を入力してリリース版を出力しようとすると、release版でエラーが出る。 * ここ見て情報を知った。 * https://qiita.com/k-yaina60/items/d120a39578a3b29b953d * 「src-tauri/tauri.conf.json」というファイルが該当するみたい。 * とりあえず「com.tauri.dev」から「com.tauri.build」に変更。いいのかなこれ。どういう値がいいのかわからん。 * で、ビルドしたところインストーラが一式出来上がってるじゃん!なんて至れり尽くせり! * ただアンインストールはそれほど完全ではなく実行ファイルが残る模様。手動で消す必要がある模様。 * そもそもインストーラが必要という時点で色々な準備が必要なことが予想されて、軽いアプリにしたい自分としてはちょっともにょるところはある。 * 別の選択肢では、ゲームエンジンのbevyとかか。 ---- * あと、Goに戻って、fyneを試す * https://github.com/fyne-io/fyne ---- * 個人的に思ったのは、Rustは言語というよりCargoがとっても使いやすいのだ!ずんだもんなのだ!ってこと。(ずんだもんではない ---- * 音楽環境をいじってる時、フェーダの調整とかをどうしようかと悩んで、Max8を使ってMonomeのアプリを動かしてた。 * ただ古いアプリは保守環境は誰も弄ってない(むしろ個人で弄ってるんじゃね?)みたいなのがあって、保守されてない。 * ということで俺が困るので、アプリを保守する方法がないか確認していた。 * なんか実行ファイルも簡単に出力できるらしく、下記資料を参考にやってみたところ、ほぼ問題なく出力できた。 * https://docs.cycling74.com/max8/vignettes/standalone_platform_win * https://ameblo.jp/holycater/entry-12731469761.html * つまり、実行ファイルはパッチを呼び出すためのトリガーでしかなく、その他のファイルも機能を呼び出すために必要という感じ。 * なので、最低限必要なファイルをMax8のフォルダから引っこ抜いて実行ファイルと一緒にぶち込めば、とりあえず動く。 * ・・・と言いたいところだけど、そのファイルの選定まではやってくれないらしい。 * まず容量が多いので配布を考慮すると困る。また、そもそもどれを持ってきたらいいのか書いておらず、更に各ファイルが容量多い。 * これうまく整理、もしくはビルドのときに選定できたらいいんだけどなあ・・・ * とりあえずアーカイブ対象に含めるか、1個ずつ削除して問題なく動くか確認しないとダメそう。 * 最悪自作用に利用を絞って一個実行ファイル用のフォルダ作成、そこにresourcesの中身全部格納して呼び出せるようにしたほうがいいのではと思った。 ---- * 他の選択肢としてintech Studioのモジュールを使う。 * 自分が持ってるのはこれ。 * https://intech.studio/shop/pbf4 * と思ったけど、制御方法がよくわからんのでしばらく弄ってみた。 * ボタンの仕様は「押したときに127、離したときに0」を返すため、これを検出する要素としてローカル変数をGUIで定義する。 * で、処理を行う場合、CodeBlocksで記述すれば複雑な式も作れそう。文法はLuaが利用可能。 * 今回は下記の関数を使ってページ切り替えボタンを作った。 * https://docs.intech.studio/reference-manual/grid-functions/page * ただこの時注意なのが、離したときにページ切り替えを発生させて、同時にエディタ上の切り替えが発生する場合、メモリ違反なのかデバイスが認識しなくなる。抜き差しを再度行う必要がある。 * 上記の点に気をつけると、ボタンを押した条件を変数に格納して、それが確認できたらページ切り替え、みたいにすれば実装可能。 * if vel == 127 then\\ page_load(1)\\ end * みたいに書けば作れる。 * 自分みたいに腕がうまく動かないやつにとって道具のメンテは必須なのでやっとかんとな。 ===== その他 ===== * ひな祭りだということを忘れてる。