Continuity is The Father of Success

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

flutter web対応の話

blog.dr1009.com

できないできない言っていたweb対応ができてしまいました。 TSのtypesを使えばDartの型定義できそう……でも手でやるの全然わからん……と思ってたら js_facade_gen というツールが用意されていることに気づき、型定義の方法がわかったあたりから加速した印象。

github.com

npmみると5年前のpublishになっているけれど、GitHubだともうちょっと進んでいるようなので、もうちょっとメンテナンスがされないかな〜という感じ。 こう言った情報をつぎはぎしてなんとかやっていくしかないんでしょうね。

www.npmjs.com

個人で書いているブログだとそもそも引っかからない雰囲気あるし、Flutterのコード付きの話はZennの方にまとめていこうかな、と思ったのでZennに書いてます。 こっちのブログは(あんまり読まれないだろうし)、もっと砕けた感じで開発の途中の話とかを書いていくことになりそうです。

zenn.dev

プラグインが動いてからは、ChromeのDevToolを開いてHTML elementのdeleteしてみたらやりたいことができていたので、勘でなんとかなって楽しかったです。 動いてくれるなら、あとはひたすらビルドすればいいや、といういつものフィールドに持ち込めると楽ですね。


Pluginの状態としては、もともと追加したかった機能を一通り搭載できたところに。 細かなところで言えば、例えば電話番号入力の国コードを設定するだとか細かなFirebaseUIの実装が漏れているところはあるので、気が向いた時かIssueが作成された時に対応していくつもりです。

最初のモチベーションが「FlutterでFirebaseUIが動くものが欲しい」だったので、プラグインとして完璧にしよう、という気持ちが薄いのかなーと思ってます。 細かーくみていくと多いんですよね、オプション……。

FirebaseUIのFlutterプラグインをメンテしている話

blog.dr1009.com

去年こんなブログを書いたのだけれど、細々とメンテナンスを続けている。

github.com

1年前はFlutterで個人アプリを作ろうかと思っていたのだけれど、家に篭りっきりだとそういう気分も落ち気味で、今ではメンテナンスするだけに。 作ってよかったことといえば、FirebaseUIのweb対応をしようとFirebaseAuthのweb版をひたすら読んだことで、なんとなくFirebase Authのリクエスト方法に詳しくなったことぐらい。 なおpub.devを眺めてみると、同じようなことをしているライブラリはあるものの更新はとまりがちであったりする。変に大変だものね、わかるわかる。

FirebaseUIのFlutter版については、今のAndroid/iOSSDKを呼び出す方式は事前の策ではあるものの、本当はDartフルスクラッチで書いてもらうべきなんだよなーと感じていたりする。 というのも、Andorid/iOSSDKに依存しているままだとmacwindowsに対応するのは難しく、マルチプラットフォームとしてのFlutterの良さが出ないからだ。 せっかくDartでFlutter用にコードを書くのだから、ライブラリ側もDartで各プラットフォームに依存しないように作るのが良いな、というのがこの1年の知見です。

チャレンジしたflutter webむけの拡張の話。2021年1月時点で成功していない。 これはAndroidiOSの場合MethodChannelを通じて行った先で「新しい画面」を呼び出すのは比較的用意なのだけれども、webの場合そうでもないのが一番の原因だったりする。 またFirebaseUIでログインした情報を、FirebaseAuthのSDKから取得するみたいなことをしているので(Dartの世界で触っているFirebaseのインスタンスと、Java/Obj-Cの世界で触っているFirebaseのインスタンスが同一である状態を利用している)、そういったことがwebでできるのかすらよくわかっていないのもあったりする。 FlutterはAndroid/iOSの世界とべったりして作られていた2019年までの世界と、真のマルチプラットフォームをやっていくぞという気持ちで生まれ変わった2020年以降の世界をどう繋いでいくかが、これから大変なんでしょうね。

flutter webのHTMLElementが全くわからないので、この辺りのサンプルコードが増えないことにはなんともならない予感。 あと、pubspec.yml の中でJSライブラリのロードを定義できるようになったりしないですかね……。 現状、マルチプラットフォーム対応する時にDartのライブラリを使わなければならないのだけれど、これって本当はJSの資産(欲を言えばTSの資産)を使える方がいいと思うんですよ……。 dart:js ライブラリでなんとかしようとしたけれど、サンプルコードも少ないし、何より dart:js を使いこなせるのはJSのライブラリを作った人たちになる(印象がある)ので、Dartの世界に色々と持ち込むのが難しすぎると思うんですよね……。

pub.dev

