ゴールデンウィークなので、今まで気になってたところを整備したりしました。
GitHub Actions で NuGet へのリリースまで行うようにしました。master ブランチはビルド・テスト・NuGet パッケージをアーカイブに保存、pre-release ブランチに push すると master ブランチでの作業に加えて NuGet にプレビュー版としてリリース、release ブランチに push するとリリース版を NuGet に公開します。
GitHub Actions 使ってて思ったのが、tag を使った方が素直に色々出来そうだな…と思いました。GitHub のリリース作成とかでは tag 使うのが前提っぽいし。タグ名をそのままリリースの名前に使うのが自然な流れみたいなので、tag を使わない運用の今回は GitHub のリリース作成は手動のままにしてます。
変更点
NuGet パッケージを以下のように分割しました。特に理由がなければ、今まで通り ReactiveProperty パッケージを参照に追加してください。WPF, UWP, Xamarin など固有機能が必要な場合は、そちらのパッケージを利用してください。
ReactiveProperty.Core は ReactiveProperty みたいなクラスが欲しいけど Rx の機能は不要なんだよな…と思っている方向けで Reactive Extensions への依存を取り除いた ReactivePropertySlim と ReadOnlyReactivePropertySlim が含まれている最小限のパッケージになります。
Package Id | Version and downloads | Description |
---|---|---|
ReactiveProperty | 基本的な機能を含んでいます。 | |
ReactiveProperty.Core | ReactivePropertySlim と ReadOnlyReactivePropertySlim が含まれています。Reactive Extensions への依存がないので、本当にシンプルな変更通知機能だけを持った ReactiveProperty が欲しい場合に利用してください。 | |
ReactiveProperty.WPF | WPF (.NET Core と .NET Framework 両対応) 向けの EventToReactiveProperty と EventToReactiveCommand が含まれています。 | |
ReactiveProperty.UWP | UWP 向けの EventToReactiveProperty と EventToReactiveCommand が含まれています。 | |
ReactiveProperty.XamarinAndroid | Xamarin.Android 向けのネイティブコントロールのイベントを IObservable に変換したりする拡張メソッドが含まれています。 | |
ReactiveProperty.XamariniOS | Xamarin.iOS のネイティブコントロールと ReactiveProperty や ReactiveCommand をバインドするための拡張メソッドが含まれています。 |
機能追加
- ReactiveProperty のバリデーションエラーメッセージを監視するための
ObserveValidationErrorMessage
拡張メソッドを追加しました。以下のように使えます。
// バリデーションが追加されている ReactiveProperty<T> 型の MyProp のバリデーションエラーメッセージを ReadOnlyReactiveProperty にするコード
ReadOnlyReactiveProperty<string> MyPropErrorMessage = MyProp.ObserveValidationErrorMessage()
.ToReadOnlyReactiveProperty();
性能改善
ReactiveProperty と ReadOnlyReactiveProperty に ReactivePropertySlim と ReadOnlyReactivePropertySlim のコードを一部インポートしました。これにより ReactiveProperty と ReadOnlyReactiveProperty の性能が 4 割くらい改善されています。
ただ、これでも Slim のついているクラスのほうが桁違いに早いです。
ReactiveProperty v7 だけど ReactiveProperty<T> と ReadOnlyReactiveProperty<T> のパフォーマンス改善も入れてみました。ただ、Slimのほうが圧倒的に早いけど…
— かずき(Kazuki Ota) (@okazuki) May 3, 2020
4割くらい早くなってるのかな。 pic.twitter.com/pCHRuqP0Ic
まとめ
GitHub のリリースを作らないと…。後でやろう。