bon now

ありのままの現実を書き殴る吐き溜め。底辺SEの備忘録。
Written by bon who just a foolish IT Engineer.

C#のXAMLとModelとJSONと面倒さ

Created Date: 2019/01/02 00:31
Updated Date: 2023/07/03 19:46

技術力を伸ばすためというか、単純に興味と知的好奇心を忘れないようにするために最近全く畑違いのC#(Xamarin)でネイティブアプリを作っている。

僕の業務経験上、ネイティブアプリは0年なんだけど、Xamarinのおかげでちょっとしたアプリなら簡単に作れるように・・・ならない!! というのも、例えばRailsやHTMLでは簡単に実装できるああいうレイアウトやモデルのバインドとかがクソ面倒で、 生産性が落ちまくっているため当たり前のことをやるのにめちゃくちゃ時間がかかっているからである。

JSONモデルの扱いづらさ

RailsではJSONパースなんて一瞬だしモデルにマッピングするのもそんなに苦労しない。というかWebフレームワークを備えるプログラミング言語であれば 大抵のことはできる。C#も.NETなんだしできるだろうと思ってググってもなかなかヒットしない。 ようやく見つけたのが quicktypeだった。
https://quicktype.io/

こいつを使うとJSON文字列をコピペするだけで指定したプログラミング言語で使えるモデルクラスが生成される。めっちゃ便利。 こいつを探していたんだ。ググラビリティ重要。

XAMLのプレビューとレイアウト方法がわからん

わからん。プレビューそのものはVS for Macにも2018年あたりから使えるようになってるんだけど、 Rg.PopUpっていうNugetライブラリを入れるとプレビューにエラーが発生してプレビューできない。
まぁ、そもそもプレビューされたとしてもXAMLの文法を覚える気力が出ないので、全然思ったとおりにレイアウトが組めないっていう問題は解決していない。

そんなこんなで自分でも糞だなーって思うUIしか作れないのが難点。画像用意するのもだるいし・・・・。

XAMLのBindingに否定が使えない

これ結構致命傷だと思う。プログラマなら !flg とか書くと否定になるって思うじゃん。できないのよ。こんなんで3時間くらい悩んだよ。
検索かけると、Bindingには否定が使えないらしい。QuickConverterとかConverterとかいうよくわからんメソッドを使うことが必須らしい。 なんなんそれ? いや、他のもそうなんだけど、なんかちょっと凝ったことというか、直感的にこうやったほうがいいよなーってことを実装しようとすると、 すぐServiceを使って既存クラスを継承して拡張して・・・みたいになるのもなんか辛いことばかり。 僕が全然C#を理解していないせいもあるだろうが、いたるところでそういう「大げさな拡張」をしなければならず、 やりたいことにすぐに取り掛かれない。おまけにiOSなら動くけどAndroidでは動かないみたいなライブラリなのか実装の問題なのかわからないような事象にも直面するので、 個人的には先に進んでいる・学んでいる感覚が全然ない。

参考サイト:MVVMでBindingを否定したいときにはどうするのでしょうか? - teratail

覚えることが多すぎる

Xamarin + Prism みたいな環境で作ってはいるけど、そもそもPrismのデファクトスタンダードなMVVMの書き方もよくわかってないし、 Xamarin Formsとの使い分けみたいなのも感覚である。 というのも、コピペや参考元にしているサイトの更新日によって、全然異なるXamarinのバージョンでの内容になっていることもよくあるため、 一応動くけど一体何が正しいのか全く分からないという矛盾を含むような実装になってしまいがちなのだ。 これは多分体系的に(身近にC#を知ってる人がいるとか本で勉強したとか)学んだ人なら「何いってんだ?」で終わるだろう。 しかし、孤独にXamarinと格闘する立場から言わせると、この「一体何をすれば正しいのか」をひたすら追いかけるのってめっちゃ辛いのである。 実際、1つXamarin関連のバージョンを上げただけで動かなくなるのもザラにあったので、 この辺をきれいにまとめて学ぶような環境を用意しなければなかなか素人からC#・Xamarinへの道のりは険しくなるのではないだろうか。

そういう意味では、使い古されたObjective-Cとか制約である程度実装が縛られるSwiftやKotlin、互換性抜群のJavaとかに比べると、 C#は何でもOK、来る者は拒まずみたいな精神が逆に辛みを助長している感は否めない。個人の感想だけど。

まとめ

Xamarinという茨道を突き進んでいるように思えるが、僕の知り合いにはプログラミング業務未経験でありながらUnity + C#でAndroidアプリを3つ制作・公開しているやつもいるんで、 誰もがC#で躓くというわけではない。そもそも僕はWindowsではC#でいくつか常駐アプリを作ってたときもあったんで、 C#そのものは多分そんなに悪くない。 今回僕を悩ませているのはまぁ、多分きっとXamarinである。こいつが一体いつまで成長し形を変えていくのかは今後も見守るとして、 疲弊しないような単一的なMVVMのベストプラクティスをいろんなサイトが提案してくれるようになってくれたら幸いである。 (って、これは肥大化したRuby on RailsのMVCモデルにも同じことが言えるなぁ・・・・)

local_offer
C#
folder work