2026年01月12日

「わたしの家計簿」公開しました

 先週試作していた家計簿アプリ、いろいろ不具合をつぶして、GitHubに公開しました。英語の説明がついていますが、アプリ本体は日本語決め打ちです。国際化の予定はありません。需要ないでしょ。

GitHub

GitHub - toshinagata/Kakeibo: Application for private household account book.

Application for private household account book. Contribute to toshinagata/Kakeibo development by creating an account on GitHub.

 動作している様子はこんな感じです。左上のアイコン付きのウィンドウがメインウィンドウで、そこからブラウザを立ち上げて動作しています。

20260112-1.jpg

 Mac 版のアプリケーションサイズは 9.5 MB。GB じゃないですよ。軽量なのはいいことですね。

20260112-2.jpg

 プログラムの動作がブラウザに依存するので、いろいろ使いにくいところがあります。ブラウザのウィンドウを閉じたら本体も終了するようになっているのですが、逆に本体を先に終了してしまうと、ブラウザのウィンドウが残ってしまいます。サーバ側からブラウザに終了シグナルを送る手段があるのかもしれませんが、まだよく理解していません。Server-Sent Events (SSE) とか使えばできるのかな?

 Windows 10 以降、macOS 11 以降なら、たぶん wxWebView を使ってモダンブラウザ相当の動作を実現できるはずです。これがうまく動けば、ブラウザを立ち上げなくてもよくなるかもしれません。レガシー OS ではブラウザを立ち上げ、モダン OS なら自前の WebView で動かす、という実装もできそうです。

 いろいろ課題は残っているものの、Vue.js + TypeScript で GUI とロジック部分を書いて、それを軽量のクロスプラットフォームアプリにまとめる、という道筋が見えてきました。ぼちぼち進めて、使えるものに仕上げていきたいと思います。

Posted at 2026年01月12日 23:20:34

2026年01月04日

Tauri の落とし穴:macOS 10.14 で動かん!

 先日、「Vue.js と Tauri で家計簿アプリ:一応できた」、とゴキゲンだったわけですが、まだ落とし穴が待っていました。うちでは古い macOS 10.14 が現役なのですが、こちらで動かないのです。Dock で一瞬アイコンがバウンドするんだけど、すぐに消えてしまう。コンソールを見ると、こんなエラーメッセージが出ていました。

  Symbol not found: _NSHTTPCookieSameSiteLax
  Referenced from: /Users/USER/Desktop/tauri-app.app/Contents/MacOS/tauri-app
  Expected in: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
 in /Users/USER/Desktop/tauri-app.app/Contents/MacOS/tauri-app

 Foundation framework のドキュメントによると、NSHTTPCookieSameSiteLax は macOS 10.15 を要するそうです。あかんやん。

20260103-4.jpg

 でも、Tauri アプリって 10.13 以上で動くって言ってなかったっけ??

20260103-2.jpg
Tauri v2 ドキュメントより引用

 tauri.conf.jsonminimumSystemVersion: 10.13 を指定してもだめ。実は wry パッケージのバグであるようです。

GitHub

[bug] macOS 10.13 compatibility dyld: Symbol not found: _NSHTTPCookieSameSiteLax · Issue #14201 · tauri-apps/tauri

Describe the bug Using macOS "minimumSystemVersion": "10.13" in tauri.conf.json. App works ok on macOS 10.15+, but on macOS 10.13 got error: dyld: Symbol not found: _NSHTTPCookieSameSiteLax Referen...

 上記 Issue のツリーの中に解決策がありました。以下の記述を Cargo.toml に追加すればいいそうです。

[patch.crates-io]
wry = { git = "https://github.com/tauri-apps/wry", branch = "fix/macos/symbol-not-found-1013" }

 一応立ち上がります。けど、画面が真っ白なまま、先に進めない。だめじゃん。

20260103-1.jpg

 もっと大きな問題がありました。そもそも macOS 10.13-10.15 では、window.print が実装されていないそうです。印刷ができない、ということです。これじゃ使えないな。

