Continuity is The Father of Success

Androidアプリとかゲームとか。毎日続けてるものについて。

あるあるLTに行ってきました

想定外に雨が降る中、渋谷駅から10分ほど歩いて参加してきました。 渋谷駅から歩いて10分って、渋谷駅の中で何分歩いたか問題ありますよね……。

andfactory.connpass.com

あるあるLTは初参加。 「あるある」と「いいね」の札がある、雰囲気のいい勉強会でした。

おそらく、運営チームの方が当日の様子をブログにしてくれると思うので、LT内容だけ簡単に触れておこうかなと思います。

LT

speakerdeck.com

ざっくり書くと OnConflictSttategy.REPLACE@Update と異なるので、注意しようず、という感じです。 特に、DatabaseViewでForeignKeyなんかと組み合わせて使うと、Updateしようとして消す(特にinner joinの場合)ことがあります。(ました)

ドキュメント読んだり、振る舞いをDebugしながら追っ掛ければ気がつくことができるので、横着せずやっていきましょう。。。 その節は反省しております。。。

そのほか(Realm)

LT後の質問にもあったのですが、Realmの人気が凄かったです。 iOS開発の方が多かったのもあったのかな?

帰り際に調べてみたらRealmが7.0.0-betaまで育っててびっくりしました。(stableは6.1.0) 最後に触ったのが4系だったような気がするので、いつの間に……な感じ。

github.com

ChangeLogみてると kapt とか Kotlin Multi Platformとか見えたので、RealmもKotlin対応進んでるんですね。 Android開発で使うことは(自分で技術選択する限り)ないかなーと思うのですが、最新動向だけは追っかけておこうかなと思った次第です。

軽量・高速モバイルデータベースRealm入門

軽量・高速モバイルデータベースRealm入門

Firebase Auth UIをFlutterで使いたかったので作ってみた

あんまりにもFirebaseのログイン処理を書きたくなかったので、Firebase Auth UIを呼び出せないかと試行錯誤してみました。

github.com

プラグイン名とかで何か都合が悪くなったら取り下げたいなと思うけれど、)pub.devにも公開中です。 とりあえず別の開発中のアプリで取り込んでみて、動作見ながら安定させるまではbetaなイメージ。

pub.dev

プラグインの説明

Firebase UI

Firebaseにはいくつか便利な機能がありますが、ユーザーを"Firebase User"として扱うためFirebase Authenticationを利用することは多いですよね。 ログインユーザーの管理、Google sing inやFacabook Loginのサポートなどなど至れり尽くせり。

firebase.google.com

ただ、どうしてもメールアドレスのバリデーションやなんらかの自動提案など、よいログイン機能を提供するのは骨が折れます。 パスワードの自動生成がiOSでできるからとAndroidでやろうとしたら、うまくいかないなんてこともあったり。Sign in with Appleの見せ方がわからなかったり。

そんな時に便利なのがFirebase UIです。

firebase.google.com

firebase.google.com

Webもあるよ。

firebase.google.com

ざっくり言うと、Sign up/Sign in画面が用意されているので、使ってねっていうライブラリです。 各プラットフォームそこそこ細かいカスタマイズができて、Terms of Serviceのリンクや一部画面のみのカスタマイズなんかもできます。

FlutterとFirebase UI

Flutter向けのFirebase Pluginは非常に強くサポートされているのですが、Firebase Auth UIはまだ提案段階です。

github.com

github.com

このため、Dartで書かれた下記のライブラリがよく利用されていました。 ※いたようです、ユーザー数が多い

pub.dev

pub.dev

ただ悲しいことにTwitter SDKが死んでしまった関係などで、ライブラリの利用が難しい状況になっています。 そんなわけで、AndroidiOSのネイティブSDKを利用してpluginを書いてみようかなと思った次第です。

使い方

まだまだ自分の中でもしっくりきていないのですが、大体下記のようにするとFirebase UIが呼び出せるようにしてあります。

class _MyAppState extends State<MyApp> {

  @override
  void initState() {
    super.initState();
    initProviders();
  }

  Future<void> initProviders() async {
    FlutterAuthUi.setEmail();
    FlutterAuthUi.setApple();
    FlutterAuthUi.setGithub();
    FlutterAuthUi.setGoogle();
    FlutterAuthUi.setMicrosoft();
    FlutterAuthUi.setYahoo();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            children: [
              RaisedButton(
                  child: const Text("start ui"),
                  onPressed: () async {
                    final user = await FlutterAuthUi.startUi();
                    print(user);
                  }),
            ],
          ),
        ),
      ),
    );
  }
}

使うとこんな感じ。

Firebase Auth UIには Logout メソッドもあるのですが、今のところ「ログイン処理をFlutter Auth UIを呼び出して利用する」ことを主眼にしているので追加していません。 同様にAndroidiOSのそれぞれにある細やかなカスタマイズ機能も未実装です。

