Cubiq
engineering.md実装

実装

Cubiqの内部

キューブの回転は、独自のシステムが支えています。数学モデル、3Dエンジン、レッスンの目標を考慮するソルバーで構成されています。AndroidアプリはKotlinとJetpack Composeで実装されています。

プロジェクトのスナップショット

ソースとテキストリソースの行
740 244
アプリのモジュール
39
テストを除くKotlinの物理行
136 019
言語バリエーション
42
テストの宣言test* / androidTest* · @Test
1 624

stack.kt

モダンなAndroid技術スタック

プロジェクトのスナップショット
Kotlin2.4.21
Compose BOM2026.09.00
Material 31.5.0-beta01
Adaptive1.3.0
Navigation 31.2.0
AGP9.4.1
KSP2.3.12
Gradle9.7.0
  • Kotlin
  • Jetpack Compose
  • Material 3
  • Adaptive
  • Navigation 3

Jetpack ComposeとMaterial 3がインターフェースのコンポーネントとテーマを定義します。Adaptiveはウィンドウサイズに応じたレイアウトを担います。Navigation 3はナビゲーションと画面の復元を扱います。状態はCoroutinesとFlowを通じて届き、Hiltがアプリのモジュールを接続します。

architecture.kt

独立したアプリのレイヤー

app01Hilt / DI
feature07Compose / ViewModel
  • onboarding
  • learning
  • lesson
  • practice
  • progress
  • settings
  • events
domain07contracts / use cases
  • learning
  • lesson
  • practice
  • portability
  • progress
  • settings
  • events
data09repositories / storage
  • content
  • storage
  • learning
  • lesson
  • practice
  • portability
  • progress
  • settings
  • events
core14UI kit / cube / solver
  • common
  • model
  • designsystem
  • uikit
  • navigation
  • analytics
  • crashlytics
  • ads
  • billing
  • push
  • hardware
  • cube
  • scrambleimage
  • solver
baselineprofile01startup / frame timing

feature → domain ← data

modulesΣ 39
  • app1
  • baselineprofile1
  • core14
  • data9
  • domain7
  • feature7
Kotlin · physical LOCΣ 136 019
feature
82 86360.9%
core
21 16715.6%
data
14 34110.5%
app
9 5147.0%
domain
6 7595.0%
buildSrc
9610.7%
baselineprofile
4140.3%

インターフェース、ドメインの契約、データを別々のモジュールに分け、Hiltで実装を接続します。Composeは不変の状態と明示的なイベントを受け取ります。Roomは履歴と学習の進捗、DataStoreは設定を保存します。Navigation 3は各セクションのスタックを復元します。

  • Coroutines / Flow
  • Hilt
  • Room
  • DataStore

android-ux.md

Androidの推奨事項に沿ったUX

Cubiqは、GoogleがApps Experience Programで取り上げるアプローチを実装しています。Compose、適応型レイアウト、edge-to-edgeです。

ウィンドウサイズに応じた配置
幅の広い画面では、理論と練習を横に並べます。コンパクトな画面では、コンテンツとナビゲーションを使える空間に合わせます。レイアウトはウィンドウサイズで決まります。
ネイティブのナビゲーション
Edge-to-edgeはシステムバーとキーボードを考慮します。Navigation 3は各セクションのスタックを保持し、戻る遷移をプレビューするPredictive Backに対応します。
読みやすさとアクセシビリティ
ライト・ダークテーマ、テキストの拡大縮小、ナビゲーションのセマンティックラベルが、TalkBackやキーボードでの操作を支えます。文字を大きくしても、セクション名はスクリーンリーダーで読み取れます。
Googleの推奨事項 · Apps Experience Program
OpenGL ES 3.0

engine.glsl

数学モデルに沿うジオメトリ

moving cubies
26
facelets
54
meshes
8
triangles
2 964

GLSLシェーダーがPBRマテリアル、粗さ、環境光を計算します。モデルとアニメーションは連動しています。前のステップに戻ると逆の手を適用し、カメラはパネル間の空きスペースを考慮します。

  • OpenGL ES 3.0
  • GLSL
  • PBR
  • Instancing

キューブの状態 / 手順の再生

