はじめに
#動作要件
- macOS 14 以降
- Rust 1.90 以降
- Bun 1.4 以降
- Xcode Command Line Tools(
xcode-select --install)
現在サポートしている対象は macOS です。
#プロジェクトを作成
bunx @quickgui/cli init my-app --language rust
cd my-app
quickgui devinit はプロジェクトを作成し、依存関係をインストールします。--language を省略すると、Go、TypeScript、Rust を対話的に選べます。
#最初のウィンドウ
生成された src/main.rs はウィンドウを開きます。状態は View に保持し、変更したあとに cx.invalidate() を呼び出します。
use quickgui::{
App, AppInfo, Application, Color, EventContext, IntoElement, View, ViewContext, WindowOptions,
div, text,
};
fn main() -> Result<(), quickgui::AppError> {
Application::new()
.app_info(AppInfo::new("My App", "0.1.0", "com.example.my-app").expect("valid identity"))
.on_reopen(|has_visible_windows, cx| {
if !has_visible_windows {
open_window(cx);
}
})
.run(open_window)
}
fn open_window(cx: &mut App) {
cx.open_window(WindowOptions::new("My App").size(760.0, 520.0), Counter { count: 0 });
}
struct Counter {
count: usize,
}
impl View for Counter {
fn render(&mut self, cx: &mut ViewContext<'_, Self>) -> impl IntoElement {
let increment = cx.listener("increment", |this, cx: &mut EventContext| {
this.count += 1;
cx.invalidate();
});
div()
.size_full()
.flex_col()
.items_center()
.justify_center()
.gap_3()
.child(text(format!("Count: {}", self.count)))
.child(
div()
.on_click(increment)
.px_4()
.py_2()
.rounded_lg()
.bg(Color::rgb8(37, 99, 235))
.child("Increment"),
)
}
}表示中のウィンドウがないときに Dock アイコンをクリックすると、on_reopen がウィンドウを開き直します。
#実行とビルド
quickgui check
quickgui test
quickgui fmt
quickgui dev
quickgui builddev は編集に合わせて再ビルドします。build はパッケージ済みアプリを dist/ に書き出します。
#次のステップ
- コンポーネントを書く。
- ビューの状態で同期を保つ。
- スタイルとレイアウトを追加する。
