読者です 読者をやめる 読者になる 読者になる

ぴよぴよエンジニアの日記

クラウドベンダーに勤める見習いSEの日記です。発言は私自身の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

JXUGC #17 の感想とその他諸々

「JXUGC #17 お前の Xamarin アプリを見せてみろ!」で Xamarin.Forms 製のアプリを発表させていただきました.

jxug.connpass.com

ありがたいことに、皆様の投票で3位入賞をいただくことができました.


f:id:Santea:20161016153154j:plain

景品でいただいたサルです.


play.google.com

発表させていただいたアプリは現在 Android版のみ Google Play で公開しています.

Nexus 5X でしかテストしていないので表示ズレなどあるかもしれません.
また、Twitter の認証のあとに私のブログページへリダイレクトされますが、少し待っていただくとアプリ画面に遷移します(この理由は後述します).

過去のツイートを掘り出すときとかに使っていただくと便利かもしれません.
(実際に本記事のツイートの一部は SearchSQL を使って掘り出しています.)


github.com


t.co


今回は発表が10分と短かく、発表に入れられなかった部分を含めて感想を書いてみます.



発表させていただくことになった経緯

発表することに決めたのはちょうど1か月くらい前の 初心者向けXamarinハンズオン! の懇親会でした.

jxug.connpass.com


懇親会中、JXUGC #17 が話題に挙がります.

そのとき発表枠は 18/20 という状態で、まず @qwerty2501 さんに白羽の矢が立ちます.
そして @qwerty2501 さんがその場で発表枠に申し込み.

田淵さん「サンテア君が発表枠じゃないんだよね~(・∀・)ニヤニヤ」
サンテア「∑(゚Д゚)!?」

という流れで、田淵さんを含め回り方に背中を押していただく形で発表を決めました.

このときアプリの進捗は、Twitter API をちょろっと触り始めたくらいで、ページ1つもできていないという、わりと見切り発車の中アプリ開発が始まりました.



サンテアの Xamarin 歩み

発表のときにも述べさせていただきましたが、私は Xamarin を始めてまだ半年(8ヶ月だった)です.

Xamarin を始める前は、WPF, Android を少しやっていて、iOS もほんの少し分かるという感じでした.

ここで私がどのような感じで Xamarin を学んできたのかご紹介します.



2月中旬 ちょまどさんに感化されて Xamarin を始める

santea.hateblo.jp

このときはまだ Xamarin が MS に買収されていなかったので学生特権でBUSINESSアカウント取得しました.

なのでBUSINESSアカウント持ってたり、Windows版の Xamarin Studio 持ってたりします.



3月26日 JXUGC #11 Xamarin ハンズオン大会に参加する

ここで初めて JXUGC に参加しました.
田淵さんともここで初めてお会いしました.

