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

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

Xamarin & Java EE & 乃木坂46 でAndroidアプリ作ってリリースしてみました~

JAX-RS Java EE 7 Xamarin 雑記 Visual Studio OpenShift Android

あまり大したアプリではないのですが…
@ytabuchiさんから以下頂いたので、晒してみます。


こんなアプリです(^^;
play.google.com
せっかくなので経緯など書いてみます。

スマホアプリ開発動機

昔から「一度はスマホアプリを作ってみたいなぁ」とは思っていて、Cordovaを触ってみるかな…と今年のはじめに書籍を買った後、突然Xamarin無償化の話がニュースになりました。

で、そこからXamarinを調べはじめ、5月にJapan Xamarin User Group (JXUG)さんの以下勉強会へ参加しました。

kikutaro777.hatenablog.com

勉強会の中で「9月くらいにアプリ作ったよLT大会みたいなものやれたら」みたいな話があって、面白そう!これを機会に何か作ってみたい!と思ったのがアプリ開発のきっかけでした。

あ、ちなみに乃木坂46の「きっかけ」という名曲があるので是非聴いてみてください!

www.youtube.com

あのミスチル桜井和寿さんがカバーするほどの曲です!

_人人人人人人人_
> 突然の宣伝 <
 ̄Y^Y^Y^Y^Y^Y ̄

www.asagei.com

実はこの宣伝もアプリと全く関係ないわけでなく(^^;実は関係大ありです。

私が大ファン(ファンクラブ会員番号11)だった堀北真希さんが結婚されて以降、自分を支えているのは乃木坂46でして…。
前々から好きだったのですが、今は好きとかいう次元を超えつつあります。

で、Xamarin関連でいえば5月に日本マイクロソフトさんのde:codeに参加して、乃木坂46エバンジェリストこと西脇さんのプレゼンに超感動したり

kikutaro777.hatenablog.com

@ytabuchiさんの色々なXamarin関連のセッションを聴いたり、その中で知ったXamarinエバンジェリストのちょまどさんのXamarin愛などに刺激を受けたり…

そんなこんな色々交じって「Xamarin + 乃木坂46」で何か作ろうと決めました。

ちょうどJava EE(というかほぼJAX-RSのみ)で、乃木坂ちゃんのRESTful API作ったりもしてたので、組み合せる形としています。

github.com

サーバサイドはOpenShift上の無償Gearなので、あまり負荷がでてくるようなら有償の使ったり色々考えないと。。

Xamarinのアプリ開発

8月ちょっと忙しそうなので…細かい技術的なことは別途書いていきたいなぁと。
ここでは簡単に。

苦労したこと

  • Xamarinの環境セットアップw
  • .NET 2.0以来のC# & Visual Studio(NuGet初だったり、昔はVS + VSSだったのでVS + Git初だったり)
  • Windows 10にOSアップデートしたらVisual Studio Emulator for Androidが起動しなくなったこと(Hyper-Vが駄目になったぽい)
  • アプリのアイコンやGoogle Play Store向けの画像の準備
  • Google Play Storeへのリリース申請で2,3回Rejectされてしまったこと

デザインセンスがないので、4点目はかなり苦労しました(^^;
人生で一番GIMP触った気が。透過とか全然やったことなかったので苦労しました。

こんなiconです。
紫は乃木坂ちゃんでN=Nogizaka、緑は妹グループの欅坂46でK=Keyakizaka。

f:id:kikutaro777:20160807120400p:plain

また、Google Play StoreからのRejectはかなり泣いたのですが、WebViewでYouTubeを使ってるのですが、レジュームしたときにバックグラウンドでYouTube動画が動かないことなど、色々条件があるためでした。ここもどこかで書きたい。

今後やりたいこと

最初色々やりたいなぁと思っていたのですが、最終的には一旦シンプルにして出すことにしました。そうしないといつまでもリリースできなさそうなので(^^;

技術的には

  • iPhoneアプリも出したい!
  • 組込みDBでオフライン機能とか入れたい(KVS AkavacheとかCouchBaseとか利用して)
  • Tabbed Pageのタブ切替をスワイプ対応したい
  • WebViewでサイト読込時にProgressBarかActivityIndicatorを出す
  • SendGridとか裏でつかって、機能要望とか障害報告飛ばしたい

自分はMacを持っていないので、現状Andoridアプリのみ。。。これだとAndroid Studio使ってるのと変わらない(*´Д`)ので欲しい。
でもiPhoneアプリ、登録料というか年間のが高いっすねぇ…。完全趣味で広告なしなのであれ。

ユーザ観点では

  • 推しメンでフィルタしたい
  • よくみるまとめサイトとかをタブに追加したい
  • ブログ更新とかあったらプッシュ通知してほしい

とかですかね。プッシュ通知はXamarin Formsでどこまで共通的にできるのか…ってかDependency Serviceなのかな。

ちなみに、似たようなアプリは結構あるのですが、とりあえずウリにしてるのは妹分の欅坂46と合わせたアプリという点と、早速ひらがなけやきに対応した辺りでしょうか。

アプリのコードは普通に下に置いてます(^^;全然C#慣れなくてあれですが。
github.com

面白いこと

Google Play Storeで「乃木坂46」と検索したら、公式から出てる「乃木恋」と同じラインに出てきて地味に興奮しました(^^)やっぱりこういうのが楽しい。

f:id:kikutaro777:20160807030249j:plain

出だし、思ってた以上にインストールされてびっくりです。サーバサイドが心配(^^;

f:id:kikutaro777:20160807121631j:plain

追記

画面イメージなど興味ある方はこちらをどうぞ↓
nogizaka46.hatenablog.jp
nogizaka46.hatenablog.jp

パーフェクトJava EEの執筆に参加させて頂きました

Java EE 7 パーフェクトJava EE

7月26日に「パーフェクトJava EE」が発売となりました。

gihyo.jp

パーフェクト Java EE
パーフェクト Java EE
posted with amazlet at 16.07.30
井上 誠一郎 槙 俊明 上妻 宜人 菊田 洋一
技術評論社
売り上げランキング: 5,901

昨今、OracleさんがJava EEから手を引くのではと噂が出たり、それはいかんとコミュニティからJava EE Guardiansなるグループが立ち上がったり、そしてOracleさんが否定したり…技術的な所とは外れた所で盛り上がりをみせています。今年のJavaOneで、どんな話がでるのでしょうか。気になる所です。

書籍発売に伴って、関わらせて頂いた流れとか感想を書きたいと思います。

経緯

パーフェクトJava EEを出そうという動き自体は、井上誠一郎さんを筆頭に、槙さん、上妻さんと2014年から動いていたそうです。私は去年の春頃に槙さんから「JSFを書ける人が欲しい」という名目でお誘いを頂きました。

この時点では井上さんと面識はなかったのですが、私自身パーフェクトJavaを読んでますし、JJUGの発表なども色々拝見していました。そして、JSF嫌いで有名っていうのも(^^;笑

今は読めなくなってしまっていますが、以下Advent Calendarのリンクにもある「Java EE6はSpringの代替になると思いますが、ただしJSFは除く、という話」のエントリはJava EEを触り始めた当時の自分には結構衝撃だったのを覚えています。(実際にはこのネタに関して、JavaOne報告会のLTか何かで発表を聞いたとき)

atnd.org

ということで、お話を頂いた時点では「あの井上さんの元でJSFを書くなんて無理です!」とお断りさせて頂いたのは懐かしい思い出です。

個人的には、勉強会とかの発表などを通じても、井上さん・槙さん・上妻さんとは圧倒的にレベル差があるというか、パーフェクト感のない自分が参加していいのか(これは今でもですが)悩みがずっとありました。

感想

2014年にJavaエンジニア養成読本の執筆に参加させて頂いたとき、きしださんから本当にたくさんの指摘を頂いて、自分の文章力のなさを痛感しました。今回はあのときの反省とかを色々活かし、、、と頑張ったつもりですが、早々レベルアップするものでもなく、文章というのは難しいと改めて今回も痛感しました。

Javaエンジニア養成読本 [現場で役立つ最新知識、満載!] (Software Design plus)
きしだ なおき のざき ひろふみ 吉田 真也 菊田 洋一 渡辺 修司 伊賀 敏樹
技術評論社
売り上げランキング: 35,923

養成読本の発売前は、家が隣家の火事に巻き込まれて、あらゆる所持品が炎上してしまいました。

今回パーフェクトJava EEでは、家は大丈夫だったのですが、とても大変なプロジェクトに参画となり、炎上してしまいました。というか現在進行形…。執筆業は向かないようです(^^;

本のウリ

井上さんが著者略歴で書かれているのが、まさにそれなのかなと。

「我々執筆陣はオラクル社員ではないので、建前を書く必要がありません。建前よりも本音の本です。」

と(^^;

槙さんは本音出し過ぎなやんちゃぶりをみせていて、Java EEの本なのに「本当にJava EEで良いですか?」というコラムを書いていますw こういう自由さも好きです。

技術的なところでは、Java EE 8で入る予定のMVCを先取り的に書いてあったり、私も日頃CDIを調べるときに「CDI 上妻」とよく打つのですが(目的はスライド JJUG 11月ナイトセミナー CDIをはじめよう に辿り着くためとか)CDIについてここまで詳細に書かれている本は中々ないのではないかなと思います。そしてJPAも深い。

私自身の所でいえば、JSFいいよいいよ、という感じの書き方ではなく、現場で使ってて思うことなど、なるべくちりばめたつもりです。

あと、PrimeFacesについて真面目に触れることができて良かったです。仕様ではなく、あくまでもライブラリなので入れていいのか悩んだ所ではありましたが、海外の書籍では当たり前のように入っていたりするので入れてみました。

PrimeFaces FounderのCagatay CiviciさんからTwitter通じて以下頂いたり

Facebookグループでも反応してくれて、温かいなーと。
f:id:kikutaro777:20160730161450j:plain

おまけ

同時期に「Spring徹底入門」がでていて、私も早速購入しました。今回の執筆メンバは私を除いてSpringにとても精通しています。Springのカバー範囲の広さや進化の速さはエンプラ系Javaに関わる人なら多くが知るところですが、そういう観点を持ちつつJava EEをみると、また色々違うのだろうなぁと他の執筆メンバをみてて強く感じまして(^^;

Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
株式会社NTTデータ
翔泳社
売り上げランキング: 2,231

あとJSF&Bean Validationのコードは一応以下に置いてます。
GitHub - kikutaro/PerfectJavaEE: JSF and BeanValidation

XamarinでShare Pluginを使ってSNSなどにシェア

Xamarin

XamarinのアプリからTwitterやFacebookとかを呼び出す機能つけたいなぁと思って調べてたのですが、Xamarin純正(?)のXamarin.SocialなるComponentがありました。

Xamarin.Social / Components / Xamarin

が、自分の環境だとNuGetでのインストールがうまくいかず、、、同じようなことに遭遇してるQAで以下の「Share Plugin」が勧められていました。

GitHub - jguertl/SharePlugin: Simple way to share a message or link on a social network in your Xamarin.Forms projects.

こちらはNuGetからインストールできた。ホッ。

なお、同じライブラリでDeprecatedになっているものもNuGetのリストには出てくるので注意です。(キャプチャ最上段のがDeprecatedと書いてある)

f:id:kikutaro777:20160720222718j:plain

利用は簡単で、とりあえずXAMLにボタンを置いて

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="ShareSample.SharePage">
  <Button x:Name="shareButton" Text="Share" />
</ContentPage>

ボタンイベントでCrossShare.Current.Shareメソッドを呼ぶだけ、という(^^;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Plugin.Share;
using Xamarin.Forms;

namespace ShareSample
{
    public partial class SharePage : ContentPage
    {
        public SharePage()
        {
            InitializeComponent();

            shareButton.Clicked += ShareButtonClick;
        }

        public void ShareButtonClick(object sender, EventArgs ea)
        {
            CrossShare.Current.Share("Xamarinからシェアしてみるテスト");
        }
    }
}

これで実行。ボタンがやる気なさすぎですが、とりあえず(^^;
f:id:kikutaro777:20160720223350j:plain

エミュレータで実行してボタンを押すと

f:id:kikutaro777:20160720223313j:plain

うーん(゜-゜)って感じですが

実機で試したら、おぉ、なんかそれっぽい!

f:id:kikutaro777:20160720223503j:plain

f:id:kikutaro777:20160720223522j:plain

試しにTwitterを選んでみると

f:id:kikutaro777:20160720223536j:plain

おー。ちゃんとテキストが。で、こんな感じに。

ShareLinkメソッドを使うと

CrossShare.Current.ShareLink(
    "http://46collection.sakamichi46.com/",
    "坂道グループのTwitterランクWeb");

こんなコードでメールとか選ぶと

f:id:kikutaro777:20160720223700j:plain

Title属性(引数の2つ目)はメールの表題などにはいるようです。シンプルで良さそう。

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村
QLOOKアクセス解析