20260103-5.jpg
The Tauri Documentation WIP より引用

 対策をいろいろ考えました。そんなに複雑なアプリではないので、全部 wxWidgets で書き直すかな……とも思ったのですが、GUI を全部コーディングし直すのはかなり大変です。Vue.js で書いたフロントエンドを生かして、バックエンドだけ書けばいいんじゃないか。要は、HTTP サーバを実装して、何らかのメッセージ機構で Tauri の機能を置き換えればいけそうです。使っている Tauri の機能はファイルシステム関連だけなので、実装自体は難しくないでしょう。

 アイデアは下の通りです。

  • 空いているポートを使って HTTP サーバを立ち上げる。
  • 同じポートを使ってブラウザで localhost にアクセスする。
  • ファイルシステムへのアクセスが必要になったら、http://127.0.0.1:ポート番号/@vueRunner/ という URL に POST リクエストを送り、コマンド名と引数を JSON 文字列で渡す。
  • HTTP サーバ側で、受け取った POST リクエストの中身を JSON として読み出し、必要な処理を行って、結果を文字列で返す。

 正月休みに頑張って実装しました。HTTP サーバとして、"cpp-httplib" を使います。

GitHub

GitHub - yhirose/cpp-httplib: A C++ header-only HTTP/HTTPS server and client library

A C++ header-only HTTP/HTTPS server and client library - yhirose/cpp-httplib

 データの受け渡しに JSON を使うため、JSON ライブラリが必要です。"nlohmann JSON library for C++" を使います。

GitHub

GitHub - nlohmann/json: JSON for Modern C++

JSON for Modern C++. Contribute to nlohmann/json development by creating an account on GitHub.

 サーバプロセス側はファイルシステムへのアクセス権を持っているので、本来はセキュリティを厳しく制御する必要があります。私はまだ勉強不足で、うまい対策を見つけられていません。今回の実装では、HTTP サーバとブラウザのそれぞれに同一のランダム文字列を渡しておき、POST リクエストの中にその文字列を含ませて、サーバプロセスとブラウザプロセスを1対1で対応づけています。とりあえず家の中で使うだけなので、これでいいとは思いますが、このまま世に出すのは危険かもしれません。

 相当の紆余曲折の末、なんとか動くものができました。

20260103-3.jpg

 Tauri はとても魅力的なフレームワークですが、まだ本格導入には時期尚早かなあ、と感じました。もちろん、10.14 なんて古い OS を使っているのが悪いのですが、ローカルで古い OS を使っているケースは、現実世界ではそう珍しいものではありません(このあたり、最先端のソフトウェアエンジニアとは感覚が乖離しているかもしれない)。また、Rust コンパイラがビルド時に大量のディスクを消費するのも気になります(このプロジェクトで 3.5 GB 消費します)。しばらくは封印かな、と思っています。

Posted at 2026年01月04日 10:02:47

2025年12月22日

「林檎の国のジョナ」(松虫あられ作、双葉社)

 話題のマンガです。1巻は重版の入荷待ちで、2巻が先に届きました。1巻は試し読みで6話とも読んだんですが、書籍で手元に置いておきたい作品です。

20251221-1.jpg

 公式へのリンクはどれを貼ればいいのかな。とりあえず Twitter を貼っとくか。

 帯のキャッチコピーは「満たされない心と向き合う再生の物語」となっています。「満たされない」といっても、欲求不満とかそういうのとは意味が違います。いろいろな形の「生きづらさ」が丁寧に描かれています。ルッキズム・地方の濃密な人間関係・ジェンダーバイアスといった社会的な要素と、緘黙・多動・学習障害といった個人的な要素が交差しています。社会的な要素は主に大人の視点から描かれ、個人的な要素は主に子供(特別支援学級の児童たち)の視点から描かれますが、大人もみんな個人的な要素を抱えているし、子供は社会的な要素に絡め取られています。

 松虫さんの絵で、顔の表情の描き方がとても好きです。神社の境内での菜知ちゃんや、卒業文集を見られたときの正市さん。どちらもつらいシーンなんだけど、心に重く抱えたものを表情が雄弁に語っている。さらっと読み飛ばすのではなくて、1つのコマをじっくり見ていたくなります。

 「再生」は今後どのように描かれるのでしょうか。次の単行本は半年以上先ですか……楽しみにしています。

タグ:読書
Posted at 2025年12月22日 01:13:12
email.png