v0.1.0
フレームワーク:
明日香
全機種純正部品、Go で。
UIKit、Material、AppKit、Win32、GTK、そして DOM。キャンバス描画でも、Web View でもない。
Go だけでアプリを一つ書けば、スマートフォンでも、デスクトップでも、Web でも動きます。表示するのは各プラットフォーム純正のコントロールで、文字入力もアクセシビリティもそのまま。Asuka が更新するのは、変わった部分だけです。
動作環境: iOS (UIKit), Android (Android Views · Material 3), macOS (AppKit), Windows (Win32(Windows 11 の外観)), Linux (GTK 4 · libadwaita), Web (DOM).
仕様
- Go、ただ Go だけ
- 言語は一つ。
- iOS · Android · macOS · Windows · Linux · Web
- 舞台は六つ。
- すべて各プラットフォーム純正のウィジェット
- Web View はゼロ。
変換
書くのは Go。
動くのはネイティブ。
ui.TextField(ui.TextFieldProps{Value: name}),UITextFieldui.Toggle(ui.ToggleProps{Value: alerts}),UISwitchui.Slider(ui.SliderProps{Value: volume}),UISliderui.Button(ui.ButtonProps{Title: ui.Val("保存")}),UIButton
ここに描いたウィジェットは各プラットフォームの配色によるスケッチです。実機では、プラットフォーム純正のウィジェットそのものが表示されます。
出撃
パイロットは一人。
機体は六機。
- 初号機 稼働中
iOS
UIKit
シンクロ率 100% - 弐号機 稼働中
Android
Android Views · Material 3
シンクロ率 100% - 参号機 稼働中
macOS
AppKit
シンクロ率 100% - 四号機 稼働中
Windows
Win32(Windows 11 の外観)
シンクロ率 100% - 伍号機 稼働中
Linux
GTK 4 · libadwaita
シンクロ率 100% - 六号機 稼働中
Web
DOM
シンクロ率 100%
第 00 話 / Hello
こんにちは、ネイティブ。
func Counter() ui.Node {
count := signal.New(0)
label := signal.Func(func() string {
return fmt.Sprintf("Count: %d", count.Get())
})
return ui.SafeArea(ui.Style{Align: ui.AlignCenter, Justify: ui.JustifyCenter},
ui.Text(label),
ui.Button(ui.ButtonProps{
Title: ui.Val("Add"),
Variant: ui.ButtonFilled,
OnPress: func() { count.Set(count.Peek() + 1) },
}),
)
}
func main() { app.Run(Counter) }- Counter() · 実行
- 1 回
- label · 実行
- 1 回
- 直前のフラッシュ
- 14 op
稼働中
ホストへの op
- フラッシュ 01 · 14 op · 2 バッチ
- Create 1 View
- Command 1 Locale 00656e
- Create 2 Text
- SetProp 2 Text="Count: 0"
- Create 3 Button
- SetProp 3 Variant=1
- SetProp 3 Title="Add"
- Listen 3 Press
- Insert 1 2 @0
- Insert 1 3 @1
- SetRoot 1
- SetFrame 2 163,396.66666 64x20
- SetFrame 3 171,416.66666 48x44
- SetFrame 1 0,0 390x844
このコードについて host/fake が記録した op です。画面は iPhone の 390 × 844。
実行全プラットフォーム
$ asuka new hello && cd hello$ asuka dev # このコンピューター:Mac、PC、Linux$ asuka dev --platform ios # iOS シミュレーター$ asuka dev --platform android # Android エミュレーターか実機$ asuka dev --platform web # ブラウザー
Go のファイルを保存すると、アプリはすぐにリロードされ、状態もそのまま残ります。ほかの使い方はサンプルをどうぞ。gallery ではすべてのコンポーネントを見られます。
全六話
できること
- 第壱話Episode 01
純正のウィジェット
ナビゲーション、リスト、入力欄、ピッカー、シート、メニュー。見た目も手触りも各プラットフォームのものと同じです。各プラットフォームのウィジェットそのものなのですから。
- 第弐話Episode 02
きめ細かなシグナル
コンポーネントは一度しか実行されません。シグナルが変わると、それを読むビューだけがフレームごとに一つのバッチで更新されます。ツリーの差分は取りません。
- 第参話Episode 03
保存すれば、すぐ動く
asuka dev はアプリをコンピューター、シミュレーター、エミュレーター、実機、ブラウザーで動かし、保存するたびに状態を保ったままリロードします。
- 第肆話Episode 04
モーション
アニメーション、スプリング、変形、表示と退場のトランジション、あるビューから別のビューへと姿を変える共有要素、そしてジェスチャー。
- 第伍話Episode 05
全部入り
ライブクエリ付きの SQLite、セキュアストレージ、カメラとコードスキャン、写真、位置情報、通知、オーディオ、ビデオ、Web ビュー。
- 第陸話Episode 06
すぐにリリース
asuka build は、App Store 向けの署名済み .ipa、Google Play 向けの .aab、公証済みの Mac アプリ、署名済みの Windows .exe、Linux のアーカイブと Flatpak マニフェスト、そして静的サイトを作ります。