# Asuka > Go で書いたアプリを、iOS、Android、macOS、Windows、Linux、Web で、各プラットフォーム純正のウィジェット(UIKit、Material 3、AppKit、Win32、GTK 4 と libadwaita、DOM)で動かせます。画面はきめ細かなシグナルで必要な部分だけが更新され、保存するたびにライブでリロードされます。リリースビルドもすべてのプラットフォーム向けに作れます。 Individual Markdown pages are listed below. All documentation is also available at https://asuka.egoist.dev/ja/llms-full.txt. ## Documentation - [Asuka ドキュメント](https://asuka.egoist.dev/ja/docs.md): Asuka を使うと、Go で書いたアプリを iOS、Android、macOS、Windows、Linux、Web で、各プラットフォーム純正のウィジェットを使って動かせます。アプリの画面は、ビューを返す Go の関数として書きます。Asuka はそれをプラットフォームのウィジェットで表示し、シグナルが変わったときは、そのシグナルを読んでいるビューだけを更新します。 - [アクセシビリティ](https://asuka.egoist.dev/ja/docs/accessibility.md): Asuka は各プラットフォーム純正のウィジェットを表示するので、スクリーンリーダーやキーボード、文字サイズの設定に必要なもののほとんどは、コードを書かなくても最初から揃っています。このページでは、何もしなくても得られるものと、それ以外を補うためのプロパティを紹介します。扱うのは、ラベル、ロール、グループ化、カスタムアクション、調整可能なビュー、読み上げ、キーボード、文字サイズ、視差効果を減らす(Reduce Motion)、そしてそれらのテスト方法です。 - [asuka.json](https://asuka.egoist.dev/ja/docs/asuka-json.md): asuka.json はアプリのディレクトリに置くファイルで、プラットフォームとストアが知っておくべきアプリの情報を書きます。アプリの名前と ID、アイコン、アプリで開くリンクとファイル、署名の鍵などです。asuka dev、asuka build、asuka publish がこのファイルを読みます。asuka dev は起動時に読むので、変更したら一度止めて実行し直してください。 - [コンポーネント](https://asuka.egoist.dev/ja/docs/components.md): コンポーネントは、ui.Node を返す Go の関数です。このページでは、パッケージ ui が提供するビューを役割ごとに紹介し、あわせて Markdown と SVG を扱う関連パッケージも取り上げます。どのビューも、プラットフォームに対応するウィジェットがあればそれを使います。iOS では UIKit、Android では Android Views と Material 3、macOS では AppKit、Windows では Windows 11 の見た目(Fluent)で描画した Win32 のコントロール、Linux では GTK 4 と libadwaita、ブラウザーではページの要素です。ビューの大きさと配置についてはレイアウトとスタイルを、画面、タブ、シートについてはナビゲーションを参照してください。 - [基本概念](https://asuka.egoist.dev/ja/docs/concepts.md): Asuka のアプリは、ビューを一度だけ組み立てる Go の関数と、状態を保持するシグナルでできています。このページでは、これらがどう組み合わさるかを説明します。具体的には、ルートコンポーネント、シグナルとそれが更新するもの、ビューの表示の切り替えと繰り返し、オーナーとクリーンアップ、メインスレッド、そして環境です。 - [データ](https://asuka.egoist.dev/ja/docs/data.md): アプリはデータをいくつかの場所に保存します。小さな値は asuka/sdk/store に、レコードは asuka/sdk/sqlite で SQLite に、秘密情報は asuka/sdk/secure でプラットフォームのキーチェーンに、アプリ独自のファイルは Go の os で保存します。このページでは、それぞれの使い方に加えて、net/http によるネットワーク通信、ファイルの監視、そしてどの呼び出しがメインスレッドをブロックしうるかを説明します。 - [デスクトップ](https://asuka.egoist.dev/ja/docs/desktop.md): ウィンドウとメニューバー(ナビゲーション)のほかにも、デスクトップにしかない機能があります。トレイアイコンと Dock メニュー、フライアウト、バックグラウンドで動き続けるアプリ、グローバルショートカット、パネルとランチャー、インストール済みアプリの検索、クリックスルーウィンドウ、ファイルダイアログとファイルマネージャー、アプリで開くファイル、単一インスタンス、終了、最近使ったドキュメント、ドキュメントベースのアプリ、ログイン時の起動、アップデート、「再生中」とメディアキー、ディスプレイ、電源、アプリアイコン上の進捗表示、そしてシステムの外観です。ファイルやフォルダーの変更(アプリが表示しているフォルダーや、ほかのアプリが保存したドキュメントなど)を追いかけるには、ファイルの監視を参照してください。こちらはスマートフォンと Web でも使えます。 - [開発](https://asuka.egoist.dev/ja/docs/development.md): asuka dev はアプリを実行し、ファイルを保存するたびにリロードします。実行先は、iOS シミュレーター、Android のエミュレーターまたは実機、手元の Mac・PC・Linux マシン、ブラウザーのいずれかです。このページでは、それぞれの実行先でリロードがどう行われるか、リロードで何が保たれるか、デバイス、アセット、ログ、リロードできないもの、asuka vet、よくある問題、そして Asuka 自体のテストとベンチマークについて説明します。 - [デバイスとサービス](https://asuka.egoist.dev/ja/docs/device.md): Asuka のパッケージを使うと、ビューの外にあるデバイスの機能も扱えます。カメラ、バーコードや QR コード、画像に写っているものの認識、写真とファイル、プレビュー、印刷と PDF、メールとメッセージの作成画面、位置情報、通知とプッシュ通知、サウンド、再生中の情報(Now Playing)と録音、ネットワークの状態、写真やファイルのライブラリへの保存、バックグラウンドでの処理、ほかのアプリからの共有、JavaScript、サインインと生体認証、画面、地図、ストアのサービス、クラッシュレポートです。このページでは、パッケージごとに何ができるか、その API、必要になる権限、プラットフォームごとの動作を説明します。 - [はじめに](https://asuka.egoist.dev/ja/docs/getting-started.md): Asuka を使うには、Go と、実行したいプラットフォームそれぞれの開発ツールが必要です。準備ができたら、コマンド一つでアプリを作成し、もう一つのコマンドで実行できます。実行中は、ファイルを保存するたびにアプリがリロードされます。 - [多言語対応](https://asuka.egoist.dev/ja/docs/i18n.md): Asuka のアプリは、使う人の言語でメッセージを表示し、その言語の読む向きに合わせてレイアウトされます。メッセージはカタログに置きます。カタログは言語ごとの JSON ファイルで、CLI はそこから、メッセージごとに型付きの関数を持つ Go のパッケージを生成します。 - [レイアウトとスタイル](https://asuka.egoist.dev/ja/docs/layout.md): ui.Style は、ビューをどう配置し、どう見せるかを指定します。レイアウトは CSS の flexbox で、単位はポイントです。見た目は色、角丸、枠線、影、テキストで決まります。このページでは、この両方と、状況に応じて変わるスタイルについて説明します。レイアウトはどのプラットフォームでも同じです。Asuka が Go で計算し、その結果の位置にプラットフォームのビューを配置します。 - [モーションとジェスチャー](https://asuka.egoist.dev/ja/docs/motion.md): Asuka は、プラットフォームにアニメーションの仕組みがあればそれを使います。iOS では UIView のアニメーション、Android ではアニメーター、macOS では AppKit の暗黙的アニメーションと Core Animation、ブラウザーでは Web Animations API です。Windows と GTK にはビューのフレームをアニメーションさせる仕組みがないため、Windows と Linux のホストは同じカーブを使って、フレームごとに自前でアニメーションを進めます。ui.Animate の中で状態を変えると、その変更によって画面上で動くものがアニメーションします。このページでは、変更のアニメーション、表示と非表示のトランジション、共有要素、フレーム単位のアニメーション、タッチ・マウス・トラックパッドによるジェスチャー、触覚フィードバック、「視差効果を減らす」(Reduce Motion)について説明します。 - [Asuka と MyGo](https://asuka.egoist.dev/ja/docs/mygo.md): MyGo を使うと、Go でデスクトップアプリを作れます。スマートフォンへの対応も近日予定です。Asuka も MyGo も Go だけで完結し、どちらも cgo を使わずにデスクトップの API を呼び出します。両者が違うのは、アプリが動く場所と、何より UI を何が表示するかです。MyGo は UI を自前で描画するか、Web ページを表示します。Asuka は各プラットフォーム純正のウィジェットを表示します。 - [ネイティブコード](https://asuka.egoist.dev/ja/docs/native.md): Asuka がラップしていない機能には、ネイティブパッケージを通じてアクセスします。ネイティブパッケージは、モジュール(インターフェース)やビュー(その props)を Go で宣言する Go パッケージで、それを各プラットフォームが自身の言語で実装します。iOS と macOS では Swift、Android では Kotlin、Web では JavaScript、Windows と Linux では Go です。asuka native generate が、すべての側の型付きのグルーコードを生成します。Go からは、モジュールのメソッドを普通の Go のインターフェースと同じように呼び出し、ビューを普通のコンポーネントと同じように表示できます。値はコンパクトなバイナリ形式でやり取りされ、JSON もリフレクションも使いません。 - [ナビゲーション](https://asuka.egoist.dev/ja/docs/navigation.md): アプリの骨組みは、画面のスタック、タブ、シート、アラート、メニュー、そしてデスクトップではウィンドウとメニューバーでできています。どれも各プラットフォーム純正のものです。 - [SwiftUI・Expo との比較](https://asuka.egoist.dev/ja/docs/parity.md): 各行は、アプリでよく必要になる機能です。SwiftUI と Expo がそれをどう実現しているか、Asuka には何があるかを並べています。行に特に記載がない限り、✓ は Asuka が動くすべてのプラットフォーム(iOS、Android、Mac、Windows、Linux、Web)で使えることを表します。あるプラットフォームに機能がない場合(Mac にはセンサーがなく、ブラウザーにはホーム画面ウィジェットがありません)、そのパッケージは「対応していない」と答えます。スマートフォンにできてブラウザーにはできないことについて、ブラウザーで各パッケージが代わりに何をするかは Web を参照してください。 - [プラグイン](https://asuka.egoist.dev/ja/docs/plugins.md): プラグインは、ライブラリを同梱した Go パッケージです。ライブラリは C、Zig、Rust で書かれ、プラットフォームごとにビルド済みで、プラグインの Go のコードから cgo を使わずに呼び出されます。プラグインを使うにはインポートするだけで、CLI がそのライブラリを、どのプラットフォームでもアプリと一緒に配布します。asuka/sdk/sqlite もプラグインの一つです(データ)。 - [配布](https://asuka.egoist.dev/ja/docs/shipping.md): asuka build は、アプリのディレクトリ(または指定したディレクトリ)から、一つのプラットフォーム向けのリリースビルドを作り、そのディレクトリの dist に出力します。asuka publish は、iOS と Android のビルドをそれぞれのストアにアップロードします。行き先は TestFlight と App 審査、または Google Play のトラックです(ストアへの公開を参照)。デスクトップのビルドについては、インストール済みのアプリが更新に使う署名済みのアップデートを、GitHub のリリースか S3 バケットにアップロードします(自動アップデートを参照)。 - [テスト](https://asuka.egoist.dev/ja/docs/testing.md): アプリの UI は Go の関数なので、go test でテストできます。パッケージ uitest は、デバイスもウィンドウもディスプレイもなしにコンポーネントをマウントし、ユーザーと同じように、画面に表示されているものを手がかりに操作します。 - [Web](https://asuka.egoist.dev/ja/docs/web.md): 同じアプリがブラウザーでも動きます。Go のコードは WebAssembly にコンパイルされ、ビューはページの DOM になります。Web は iOS、Android、Mac、Windows、Linux と並ぶ Asuka のプラットフォームの一つで、同じ Go のコードから動きます。コアが作る各ビューは要素になり、コアがレイアウトしたフレームの位置に配置されます。これは、ネイティブの各ホストがウィジェットを配置するのと同じやり方です。そのため、レイアウトは Asuka 自身のもの(Go で実装した flexbox と grid)で、どのプラットフォームでも同じになります。末端のビューのサイズは、ネイティブのホストが自分のウィジェットを測るのと同じく、実際の要素で測ります。コントロールはブラウザー自身の要素(