型付き記法を回転操作と整合するキューブの状態に変換します。レンダラーのキューが層の回転をアニメーション化し、ピースとフェイスレットの同一性を保ちます。手順は実際の回転操作の列として再生され、再生、一時停止、速度調整を使えます。

  1. Notation
  2. Cube state
  3. Move queue
  4. OpenGL ES 3.0

次へ進むと新しい回転操作をアニメーション化し、戻ると逆の操作を適用します。シークは基本シーンと対象の操作列を復元します。キャンセルは次の操作の発行を止め、すでに始まった回転は完了します。EGLのライフサイクルはpause/releaseを扱います。GLが使えない場合も、3Dなしで学習を続けられます。

solver.kt

レッスンの目標に合わせた解法

  • BFS
  • Beam search
  • F2L

独自のソルバーが、現在のレッスンの手順と補助操作から解法を作ります。SolverRequestはキューブの状態、対象ピース、固定対象、許可された手順、ケース、向きを含みます。プランナーは学習目標の順序を守り、揃ったピースを保護します。

フェーズ別の計画では、上限付きBFS、ビームサーチ、F2Lのケース認識を使います。検証はピースの構成、反転、ねじれ、置換のパリティを確認します。探索方針は深さとビーム幅を制限します。レッスンの変更は探索をキャンセルし、古い結果を適用させません。

結果はPracticePlanです。ステップ、手順への参照、表示タイムライン、実行タイムラインを含みます。説明は学習用の向きを保ち、エンジンには完全な実行列を渡します。結果の種類はplan / solved / invalid input / no constrained pathです。

  1. キューブの状態
  2. モデルの検証
  3. 学習プラン
  4. 3D練習

content.md

ビルドを通るコンテンツ

理論は756件のMarkdownドキュメントに保存され、練習は336件のローカライズされたシナリオで定義されています。Gradleが翻訳の構造と316点のオリジナルイラストへの参照を検証します。グラフィックはBlender/Cyclesで作成しています。Androidエンジンでは別の手続き的ジオメトリを使います。

workflow.md

コードとしてのドキュメント / エージェントの作業

AGENTS.md
48
README.md
16

リポジトリはエージェントによる開発に合わせて構成されています。AGENTS.mdの階層が担当範囲、アーキテクチャの制約、検証ゲートを定義します。README.mdはモジュールの契約、KDocはAPIと不変条件を記述します。

アーキテクチャ、デザイン、ローカライズの契約をコードとともにバージョン管理します。PLAN.mdは範囲と引き継ぎを記録します。契約の変更に合わせて、その管理元のドキュメントも更新します。検証と生成はGradleで実行し、CIは両ストア向けのバージョンをビルドします。

physical text linesΣ 740 244
Resources / localization
399 56854.0%
Kotlin · non-test
136 01918.4%
Lesson Markdown
132 64217.9%
Kotlin · JVM tests
46 6456.3%
Kotlin · Android tests
13 6361.8%
Build tooling / web
8 9851.2%
Documentation
2 7490.4%
品質と集計方法

テストは、成立しないキューブの状態、揃った層の保持、学習プラン、古いリクエストのキャンセル、セッションの復元、データのインポートを対象とします。CIは両ストア向けのバージョンをビルドします。リリース時はR8、APK/AAB、チェックサム、16 KBページ向けのネイティブライブラリのアラインメントを検証します。

Kotlinの規模は物理行数で集計し、コメント、空行、buildSrc、ベンチマークコードを含め、テストディレクトリを除きます。テスト数はJVMの宣言1 343件とAndroidの宣言281件を指し、実行回数ではありません。ドキュメントにはフォールバック用のテキストを含みます。シナリオがあっても、すべてのレッスンに練習があるとは限りません。

baselineprofile · @Test
3

総テキスト量は、追跡対象のUTF-8ファイルの物理行を数えます。ソース、テスト、XML/JSONリソース、Markdownコンテンツ、ローカライズ、ドキュメント、ビルドツール、Webソースが対象です。コメント、空行、各言語のコピーを含みます。メディア、生成物とビルド出力、外部提供コード、サービス設定、一時的なPLAN.mdを除きます。プロジェクトのテキスト入力の規模であり、実行可能なLOCではありません。

Cubiqを見る