.slint のドキュメントの構成をまとめました

この記事は [Slint Advent Calendar 2024](https://qiita.com/advent-calendar/2024/slint) ３日目の記事です。

昨日は @hermit4 さんの [Slint-python (Alpha) を使ってみる](https://qiita.com/hermit4/items/1a2173772e558212c3a4) でした。

Slint 1.8.0 で導入されたばかりの Python ですが、Python で GUI アプリを作る選択肢が増えるのはいいことですね。


# .slint のドキュメント

最新版の .slint のドキュメント は https://docs.slint.dev/latest/docs/slint/ でアクセス可能です。

Slint を学ぶ際や開発する際にはこのドキュメントを隅々まで読むことになるでしょう。

今回は、そのドキュメントの構成をまとめました。

※本記事執筆時点のバージョン `1.8.0` のまとめとなります。


# Introduction セクション

Slint を使いはじめる際には、以下のドキュメントを順番に読むとよいでしょう。

- [Getting Started](https://docs.slint.dev/latest/docs/slint/src/introduction/index.html) - Slint を使いはじめる際に最初に読むドキュメントです
- [Supported Platforms](https://docs.slint.dev/latest/docs/slint/src/introduction/supported_platforms.html) - Slint がサポートするプラットフォームの情報がまとまっています
- [Quickstart](https://docs.slint.dev/latest/docs/slint/src/quickstart/) - 神経衰弱ゲームを作りながら Slint を学ぶ
  - [Getting started](https://docs.slint.dev/latest/docs/slint/src/quickstart/getting_started.html) - Slint で Hello World を作る
  - [Memory Tile](https://docs.slint.dev/latest/docs/slint/src/quickstart/memory_tile) - `Rectangle` と `Image` を利用して、シンプルなカードをデザインする
  - [Polishing the Tile](https://docs.slint.dev/latest/docs/slint/src/quickstart/polishing_the_tile.html) - `TouchArea` とアニメーション機能を利用し、カードをめくる操作を表現する
  - [From One To Multiple Tiles](https://docs.slint.dev/latest/docs/slint/src/quickstart/from_one_to_multiple_tiles.html)  - データモデルを導入し、複数のカードを取り扱えるようにする
  - [Creating The Tiles From Code](https://docs.slint.dev/latest/docs/slint/src/quickstart/creating_the_tiles.html) - バックエンド側で初期配置をランダムにする
  - [Game Logic](https://docs.slint.dev/latest/docs/slint/src/quickstart/game_logic.html) - カードの一致の判定などのロジックをバックエンド側で実装する
  - [Running In A Browser Using WebAssembly](https://docs.slint.dev/latest/docs/slint/src/quickstart/running_in_a_browser.html) - Wasm でブラウザ上で動作させる方法（Rust でバックエンドを書いている場合）
  - [Ideas For The Reader](https://docs.slint.dev/latest/docs/slint/src/quickstart/ideas_for_the_reader.html) - 宿題
  - [Conclusion](https://docs.slint.dev/latest/docs/slint/src/quickstart/conclusion.html) - このチュートリアルの後に読むべきもののまとめ

# Language Reference セクション

.slint の言語仕様のドキュメントです

- [Introduction](https://docs.slint.dev/latest/docs/slint/src/language/index.html) - .slint 言語の思想
- Concepts - 全体的なコンセプトに類するもの
  - [The `.slint` File](https://docs.slint.dev/latest/docs/slint/src/language/concepts/file.html) - .slint ファイルの概要と、コンポーネントの作成、エレメントに名前をつける方法、特殊な名前（`root`、`self`、`parent`）の説明
  - [Positioning and Layout of Elements](https://docs.slint.dev/latest/docs/slint/src/language/concepts/layouting.html) - 配置に関するレイアウト、アライメント、ストレッチなどの説明
  - [Container Components](https://docs.slint.dev/latest/docs/slint/src/language/concepts/container.html) - `@children` を用いたコンポーネント中の子エレメントの扱い
  - [Focus Handling](https://docs.slint.dev/latest/docs/slint/src/language/concepts/focus.html) - プロパティやメソッドを利用したフォーカス制御
  - [Font Handling](https://docs.slint.dev/latest/docs/slint/src/language/concepts/fonts.html) - フォントの追加や指定について
  - [Purity](https://docs.slint.dev/latest/docs/slint/src/language/concepts/purity.html) - プロパティや関数の `Purity` について（副作用がないこと）
  - [Translations](https://docs.slint.dev/latest/docs/slint/src/language/concepts/translations.html) - 翻訳関連のまとめ
- Syntax - 文法に関するもの
  - [Comments](https://docs.slint.dev/latest/docs/slint/src/language/syntax/comments.html) - コメントの書き方
  - [Identifiers](https://docs.slint.dev/latest/docs/slint/src/language/syntax/identifiers.html) - 識別子
  - [Types](https://docs.slint.dev/latest/docs/slint/src/language/syntax/types.html) - 型とその詳細や指定方法など
  - [Properties](https://docs.slint.dev/latest/docs/slint/src/language/syntax/properties.html) - プロパティやその指定方法、（単／双方向）バインディング
  - [Expressions](https://docs.slint.dev/latest/docs/slint/src/language/syntax/expressions.html) - 式（四則演算、論理演算、比較演算、３項演算子など）
  - [Functions](https://docs.slint.dev/latest/docs/slint/src/language/syntax/functions.html) - 関数、コールバックとの比較
  - [Callbacks](https://docs.slint.dev/latest/docs/slint/src/language/syntax/callbacks.html) - コンポーネントが外に何かを伝えるためのコールバック
  - [Statements](https://docs.slint.dev/latest/docs/slint/src/language/syntax/statements.html) - 文（コールバックの実装）
  - [Repetition](https://docs.slint.dev/latest/docs/slint/src/language/syntax/repetitions.html) - 配列やモデルのループ
  - [Conditional Element](https://docs.slint.dev/latest/docs/slint/src/language/syntax/conditions.html) - 条件付きエレメント
  - [Animations](https://docs.slint.dev/latest/docs/slint/src/language/syntax/animations.html) - プロパティのアニメーション（補間）
  - [States](https://docs.slint.dev/latest/docs/slint/src/language/syntax/states.html) - 簡易的な状態遷移
  - [Global Singletons](https://docs.slint.dev/latest/docs/slint/src/language/syntax/globals.html) - プロジェクト全体（バックエンドからも）からアクセスできるシングルトン
  - [Modules](https://docs.slint.dev/latest/docs/slint/src/language/syntax/modules.html) - モジュール化（作成、利用）
  - [Legacy Syntax](https://docs.slint.dev/latest/docs/slint/src/language/syntax/legacy_syntax.html) - 1.0 以前にサポートしていた古い文法
- Builtins - 言語に組み込み済みの機能について
  - [Builtin Callbacks](https://docs.slint.dev/latest/docs/slint/src/language/builtins/callbacks.html) - どのエレメントにもある `init()` コールバック
  - [Builtin Elements](https://docs.slint.dev/latest/docs/slint/src/language/builtins/elements.html) - どのエレメントにもあるプロパティと、ビルトインのエレメント（`Window` や `Rectangle` など）のプロパティとコールバック
  - [Builtin Enumerations](https://docs.slint.dev/latest/docs/slint/src/language/builtins/enums.html) - 定義済みの Enum の一覧
  - [Builtin Functions](https://docs.slint.dev/latest/docs/slint/src/language/builtins/functions.html) - 定義済みの関数 `animation-tick` と `debug`
  - [Builtin Global Singletons](https://docs.slint.dev/latest/docs/slint/src/language/builtins/globals.html) - 定義済みのシングルトン
  - [Builtin Namespaces](https://docs.slint.dev/latest/docs/slint/src/language/builtins/namespaces.html) - 定義済みの名前空間
  - [Builtin Structures](https://docs.slint.dev/latest/docs/slint/src/language/builtins/structs.html) - 定義済みの構造体
- [Widgets](https://docs.slint.dev/latest/docs/slint/src/language/widgets/) - 標準ウィジェットモジュールが提供するウィジェットの階層、詳しくは個々のドキュメントを参照
  - [AboutSlint](https://docs.slint.dev/latest/docs/slint/src/language/widgets/aboutslint.html)
  - [Button](https://docs.slint.dev/latest/docs/slint/src/language/widgets/button.html)
  - [CheckBox](https://docs.slint.dev/latest/docs/slint/src/language/widgets/checkbox.html)
  - [ComboBox](https://docs.slint.dev/latest/docs/slint/src/language/widgets/combobox.html)
  - [GridBox](https://docs.slint.dev/latest/docs/slint/src/language/widgets/gridbox.html)
  - [GroupBox](https://docs.slint.dev/latest/docs/slint/src/language/widgets/groupbox.html)
  - [HorizontalBox](https://docs.slint.dev/latest/docs/slint/src/language/widgets/horizontalbox.html)
  - [LineEdit](https://docs.slint.dev/latest/docs/slint/src/language/widgets/lineedit.html)
  - [ListView](https://docs.slint.dev/latest/docs/slint/src/language/widgets/listview.html)
  - [ProgressIndicator](https://docs.slint.dev/latest/docs/slint/src/language/widgets/progressindicator.html)
  - [ScrollView](https://docs.slint.dev/latest/docs/slint/src/language/widgets/scrollview.html)
  - [Slider](https://docs.slint.dev/latest/docs/slint/src/language/widgets/slider.html)
  - [SpinBox](https://docs.slint.dev/latest/docs/slint/src/language/widgets/spinbox.html)
  - [Spinner](https://docs.slint.dev/latest/docs/slint/src/language/widgets/spinner.html)
  - [StandardButton](https://docs.slint.dev/latest/docs/slint/src/language/widgets/standardbutton.html)
  - [StandardListView](https://docs.slint.dev/latest/docs/slint/src/language/widgets/standardlistview.html)
  - [StandardTableView](https://docs.slint.dev/latest/docs/slint/src/language/widgets/standardtableview.html)
  - [Switch](https://docs.slint.dev/latest/docs/slint/src/language/widgets/switch.html)
  - [TabWidget](https://docs.slint.dev/latest/docs/slint/src/language/widgets/tabwidget.html)
  - [TextEdit](https://docs.slint.dev/latest/docs/slint/src/language/widgets/textedit.html)
  - [VerticalBox](https://docs.slint.dev/latest/docs/slint/src/language/widgets/verticalbox.html)
  - [TimePickerPopup](https://docs.slint.dev/latest/docs/slint/src/language/widgets/timepicker.html)
  - [DatePickerPopup](https://docs.slint.dev/latest/docs/slint/src/language/widgets/datepicker.html)

# Recipes & Examples セクション

- [Custom Control Introduction](https://docs.slint.dev/latest/docs/slint/src/recipes/recipes.html) - カスタムコントロールを作成する基本型
- [Animation Examples](https://docs.slint.dev/latest/docs/slint/src/recipes/recipes.html#animation-examples) - アニメーションの実例
- [States Examples](https://docs.slint.dev/latest/docs/slint/src/recipes/recipes.html#states-examples) - 状態遷移の例
- [Layout Examples](https://docs.slint.dev/latest/docs/slint/src/recipes/recipes.html#layout-examples) - レイアウトの例
- [Global Callbacks](https://docs.slint.dev/latest/docs/slint/src/recipes/recipes.html#global-callbacks) - グローバルコールバックの例
- [Custom Widgets](https://docs.slint.dev/latest/docs/slint/src/recipes/recipes.html#custom-widgets) - ウィジェットの自作例

# Advanced Topics セクション

- [Debugging Techniques](https://docs.slint.dev/latest/docs/slint/src/advanced/debugging_techniques.html) - デバッグをする際に役に立つ情報
- [Selecting a Widget Style](https://docs.slint.dev/latest/docs/slint/src/advanced/style.html) - 標準ウィジェットのスタイルについて
- [Backends & Renderers](https://docs.slint.dev/latest/docs/slint/src/advanced/backends_and_renderers) - Slint の描画の下回りの詳細
  - [Qt Backend](https://docs.slint.dev/latest/docs/slint/src/advanced/backend_qt.html) - Qt バックエンドの詳細
  - [Winit Backend](https://docs.slint.dev/latest/docs/slint/src/advanced/backend_winit.html) - winit バックエンドの詳細
  - [LinuxKMS Backend](https://docs.slint.dev/latest/docs/slint/src/advanced/backend_linuxkms.html) - Linux KMS バックエンドの詳細

# 終わりに

以上、Slint 1.8.0 時点でのドキュメントの概要をまとめました。

Slint のドキュメントはまだまだ隅々まで整備されているとは言い難い状況ですが、逆に言うと全部のドキュメントを数時間で読めます。構成もまだまだ改善の余地がありますが、とりあえずはこの記事を起点に具体的なドキュメントに飛んでいただければと思います。

明日は @hermit4 さんによる [Pyside6(QML) vs Slint-Python(Slint)
](https://qiita.com/hermit4/items/a73b18f82623748cd82a) です。お楽しみに！