【Kotlin】Compose Multiplatform 1

1デフォルトの名無しさん
垢版 |
2024/06/20(木) 23:47:17.52ID:vbElSNSS
iOS、Android、デスクトップ、Webに対応したUIフレームワークで手軽にアプリを作りましょう!

・各種プラットフォーム間でコードを共有可能
・宣言型UIによる最大100%のコードベース
・Kotlin Multiplatform (KMP) & Jetpack Composeベース
2025/02/14(金) 11:17:50.64ID:iwocV+lv
ロードマップからなんか遅れてるよな
2025/02/14(金) 13:36:34.18ID:ZSXOxhZn
予測型戻るジェスチャ機能の追加されたバージョンが出たのか
2025/02/21(金) 14:59:59.28ID:jOnV3c4B
iOS向けで、
CMPにおいて戻るジェスチャーが標準でiOSネイティブライクな感じになるようだ
着々とiOSへの対応が公式側で進んでる

Implement iOS default NavHost transition animation close to native. #1861
https://github.com/JetBrains/compose-multiplatform-core/pull/1861
2025/02/22(土) 09:43:36.74ID:obzCo2Dh
CMPでホットリロードを可能にするツールを開発中とのこと
すばらしい

https://github.com/JetBrains/compose-hot-reload
https://github.com/JetBrains/compose-hot-reload/releases/tag/v1.0.0-dev-62
2025/02/22(土) 10:26:57.78ID:snifUi+R
超期待
2025/02/22(土) 14:22:25.72ID:s8vQEMuz
flutterはmacrosでズッコケたからな
2025/04/26(土) 11:36:35.34ID:4Jf0lHWD
地味アップグレードきたな
51デフォルトの名無しさん
垢版 |
2025/07/01(火) 10:15:12.87ID:1KZwEDte
JetbrainsのCompose MultiplatformとAndroidX Jetpack Composeの統合がついに開始されたね
例えばJetpack Composeのruntimeは統合が完了してクロスプラットフォーム対応になった
2025/07/01(火) 19:20:22.36ID:j9smP3T2
具体的に何するの?
2025/07/01(火) 19:21:56.74ID:j9smP3T2
ごめん。例えばって書いてあったね。
54デフォルトの名無しさん
垢版 |
2025/08/08(金) 06:52:11.68ID:Fdw9apw5
ComposeにRetainScopesっていうViewModelのライフサイクルを継承したremember関数が実装されるもよう