Xamarin.Forms すげー!となったのですが、Custom Renderer という魔の響を聞いて、やっぱ Xamarin.Native のほうが無難なんじゃないかと尻込みしました(;´Д`)



3月~4月 Xamarin.Android を触る

もともと Android をやっていたのでまずは Xamarin.Android から始めました.

最初はやれメソッドがプロパティになってるとか、Andorid のイベントが他のイベントに置き換わってるとか、やりずらさはあったんですが慣れるとむしろ書きやすかったりします.

わりと興奮したのが CoodinatorLayout のような Android 特有の View が Xamarin でも使えることでした.

このとき Xamarin.Android 作っていたスプラトゥーン用のアプリは力尽きてお蔵入りしています...



5月7日 JXUGC #13 東京 緊急開催 Xamarin のすべて!に参加する

jxug.connpass.com

13:00~18:30 という大ボリューム!
(今回のも似たような時間割ではありましたがw)

なんかやばいのもいくつかあったのですが、初心者に向けた発表もけっこうあり、とても勉強になりました.

この発表で Xamarin.Forms 押しの方が少なからずいらっしゃって、私もここで Xamarin.Forms に再度興味を持ちます.

今回の発表で Xamarin.Forms が多かった(もしかして全部かも?)のは JXUGC #13 が少なからず影響しているのではないかと思ったり思わかったり...



6月~7月

Xamarin.Forms を色々触ってました.

Xamarin.Forms で GPS と加速度のロギングアプリ作ってみたり、OxyPlot でグラフ描いてみたり.

このときはググりながら書き方を学んでいました.



8月10日 JXUGC #16 Xamarin.Forms Custom Renderer ハンズオンに参加する

eventdots.jp

@ticktackmobileさんによる Custom Renderer ハンズオン.

ここで Custom Renderer と仲良くなります.

多少手順は複雑ですが、順を追っていけば自分でも書けると実感.

Xamarin.Forms の世界がまた一つ広がりました.


そして9月のハンズオン、今回の発表会と続きます.


振り返ってみて思うのは、JXUGC が色々なことの起点となっていることです.


やはり勉強会に参加すると色々な方の知見を吸収できるというのもあるのですが、それ以上に、自分にモチベーションを注入できるというのが大きいのかなと思います.

新しいことを知ったら試してみたくなりますし、すごい発表を見たら自分も頑張ろうって気持ちになります.


そして JXUG にはそんな気持ちにさせてくださる方がたくさんいらっしゃって、本当にいつも勉強させていただいております.


Xamarin はいいぞ!だけでなく、JXUG はいいぞ!JXUGCはいいぞ!



SearchSQL について

Xamarin.Fomrs で作りました.

ほぼ PCL で統合されていて、Custom Renderer は一ヵ所しか使っていません.

まぁこれは Nexus 5X でしかテストしていないのでOS間差異、解像度間差異を吸収できていない可能性があり、別個 Custom Renderer を使わないといけない可能性は十分にあります.

ページ数は全部で5ページなので、かなり小規模なアプリに分類されると思います.



使っているライブラリ

www.nuget.org

www.nuget.org

www.nuget.org

www.nuget.org

www.nuget.org

help.syncfusion.com

help.syncfusion.com

help.syncfusion.com

www.nuget.org

www.nuget.org

github.com


このように、Model-View-ViewModel にわたって色々ライブラリを使っています.



開発の道のり

開発期間はだいたい1ヵ月半くらいです.

半分くらいは文字列のパース方法を考えるのに使いましたが、最終的に DynamicLINQ に処理を全部任せています.


今回の開発はほぼほぼ文字列のパースと Twitter API との格闘で、View はライブラリにお任せスタイルたったので Xamarin.Forms の沼にはあまり踏み込めていません.


ひとつ苦しんだのは、ListView や SfDataGrid などの ItemSource に値をバインディングするのを ViewModel の OnNavigatedTo でやってしまうと正常に動かないことでした.

どうも OnAppearing をフックしていないのが関係しているらしいというのは分かったのですが、まだよく確認はできていません.


f:id:Santea:20161016184839p:plain

そして今回一番面を食らったのがこのアイコンで申請したがために"なりすまし"でリジェクトされたことですw

他にも ListView の画面や TreeMap の画面をスクリーンショットで載せたら著作権違反で再度リジェクトされました.

申請するのもなかなかに大変です(Apple はもっと大変ですよね...)



みなさんの反応



入りはなかなか良かった模様














やはりツッコミが入る入力部分
でも面白く感じていただけたようで嬉しいですw





あとでお聞きしたのですが、同じようなことをされている方がすでにいらしゃったようです(つもりんさん誰...













フォローワー数でのソートは受けがよかった!
私はこのとき間違えないように入力するのに精一杯で全然回りを見れなかったのですが、ちょまどさんにお喜びいただけたようですねw









みなさんに比べればゆるふわです!!
ライブラリに頼り切ってる部分が多いので...




発表としてはデモをすごく評価いただけたようです.

10分間の構成のうち、デモで6分以上使っているのですが、これは上手くいったかなと思います.



デモで使ったクエリ
SELECT Tweet
  FROM Tweets(Query: #JXUG. Count: 500, ResultType: recent, Lang: ja)
 WHERE  !Tweet.Text.Contains("RT") AND Tweet.CreatedAt.LocalDateTime > DateTime.Parse("2016-10-15")
ORDER BY Tweet.RetweetCount DESC
SELECT User
  FROM Users(Query: Xamarin, Count: 200)
 WHERE User.Language = "ja"
ORDER BY User.FollowersCount DESC



今後直したいところ、付加したい機能

Twitter 認証時のリダイレクト先が自分のブログになっていること

Twitter の認証時にリダイレクト先を指定しないといけないのですが、ローカルの html を指定する方法がわからなかったので暫定的に自分のブログにしていました.

昨日 @yamamo さんにお聞きしたところによるとローカルの指定はできないとのことですので、どこかにテキトーなページを置こうと思います.



例外処理がわりとひどいこと

f:id:Santea:20161016200200p:plain

はい、見た目の通りひどいです.

開発した本人としてはこれ以上なくわかりやすいんですが、もう少しユーザフレンドリーなメッセージにしないといけません.



GROUP BY句、HAVING句の追加

現状、SELECT, FROM, WHERE, ORDER BY句だけで、集合演算も使えない仕様になっています.

また、テーブルの JOIN も行えません.

SQL のおいしい所がまったく使えないのでここは機能を拡張したいところです.


ただ、文字列のパースが DynamicLINQ 任せで、DynamicLINQ が集合演算に対応していないのでどうしようかなぁという感じです...




その他いろいろあるんですが、まったりと改修していければと思います...



感想

発表して本当に良かったです.

締め切りがなければこんなに頑張ることもなかったと思います.


田淵さんを始め、懇親会で背中を押していただいた方々には本当に感謝です.

ありがとうございました.


また開発途中で、Twitter で私の疑問にお答えいただいた皆様もありがとうございました.


特に @nuits_jp さんには色々気遣っていただいたり、たくさんリプいただいたりとお世話になりました.

ありがとうございました.




今年の内でも JXUG のイベントはまだまだたくさんあるようなので、参加させていただく予定です.

今後ともどうぞよろしくお願い致します!


最後に、今回「君の名前は...!!」的なことがけっこうあって、お名前とお顔がある程度一致してきました.

自分の中で、強くてちょっと怖い人筆頭格なあの人がとても気さくな方だったとわかったのは良かったです笑