HuLaは、TauriとVue3、TypeScriptで構築されたクロスプラットフォームのインスタントメッセージングデスクトップ・モバイルアプリです。Windows、macOS、Linux、Android、iOSに対応し、リアルタイムチャット機能をネイティブアプリとして提供します。サーバー側は別リポジトリ「HuLa-Server」で管理されています。
フロントエンドはVue3とTypeScript、Vite 7で構築され、UIにはNaive UI(デスクトップ)とVant(モバイル)を使い分けています。ネイティブ機能はTauri v2が担い、Rust側では tokio-tungsteniteによるWebSocket通信、SeaORM経由のSQLite(SQLCipherで暗号化対応)でローカルデータを保存します。エンティティ定義(im_message、im_contact、im_configなど)から、メッセージ・連絡先・設定情報をローカルDBにキャッシュする設計だとわかります。モバイル対応はAndroid NDKやiOS向けのobjc2系クレート、独自プラグイン`tauri-plugin-hula`で実現しています。ビルドは`interactive-build-inquirer.js`という対話式スクリプトで各プラットフォーム向けに分岐する仕組みです。
- STEP 01
pnpm installを実行すると、preinstallスクリプトがpnpm限定チェックと環境チェックを走らせるので、npmやyarnでは弾かれることに気づきます。
- STEP 02
pnpm tauri:devを実行すると、RustのCargoビルドが走り、Windowsの場合はStrawberry PerlなどOpenSSLビルド用の追加ツールが必要になる場面に出会います。
- STEP 03
初回起動時にSeaORMのマイグレーションが走り、ローカルにSQLite(SQLCipher暗号化)のデータベースファイルが作成される様子が確認できます。
- STEP 04
ログイン後、WebSocket接続が確立し、別リポジトリのHuLa-Serverが起動していないとメッセージ送受信が機能しないことに気づきます。
- STEP 05
pnpm tauri:buildを実行すると対話式スクリプト(interactive-build-inquirer.js)が起動し、対象OSやアーキテクチャを選ぶプロンプトが表示されます。
- STEP 06
モバイル向けにpnpm adevやpnpm idevを試すと、Android StudioやXcode、NDK、CocoaPodsなど追加のネイティブ開発環境が要求されます。
手元に残るのは、Windows・macOS・Linux・Android・iOSで動くチャットクライアントの実行ファイルと、ローカルに暗号化SQLiteで保存されたメッセージ・連絡先データです。ただし相手と実際にやり取りするには、別途HuLa-Serverを自前で立てて接続する必要があります。
サーバー本体は別リポジトリのため、このリポジトリ単体をクローンしただけではチャット機能全体を試せません。
RustとTauriのビルド環境(Cargo、各OS向けSDK、Windowsの場合はPerlなど)を整える必要があり、フロントエンドだけの`pnpm dev`では一部機能(ネイティブAPI呼び出しなど)が動作しません。
モバイル対応はAndroid 12以降やiOS 9.0以降など要件があり、READMEによればWebブラウザ単体での動作は現状非対応と明記されています。
カスタムTauriプラグイン(tauri-plugin-hula)やSQLCipher連携など独自実装が多く、初見でのRust側コード追跡にはある程度の時間が必要です。
Rust+Tauriでネイティブ機能を持つ本格的なクロスプラットフォームIMクライアントを自前でホストしたい開発者やチームに向いています。README・Cargo.toml・エンティティ定義から、WebSocket通信とSQLite暗号化保存という設計が一貫して確認でき、単なる説明だけのリポジトリではないと判断できます。ただしサーバーが別リポジトリである点と、ビルド環境構築の手間は事前に理解しておく必要があります。