なお、今はFirebaseUI-iOSの10系が出たので取り込んでみたところ、FB SDKの内部でheaderファイルが2重にインポートされてビルドができないと怒られてしまったので、ライブラリの更新が入るのをひたすら待っています。 Flutter、難しいなぁ。

2020年のおしごと

12月25日に仕事を納めたことにしたので、一年間を振り返ってみる。

おしごと

3行まとめ

  • 2月以降ずーっと在宅でお仕事、出社したの5回ぐらい
  • AndroidアプリとiOSアプリとFlutterアプリ書いてCI周りごちゃごちゃやってた
  • プロジェクトの進捗とか仕様の取りまとめみたいなことをするようになった

仕事場が家になった

もともと、会社としてリモートワークを出社が難しい日(台風の日とか)にすることはあったのだけれど、まさか毎日家で仕事するとは。

家で仕事をするにあたって、ちょっとばかし困ったことは椅子でした。 もともとそんなに広い部屋に住んではおらず、新規に椅子と机を追加することができなかったのが痛手に。 地味にMacBook Pro 15inchを机の上に広げると、スペースが足りなくなるのですが、これは慣れたら大丈夫でした。最近はエミュレーターで開発してても問題がほぼないので、電源さえ確保できればなんとでも。

リモートワークをしていると、流石にコミュニケーション頻度は減るなと感じています。 Androidチーム(3名)は週1回、雑談込みの定例とテキストチャットでワイワイやっているのでなんとかなっているのですが、チームが違ってしまったりするとどうにも。 やっぱり、昼休みに一緒にラーメン食べに行けないのは痛いですねぇ……。

備考:また行きたいお店たち

tabelog.com

tabelog.com

tabelog.com

どうしても仕事と日常のON/OFFがつきにくくなっているのは感じています。 仕事をする前か仕事終わりにフィットボクシングとかリングフィットとかをするとか、仮眠を挟むとか、そういったことをするようになりました。

2021年もこの感じでなんとかやり過ごしたい。

AndroidiOSとFlutter

Android(Kotlin)とiOS(Swift)、Flutter(Dart)をメインで書いている一年でした。 各リポジトリを並べつつ、去年と比較してみると、安定して一年間コードが書けていたように見えます。 iOSがちょっと控えめかな……。

Android(2019) Android(2020) iOS Flutter
f:id:D_R_1009:20201231141617p:plain
f:id:D_R_1009:20201231141222p:plain
f:id:D_R_1009:20201231141243p:plain
f:id:D_R_1009:20201231141300p:plain

合間でFirebase Functionsとかfastlaneとかymlとかいじってたので、今までで一番色々な言語を触っていた年のような気がしています。 Dartを書いている途中にKotlinのレビューをするとか、fastlaneを書いている途中にTSとSwiftのレビューするとか、そういうことを9月以降はやっていました。 慣れてくると、レビューぐらいならなんとかなりますね。流石にコード書く時には気持ちから切り替えないとアカン。

来年もFlutterをメインにしつつ、Paging 3がbetaになったらAndroidを書きたいなーとか思っています。 iOSはApplicationDelegateをSwiftに書き直した後にやりたかった、画面遷移周りの整理に取り組みたいなと思っています。 それぞれに集中できるよう、ちゃんと時間を管理していかなければ。

コードを書かないタイプのお仕事

1つのプロジェクトで進捗の管理、3ヶ月ほど開発アイテムの優先度付ミーティングの進行をやったりしていました。 なんとなーくでやっていたのですが、予定通りに開発できたり、進捗できたので良かったのです。

2019年までは一応AndroidiOSアプリに閉じた世界で難易度を考えれば良かったのですが、そろそろプラットフォームの縛りなく考えることも発生してきたな、という感じです。 サーバーサイドがRuby on Railsだったりするので、話を理解するためにその辺りの情報を集めるようになりました。 なんとなくで話していることが理解できているので、方向性は合っているはず。

なんとなーくやることを列挙してみたり、順番を整理してみたり、先送りする事項と今決めることを分けてみたり。 大学生の時にやってたような気がするなーと思いながら取り組んでいました。 帳尻合わせるのだけは得意なので、案外向いているのかもしれない。

その他

一年を通してみると、7月ごろからコロナのストレスでだいぶインプットに割ける余力がだいぶ減っていたように思います。 特にAtCoderは継続できなかったことが悔やまれます。

blog.dr1009.com

FlutterとFirebaseのドキュメントを読んだり、TSでDanger-JS向けのAndroidLintのPluginを書いてみたりしていたのですが、なんとなく方向性が迷子でした。

blog.dr1009.com

来年は計算機科学の勉強をちゃんとやろう。 おしまい。