Sign in

Software Engineer(Flutter/Dart, Firebase/GCP, iOS/Swift, etc.) / Freelance / https://mono0926.com/page/job/
Photo by JJ Ying on Unsplash

以下の記事でも触れている StateNotifier は状態値をimmutableで扱うことが実質必須ですが、そのimmutableプログラミングがあまり理解できていない様子が散見されたり質問を受けることが多いのでそれについて記事にしてみました。

immutableについての良い解説記事なども色々ありますが、Flutter/Dartにおいての実践的な扱い方に対して飛躍がある気がしていて、それを埋められることを意識して順を追って説明してきます。

以下で示したコードは https://github.com/mono0926/riverpod_example/blob/main/test/test.dart に大体含まれています。

mutableなクラスの挙動

まず、mutableなクラスの挙動は以下のようになります。

class Muta …


iOS の対応は簡単

https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple/overview/buttons/

iOS 13から導入された Sign in with Apple (以下、「Apple認証」と表記)ですが、それをAndroid上でFlutter・Firebaseを用いて対応する方法を説明していきます。

※ 本記事を参考にする場合、セキュリティリスクなど自己責任でお願いします。もし誤りなど見付けた場合はご指摘いただけたらすぐに反映するのでよろしくお願いします🙏

Android上でのApple認証の現状

https://firebase.flutter.dev/docs/auth/social#apple の記載では https://github.com/FirebaseExtended/flutterfire/issues/2691 を理由に未対応になっています。


Flutter 1.24.0–6.0以降のバージョンで使えるようになったコマンド

Photo by an_vision on Unsplash

これまでは `flutter build ios`とアーカイブの2つの手順が必要だった

Flutterで、iOS向けのビルドをしてApp Store Connectなどにアップロード可能なipaファイルを得るにはこれまで以下の2つの手順が必要でした。

  1. flutter build ios
  2. Xcodeアプリを使ってArchive実行(コマンドなら、fastlaneの build_app ( gym ) など)

バージョン 1.24.0–6.0 以降では `flutter build ipa` だけで済むようになった

1.24.0-6.0以降のバージョンのFlutterでは flutter build ipaでそれらをまとめて1コマンドで実行できるようになりました 🎉
(2020年12月11日時点では beta以降のchannelで利用可能で、 stableではまだ使えません)

利用手順

https://flutter.dev/docs/deployment/ios#create-a-build-archive にざっくり書いてありますが、簡単です。

flutter build ipa を実行

flutter build ipa --export-options-plist=ExportOptions.plist

--export-options-plist=ExportOptions.plist 部分に何を指定するのか戸惑うかもしれませんが、XcodeでArchiveしてエクスポートして成果物として得られるフォルダに入っているこちらを持ってきて指定すれば良いです。


2020年8月版

Photo by Daniel Pelaez Duque on Unsplash

Flutterの状態管理周りの手法はちょくちょく動きがあって、それに関する話題が度々盛り上がっている気がします。

今の自分は以下を組み合わせて使っていて、満足しています。

どうしてこの組み合わせを好んでいるのか、以下述べていきます(コード例などはリンク先で充分かなと思うものが多かったので少なめです)。

Riverpod (新Provider)

そもそもProviderとは

Provider自体、決して古いものではなく、2018年末に登場し、2019年初めにFlutterチームとのやり取りを経て認められ、Google I/O 2019にて公式推奨の立場になり、今ではFlutter …


🧒 ← Single Child

FlutterのWidgetを分類する際、以下の分け方はよくなされますが、本記事では違う切り口で分類してみます。

Widgetがどう組み合わされるかという観点で分類すると、次のように大別できます。

  • Widgetを1つも受け取らないWidget
  • 1つのWidgetを受け取るWidget(Single Child な Widget)
  • 複数のWidgetを受け取るWidget

本記事では2つめのSingle ChildなWidgetに焦点を当てますが、その前に前置きとしてそれぞれ何を指しているのかざっくり説明します。

Widgetを1つも受け取らないWidget

Widgetツリーの末端のWidgetがこれに相当します。Textが代表例ですね。