とりあえずFirebase Auth UIを呼び出してユーザーにログインしてもらう、成功したら user が返ってくる/失敗したらnullが返ってくるという感じです。

作ってみての感想

  1. Webのサポートどうすればいいのか全然わからない、jsのライブラリをscriptとして読み込んで利用すればいいのだろう
  2. iOSのcocoapod追加が鬼門、staticで読み込んじゃったので何か問題があったらなんとかしたい
  3. AndroidのminSDKVersionに迷う、Flutterが16サポートしているけれど少なくとも21にしたかったのでしてみた。いいのだろうか?
  4. 1月2日から大体2週間ぐらいでできたので年始のFlutterはじめっぽくてよかった

自分のアプリに利用するベースでいじっていきます。 よろしくお願いします。

基礎から学ぶ Flutter

基礎から学ぶ Flutter

  • 作者:石井幸次
  • 出版社/メーカー: シーアンドアール研究所
  • 発売日: 2019/12/25
  • メディア: Kindle

基礎から学んだ方がいいかなーと最近思案中。

Twitter見返したら10月ごろに一度チャレンジして挫折してたのを思い出した。

ちょっと成長した感じがあってよかった。

2019年を思い返してみる

2019年も12月末になったので、この1年を振り返り。

本業

『どこからリファクタリングすればいいんだ……』から『あとはあそこをリファクタリングすれば良い』に変わったのが大きかったです。やれば終わるんだ。

同僚の皆様(お二人)には「プルリク百烈拳〜」とか言いながらレビュー依頼出しまくってすいませんでした、楽しかったです。 PRのサイズを小さくするから許してね。

開発技術に関して

一年間通してAndroidアプリに関わってました。 10月だけど一年間の取り組みをあらかた振り返ってたのがこちら。

tech.studyplus.co.jp

11・12月はリファクタリングを中心に行っていたので、挑戦としてはWorkManagerを実戦導入したぐらいです。この話は、新年にさくっと書いておこうかなと思います。

f:id:D_R_1009:20191229150350p:plain
2019年

Room 2.1とWorkManagerをはじめに、CameraXやKotlin Flow、AssistedInjectなどいろいろなものに取り組めたように思います。 2019年にはいろいろな事柄を踏み抜いたので、来年から開発速度を加速できればなーと言う気持ち。

役割について

6月ごろからAndroidチームのリーダーを、12月ごろからiOSチームにも参加するようになりました。 役柄的にもテックリードみたいな肩書きがつく(ついた?)りしているので、考えることが変わってきた雰囲気を感じています。

前職含め基本的には1開発者として動いてきましたが、徐々に求められている役割が変わっているのも年齢的には納得せざるを得ず。 来年の今頃に何を考えているかはわかりませんが、30歳で迎える2020年にはもっといろいろなことを考えていかなきゃなーと思っています。 (そしてようやく、ゼミで読んでいた本なんかを実感することが増えるんだろうなー)

登壇とか

SpeakerDeckを確認したところ社外で8回LTしていたようでした。

speakerdeck.com

ざっと整理してみると、下のような感じ。

  • Flutter関連
    • 2回
  • Kotlin関連
    • 4回
  • 開発環境関連
    • 2回

社外に出ていって喋ること自体、2018年末から始めたので上々なスタートかなと思っています。 開発で気づいたこととか、作り込んだことはブログ(ここ&会社)ベースで書いているのですが、それプラスで話せることに取り組めているのはいいことかなと感じてます。

また、Kotlin愛好会で誘っていただいた関係で技術同人誌にも記事を一つ寄稿できました。 いつかはやりたいなーと思っていたところだったので、チャンスをもらえて嬉しかったです。 誰かの役に立つようなアウトプットを出していきたいな、と考えています。

しかし、本当に、時間を作るのは難しい。

リポジトリ

色々と作っては消してしていたり、プライベートで進めていたりするのですが、パブリックにしたのが下記の通り。

一年を通して、ストアに新規アプリの登録をすることはありませんでした。寧ろ、更新が嫌になっていくつか消したという体たらく。 なんとなーく、ストアにアップするならこれぐらい便利でないと……! みたいな感覚が自分の中にあり、超えなかったなーという感じです。

社内で新規事業の立ち上げを見ていて思ったのが、アプリをリリースするのは簡単(ビルドしてストアのフォーム埋めるだけ)だけれど、サービスのローンチをするのは大変だなと。 2019年度の目標に「なんでもいいからサービスを一つアップしてみる」みたいなのを置いてたのですが、壁の高さを感じています。

終わりに

ブログをどんなタイミングで作ったのかはすっかり忘れてしまったのですが、飽きっぽい割に続いているなーと。 一年後を、適度に書けることがある状態で迎えられればいいなー。

ふと調べたら去年も書いてた。

blog.dr1009.com

ブログの本数、ゲームの感想とか含めて24だったので、なんとか去年超えてたらしい。 と言うか、去年書きすぎなのでは……?