tauri で離席時間の管理と Slack のステータス更新をするデスクトップアプリを作った
モチベーション
リモートワーク中の急な家事育児対応が発生したときに、いちいち同僚上司に伝えるリードタイムがもったいない
Slack のステータスを見てもらえば、緊急の育児対応してもらってるんだなとわかってもらえる
Slack のステータス(online/offline と、status で家事育児対応中であることを表示)を反映しつつ、どのくらい自分が離席したのかも記録しておきたい
ショートカットキー一発で離席と Slack のステータスを更新できれば楽だなと思った
業務で使うツールのため、どこかにホスティングして通信を伴うものは使いづらい。そのためデスクトップアプリや CLI 等が候補に上がったが、ここではデスクトップアプリを選択した
tauri での開発について
Backend が Rust、Frontend は著名なフロントエンドのライブラリやフレームワークを使用可能
今回作ったツールではほとんど Rust は書かず、React + Vite で書いた
フロントのコードそのままに standalone なデスクトップアプリをかけるというのは開発体験として非常によかった
UIも tailwind + daisyui そのまま利用できたのでデスクトップ特有のレイアウトコードを書いたりはしていない
Tips やハマりどころ
今回作ったツールでは、sqlite でデータ永続化をしている
Mac だと ~/Library/Application\ Support 配下にデータが保存されるのでデバッグ時はここに保存されている sqlite の db を見ながら作業していた
vscode が推奨されているが、いまいち Debugger の設定がうまく行かなかったので print debug に頼らないといけなかった
フロントのログは以下のような rust のコードで devtool を立ち上げられるのでそこは良かった
code::main.rs
tauri::Builder::default()
.setup(|app| {
{
let window = app.get_window("main").unwrap();
window.open_devtools();
window.close_devtools();
}
Ok(())
})
.plugin(
tauri_plugin_sql::Builder::default()
// macos location: ~/Library/Application\ Support/<tauri.bundle.identifier>/<dbname>.db
.add_migrations("sqlite:afk-track.db", migrations)
.build(),
)
.invoke_handler(tauri::generate_handler!greet) .run(tauri::generate_context!())
.expect("error while running tauri application");
Window 呼び出しは App 側ではなく hammerspoon で行っている。これで、1秒で離席することが可能になりそう