Text(
// WidgetではなくString …


Android・iOS・Web対応🤖🍎🌐

今朝、待望のFirebaseの “Emulator UI” 対応がアナウンスされました🎉

今まではエミュレーターの管理画面が無く、データの確認などがなかなかしにくい問題がありましたが、”Emulator UI”の提供によりそれが大きく改善されました。

最近までFirebaseエミュレーターはかなり致命的なバグもあり(今は解消されました)、どのくらい力を入れているのかやや疑っていましたが、今回の発表はそういう意味でもきちんと取り組まれている様子が伺えて良いなと思いました。

良いタイミングなので、本記事では、FlutterアプリからFirebaseエミュレーター接続するやり方を紹介し、エミュレーターUIもざっとなぞります。また大半の内容は、Flutterに限らずネイティブアプリでの開発でも参考 …


その場で動かせるFlutterサンプルをMedium記事などに埋め込めるようになりました

https://codepen.io/flutter

今朝、公式Twitter・記事などでアナウンスがあった通り、CodePenがFlutter対応しました🎉

ただ、とてももったいないことに、上の公式記事内で、せっかくのCodePenのMedium記事埋め込み機能を活用していなかったので、その補足記事を書いています。

Mediumは、embed.ly を使ってURL展開表示をしていて、そのembed.lyが対応しているCodePenのURLも良い感じに展開されます。ここに載っている対応言語(Web系が多い)の記事では、活用されているのをちょくちょく見かけていました。

DartPadが既にFlutter対応していましたが、そちらはMedium記事への良い感じの埋め込みは対応されていないため、この埋め込み機能はCodePenの明確な優位点ですね。

というわけで、CodePenのFlutterサンプルをいくつか載せてみます。今後、通常の記事でも活用していきたいですね🐶
※一部、Safariでは正常動作しないものがあるため、Chrome推奨です。


2ヶ月くらい前に、眼になんとなく不安を抱いて 視力を失わない生き方~日本の眼科医療は間違いだらけ~ という本を読んで、たまにはしっかりとした検査受けておきたいなと思って、筆者が開設された深作眼科に今日行ってきました。2ヶ月間のタイムラグがあるのは、当時予約した時に予約が埋まっていて、2ヶ月先でないと無理だったからです。COVID-19の事情踏まえてキャンセルしようか迷いつつも、再予約するとまたけっこう待つ必要が出てきていつになるか分からないのでマスクなどで防御しつつ行ってきました。

自身の眼への不安

基本的に体は超健康だと思っていて、日々の生活でいつも不調ゼロなのですが、眼だけは多分遺伝の影響 + 生活習慣であまり良い状態では無いだろうと思っていました。

自覚している状態としてはこんな感じです:

  • 元々0.05くらいの強度近視で、中学生くらいからソフトコンタクトレンズ付けてた(+たまにメガネ)
  • (当時視力低下が落ち着くと言われていた)20歳の時にレーシックを受けて、1.2くらいに改善した
  • レーシックできちんと視力が回復して、合併症や弊害は気にならず多分成功の部類(ソフトコンタクトレンズ付けていると角膜内皮細胞が減っていくので今も当時の判断としては良かったと思う)
  • 現在33歳で、毎年少しずつ視力低下していくのを感じていて、今は0.5–0.7くらい(?)で、パソコンも充分な距離を置くと小さな文字が少し見にくく、その他日常生活でもくっきり見えないものが出てきた
  • ソフトウェアエンジニアという職業柄、パソコン・スマートフォンなどに向かう時間が長いせいもあり、目が疲れ気味
  • 近くで画面などを凝視し過ぎないことなど、できる範囲で気を付けてはいる

過去にレーシック受けたことがちょっと特殊だと思いますが、パソコンと向き合っている職業人としてはわりと一般的な範囲内の不調だと思います。

今は0.5–0.7くらい(?)で、パソコンも充分な距離を置くと少し見にくく、その他日常生活でもくっきり見えないものが出てきた

特にこれが仕事や日常生活上、不便に感じて、検査してもらった上で以下を聞きたくて受診しました。

  • 視力低下の原因は?
  • 視力回復の手段としては何がお勧め?

(ごく)初期の緑内障と診断された

病院に行って覚悟していた通りたくさん待たされながら、過去にレーシックの手術受けた時と同じかそれ以上の種類の検査をしていただけました。そして検査結果としては、左右ともに(ごく)初期の緑内障と言われました。他にドライアイ気味と言われましたが、逆にいうとそれ以外は特に問題無かったのでしょう。緑内障は、簡単にいうと進行が進むにつれて視野が失われて、最悪失明に至る病です。僕は、これに関しては自覚症状ゼロで、検査の結果的にも失われてた視野はほとんど観測できずほぼ正常レベルのようでした。

視力を失わない生き方~日本の眼科医療は間違いだらけ~ という本によると、40歳以上の5%が緑内障と書かれていて、33歳で初期とはいえ緑内障と診断されるのはちょっと早いなと思いましたし、質問したらそう言われました。ただ、僕が診察を受けずに40歳過ぎてから違和感を感じて診察受けて(中期くらいの)緑内障と診断されてそこでようやくカウントされるという未来も充分ありえて、実際には30歳くらいでもカウントされていない緑内障初期や予備軍の人は多そう🤔と思いました。病院にいるのも高齢者がほとんどで、データに大きな偏りが出そうと思いました。健康診断の眼圧検査程度では不十分なようですし

以下のサイトでは、それを考慮した数にも触れていて、推定数としては500万人、つまり全年代の5%と書かれていて、確かにそのくらいいても不思議ではないですね。目を酷使したり近視の多い同業のソフトウェアエンジニアの同年代(30歳代くらい)で1割くらいいてもおかしく無い気もします🤔

緑内障患者さんのほとんどは40歳以上で、日本国内では、20人に1人の割合で発症 していると考えられています。初期・中期段階になっても、自覚症状がないまま治療を受けていないという潜在的な患者さんを含めると、その数は全国でおよそ500万人と推定されています。 にもかかわらず、緑内障は自覚症状がほとんど現れないため、実際に治療を受けてい る患者さんの数は非常に少ないのが現状です。
つまり、緑内障患者さんの多くは、治療を受けないまま病気を放置している、潜在的な緑内障患者さんといえるのです。

http://xoops.gfnet.gr.jp/modules/xoopsfaq/index.php?cat_id=1#q4

緑内障は、現在の医療技術では最高でも進行を止められる程度で失われた視野を取り戻すことはできないようです。つまり、今回初期の段階で半分偶然にも分かった自分はかなり幸運だったと思います。前述の通り、元々眼に不安があったため、想定の範囲内で特にショックなどはなく、早めに知れて治療を開始できて良かったという気持ちが大きいです(中期以降だったらショックだったと思いますが)。


Flutterは、元々はAndroid/iOS(+Fuchsia)のモバイルアプリ向けをメインに開発が進められていましたが、最近はWeb・デスクトップ対応も進んできています。そのあたりの変遷は以下でも触れました。

Web対応のざっくりとした変遷は次のようになっています。

  1. 2019年5月(Google I/O): テクニカルプレビュー版公開
  2. 2019年12月: ベータ版リリース(beta channelでも使えるようになった、という方が正確かも)

このペースを見ると、2020年のGoogle I/Oにリリースプレビュー、同年12月に開催されるであろうFlutterイベントで正式リリース、などの流れもあり得そうですが、そういうバージョン表記はマーケティング的意味合いも大きいと思っていて、実際の対応ベース …


Photo by Szabo Viktor on Unsplash

YouTubeといえば、ヒカキン を始めとするエンタメ系の動画ばかりのイメージが強いかもしれません。実際、トレンド動画一覧を見るとそういうのが大半を占めています。

パーソナライズされていないデフォルトの状態ではホームの動画一覧も似たような動画が多くなりがちですが、自分好みの動画を見つけて視聴・購読を続けていると、エンタメ系に限らないジャンルの動画もたくさん表示されるようになっていきます。

個人的には、ざっくり以下のようなジャンルの動画をちょくちょく観てます。

  • 技術系
  • ビジネス系
  • 金融投資系
  • 勉強系
  • ガジェット系
  • ゲーム系
  • 有名人系

その中で、意外と探しにくいビジネス系を紹介します。ここ1年くらいでビジネス系YouTubeが流行りつつあって絶対量自体はまあまあ増えてきているものの、エンタメ系動画との相対量的にはまだまだ …

mono 

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store