https://android-review.googlesource.com/c/platform/frameworks/support/+/3452915
`retain { }` API を追加
このCLは、Composeランタイムに`retain { ... }を追加します。
再コンポジションをまたいで値を保持するという点でRememberに似ていますが、保持された値はコンポジション階層の破棄と再作成後も保持できます。これにより、ViewModelやFragmentと同様のスコープが実現されます。
2025/08/08(金) 11:21:09.01ID:7cylvkQs
これはQtの対抗馬になりうるの? まだ発展段階だよね
これじゃなくてKotlin/nativeでGUI使うのに成功した人いる?
2025/08/08(金) 19:12:05.27ID:1+ZsQpkg
QtはUIライブラリがショボいからな
57デフォルトの名無しさん
垢版 |
2025/08/13(水) 09:41:09.21ID:pILUZJEv
Kotlin/NativeでComposeのGUIを作製できる対象プラットフォームはいまのところiOSのみで先日安定版に到達した
ComposeのGUIの各プラットフォームでのKotlin/Nativeへの対応はiOSを除けばJVMベースで対応可能ということで後回しになっている

一応、ComposeのGUIを描画するSkiaのKotlinラッパーライブラリのskikoの各プラットフォームでのKotlin/Nativeへの対応はAndroidを除いて完了しているからComposeのGUIは脱JVMへの舵をきれる状態ではある

そのうえで、クロスプラットフォーム対応のGUIフレームワークはどれも一長一短なので、Qt、Compose、Flutter、ウェブ系など好みのものを使えば良い

ただしKotlinで開発するうえで直面していたIDEの選択肢が少ない問題はKotlin LSPのVSCode対応により解決する見込みである
2025/08/13(水) 14:04:11.88ID:OAhd0lCG
KMPはNativeで今のところ共有できないやろ?

Flutterなら例えば複数のOSで同じ共有ライブラリ使えるならFFI経由で共通に出きるけど
59デフォルトの名無しさん
垢版 |
2025/08/13(水) 14:34:25.64ID:pILUZJEv
>>58
JNIを経由すればよい
公式のSQLiteのKMP実装が参考になる
https://github.com/androidx/androidx/tree/androidx-main/sqlite/sqlite-bundled
2025/08/13(水) 15:38:02.61ID:OAhd0lCG
JNIってJVM環境でないiOSでつかえるのかね..

Flutterならandroidだとうがiosだろうが直接ネいティブの共有ライブラリ呼べるし楽
2025/08/13(水) 15:44:50.61ID:OAhd0lCG
もちろんそんなケース稀かもしれんが
dartならFFIで直接共有ライブラリ関数にバインドできて
c言語介さず呼べるし(osごとのライブラリ名ぐらいは調整して)

dartで最大の不満だった共有メモリマルチスレッドできないのも実験が進んでるっぽいし
2025/08/13(水) 15:51:08.49ID:OAhd0lCG
UIフレームワーク自体はComposeのほうがいいけど
デフォルトでstateクラスがあって、極力
状態の管理を外だしと徹底してる(例えばメニューの表示/非表示も自分で制御)
2025/08/13(水) 15:58:07.01ID:OAhd0lCG
>Kotlin/Nativeへの対応はAndroidを除いて完了しているからComposeのGUIは脱JVMへの舵をきれる状態ではある
ここは期待したいけど
そもそもandroidアプリはデフォルトがJVM環境だから脱しなくてもいいけど
デスクトップ向けでJVM要求されるのがうっとおしい
64デフォルトの名無しさん
垢版 |
2025/08/13(水) 18:30:40.15ID:pILUZJEv
KMPに関することでありComposeとかけ離れた話になってるからKotlinスレで議論したほうがよいのでしょうけど一応

>>60,61
・59ではJNIによるラップをCで書いているがこれ自体をCではなくKotlin/Nativeで書くことも可能
・Kotlin/Nativeはcinteropを書いて
https://github.com/androidx/androidx/tree/androidx-main/sqlite/sqlite-framework/src/nativeInterop/cinterop
ヘッダーファイルのC関数をKotlinで直接呼べる
https://github.com/androidx/androidx/blob/androidx-main/sqlite/sqlite-framework/src/nativeMain/kotlin/androidx/sqlite/driver/NativeSQLiteStatement.kt
>>63
・KMPでJVM向けアプリケーションを実行形式にビルドするとJavaランタイムを同梱してくれるのでアプリケーションの利用者にJVM環境を求めない

これでよかったでしょうか
ComposeやKMPのことで他に疑問があれば答えられます
65デフォルトの名無しさん
垢版 |
2025/08/13(水) 19:12:56.84ID:pILUZJEv
>>64に追記で、
JNIによるラップをKotlin/Nativeで書くことができるので、
Cコードの呼び出し等をnativeMainで書いて、それをjniMain(各自命名)で継承し、
そこでnativeMainのKotlin/NativeコードをJNIラップしてやればよい
こういったテクニックを駆使すればC呼び出しを含むコードでも十分に共通化できる
2025/08/14(木) 17:44:14.36ID:g00bnU7h
1.9キター
ってロードマップ更新しろよ
67デフォルトの名無しさん
垢版 |
2025/08/14(木) 22:45:55.02ID:mhSblWPk
1.9で追加されたrememberSerializableが便利だ
68デフォルトの名無しさん
垢版 |
2025/08/18(月) 19:15:11.61ID:Gfjo7mYU
今年もDroidKaigiの季節がやってきたね
今年もViewModel不採用のアーキテクチャ
https://github.com/DroidKaigi/conference-app-2025
2025/08/18(月) 19:40:31.95ID:/HMywgCQ
MVVMでいいと思う
最大の問題は大きなメリットもないのにflutterとかUIフレームワークごとに
別のアーキテクチャ覚えさせるの?
まさしく時間の無駄だし
70デフォルトの名無しさん
垢版 |
2025/08/19(火) 00:25:37.02ID:9Ur9ADeh
>>69
68のはMVVMを捨ててReactでよく使われるようなMVPに近づけて、むしろWeb系フレンドリーを目指してるから受け入れられやすい
71デフォルトの名無しさん
垢版 |
2025/08/19(火) 00:33:32.73ID:9Ur9ADeh
世界で一番多いフロントエンジニアはWeb系だからそれらの書き方に似せるのは賢いなと思った
72デフォルトの名無しさん
垢版 |
2025/08/19(火) 08:08:45.09ID:9Ur9ADeh
>>69
追記で
ComposeフレームワークはUIレンダリングとしての役割のほかに状態管理ランタイムとしての役割も有していて
ViewModelによる状態管理がComposeフレームワーク上で不要なのではと言われている
参考記事
https://zenn.dev/rockname/articles/2a7db5ac4bb516

具体的には
Composeアプリ開発におけるViewModelはandroidx.lifecycle.ViewModelライブラリとしての独自の特殊なライフサイクルを有していて
Composeと異なるライフサイクルのため
ViewModelとComposeのそれぞれで状態管理をしていて状態の保持が点在する問題があって
この問題を解決するためにViewModel自体をComposableに書き直してしまおうとなり
それならViewModelよりPresenterで状態管理するほうが自然に書けるねってなった

ComposeではAndroidにおけるアクティビティの再生成による状態のリセットの特殊性が健在でFlutterとは事情が異なる
73デフォルトの名無しさん
垢版 |
2025/08/19(火) 15:40:18.83ID:9Ur9ADeh
droidkaigi2025デスクトップアプリを起動してみたがボトムバーがiOS26のタブバーのような見た目だ
今後はこういうフローティングバーが流行るのだろうか
https://i.imgur.com/u4aobGF.jpeg
2025/08/19(火) 15:42:19.75ID:OfjY9UJ1
material expressiveのフローティングツールバーでしょ
75デフォルトの名無しさん
垢版 |
2025/08/19(火) 20:55:56.18ID:9Ur9ADeh
それはツールバーっしょ
m3exressiveのナビゲーションバーはドックのしかない
76デフォルトの名無しさん
垢版 |
2025/09/02(火) 23:42:25.29ID:BG74jSL6
たまたまiOSライクなフローティングタブバーのComposeの実装例を見つけたから貼っとくぞ
https://github.com/elyesmansour/compose-floating-tab-bar
https://raw.githubusercontent.com/elyesmansour/compose-floating-tab-bar/main/assets/demo.gif
2025/09/06(土) 12:49:25.12ID:fnthT/PT
普及なかなか進んでないな
78デフォルトの名無しさん
垢版 |
2025/09/06(土) 13:14:37.72ID:rmxBGTZh
AmazonがComposeを好んで一部製品に使ってアピールしてるから、普及はこれからな気もする
ReactNativeで良い感は否めないけど
2025/09/13(土) 16:45:04.92ID:suFi3JuE
>>78
何に使ってるの?
80デフォルトの名無しさん
垢版 |
2025/09/13(土) 21:35:32.73ID:bqa2q9pe
>>79
https://amzn.github.io/app-platform/faq/#is-app-platform-used-in-production-by-amazon
2025/09/14(日) 20:47:10.07ID:GM0TlpuE
>>80
なるほどねー
2025/09/16(火) 11:26:53.93ID:1AtlUxAK
「クライシスアクター」「宮本晴代」「豊島保養所」「ケムトレイル」「マグナBSP」「アドレノクロム」←画像検索&拡散!!
「ムサシ 不正選挙」←要検索!!!ちなみにアメリカは「ドミニオン」な

インドの対日レアアース輸出禁止・インドの航空機事故・インドの新幹線導入はリンクしています。
爬虫類(レプティリアン/DS)金融ヤクザ天〇財閥・tsmc浙江財閥等の中華系爬虫類組織をぶっ潰しましょう。

イラン国内のモサド工作員 ≒ イラン在住のレプ
レプ(DS)の地下施設に突撃!!!!

www.youtube.com/watch?v=UzEhzJw69KM www.youtube.com/watch?v=fsG76Mo5ZTs
www.youtube.com/watch?v=V1SXb3tIk8U www.youtube.com/watch?v=fa8ZfKL7TZ4
www.youtube.com/watch?v=EuQWR0cl7es www.youtube.com/watch?v=daApYtbhUbQ
www.youtube.com/watch?v=83ZMb2vK_dI www.youtube.com/watch?v=DlIqow9MnxQ
www.youtube.com/watch?v=ETlSW0OiB5U www.youtube.com/watch?v=xfW4ha_Bfrs
www.youtube.com/watch?v=HBL5oidtCpw www.youtube.com/watch?v=R6FLwGhZ4xY

あなたの周りにも存在し、自分たちの種族に敵対的な存在に対して集団ストーカー等を仕掛ける痛い下等種族です。

ユダヤ系住民がタムラへの攻撃を喜び、「村が燃えますように」と叫ぶ様子
↑人間同士の対立を煽るこいつがレプやでーーーーーーーーーー!
83デフォルトの名無しさん
垢版 |
2025/09/16(火) 23:29:19.23ID:cWls4qHP
v1.9.0きた
https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.9.0
https://www.jetbrains.com/help/kotlin-multiplatform-dev/whats-new-compose-190.html
2025/09/17(水) 12:57:54.32ID:lZFOLn6g
>>83
そろそろ使うか
2025/09/17(水) 14:47:30.36ID:cprQK5IX
男は黙って2.0になってからやろ
86デフォルトの名無しさん
垢版 |
2025/09/17(水) 15:29:43.99ID:V91Sukbk
バージョン2.0になるのはJetBrainsのComposeMultiplatformがGoogleのJetpackComposeと完全に統合するときかな
早くて来年のGoogle I/Oに合わせてメジャーアップデートと予想
87デフォルトの名無しさん
垢版 |
2025/09/19(金) 21:26:30.12ID:kwj0OC91
今年のDroidKaigiを漁ってたら興味深いアーカイブがあった
Composeはそれ自体が状態管理に特化したフレームワークの側面もあることがよく分かる

DroidKaigi 2025 - [JA] UIだけじゃないComposeの可能性 ━ 宣言的に奏でるメロディ | usuiat
https://youtu.be/vVkkHxBWhK0
88デフォルトの名無しさん
垢版 |
2025/10/08(水) 21:39:05.46ID:RMEC36C6
v1.10.0-alpha02きた
https://github.com/JetBrains/compose-multiplatform/releases/tag/v1.10.0-alpha02
Jetbrains版のNavigation3も1.0.0-alpha02がChangelogに書いてないけどきててMultiplatformにほぼ対応した
2025/10/08(水) 22:44:00.41ID:mMNcv0n1
一通りそろうのまだ先そうだな
2025/10/21(火) 20:13:44.52ID:iI6Ys8s+
ViewModelにonClearedはあるけど何でLifecycleのonStopやonStart用意してくれないの
アタオカやろ
2025/10/21(火) 20:15:57.68ID:iI6Ys8s+
onClearedはViewModelOwnerが呼んでくれてstopやstopはLifecycleOwnerの役目だから?
92デフォルトの名無しさん
垢版 |
2025/10/21(火) 23:55:58.40ID:H1vV3rf4
AAC ViewModel(MVVMのViewModelのことではない)はAndroid用の状態のホルダーでしかなくて、
UI側にあたるLifecycleはAAC ViewModelとほぼ関係ないからねえ
Lifecycleを監視したいならUI側から持ってきたらいい

ComposeならLifecycleStartEffectでViewModelのコルーチンジョブを起動してonStopOrDisposeでコルーチンジョブのキャンセルを呼び出せる便利なもんがあるし
93デフォルトの名無しさん
垢版 |
2025/11/20(木) 13:23:44.39ID:SBKyF0LW
AndroidXのNavigation3が安定版になった

Overview
https://developer.android.com/guide/navigation/navigation-3
Migrate from Navigation 2 to Navigation 3
https://developer.android.com/guide/navigation/navigation-3/migration-guide
94デフォルトの名無しさん
垢版 |
2025/11/29(土) 14:14:20.16ID:rsFRibOo
Compose Hot Reloadが安定版1.0.0になってた
https://github.com/JetBrains/compose-hot-reload
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況