Flutterの学習の成果

Flutterの学習の成果

夏休み9日目、残すも土日で終わります。宿題の進捗ですが大絶賛ダメです。 GitHubにリポジトリを作り、以下のようなアプリを少しずつ作り始めています。

  • CloudflareのR2に画像をアップロードし管理するアプリ
  • ブログ用の画像として管理ができる
  • スマートフォンやPCからアプリを実行でき画像をアップロードできる
  • 画像は設定された最大幅とフォーマットに圧縮される
  • 画像はギャラリーのように表示し削除もできる
  • 画像からMarkdownやHTML形式のリンク・URLを取得できる

そのうち、APIの認証をしてR2のバケットにファイルをアップロードすることと、状態管理やキーチェーンを使ってセキュアに認証情報を保管する実装、また、有効なキーチェンの有無をキーとしてページを自動で遷移させる仕組みを作りました。ここまででも思ったよりも大掛かりな作業となり、4時間程度時間を費やしたと思います。

開発において4時間といえば正直大した時間ではないと思います。ただ、Svelteであればもっと早く作れただろうなという実感とFlutterのウィジェットツリーが深くなるコード、パフォーマンスの最適化のために細分化しづらいコード、importした後にasを使わないとどこからそのコードが来ているのか明示的でなくIDEの機能なしでは追跡できない点がどうも肌に合わないのです。

もちろん、Flutterは1つのコードでWindows, Mac, Android, iOS, Webに対応するのでそんなことさえも許される手軽さがあると思います(Flutterを使わなかったら言語やフレームワークを使い分け複数のコードを書かなくちゃいけないのでもっとめんどくさいです!)。それでも、私にとってはweb技術やSvelteの思想や手軽さの方が肌に合うようで何度頑張っても拒絶とまではいかないですが記述がスムーズに進まない感じとSvelteなら...といったもどかしさに苛まれて、なかなか続かない状態がずっと続いています。

昨年の秋ごろからFlutterを学び11月末ごろに入院する前まではBluesky向けのクライアントアプリをFlutterで頑張ってゴリゴリ書いていました。ログインやプロフィール画面、検索画面とでき、通知など残り少しでアプリをリリースできるのではないかというところまで来つつも外観やコード構成が気に食わず保守が無理だと断念した経緯もあります。Flutter製の優れたアプリももちろんありますのでFlutterが悪いわけではありません。

とても便利なフレームワークですし、Dart言語は地味ですが個人的にはとても気に入っている言語です。スクリプトのようにも使えますしコンパイルもできる。それでいてFlutterも使えるのでサーバーサイドでGo言語が手軽で便利なように、Dartはクライアントサイドの強い味方だと私は思います。でも、Flutterがどうしても合わないのでやはりSvelteやweb系に立ち戻るべきなのか葛藤しています。

ブログでは紹介したのですが8月の上旬にTauri2.0のリリース候補版が公開されました。少しずつモバイル対応も始まってきていてweb技術でクロスプラットフォームなアプリを作るフレームワークとしていつかはデファクトスタンダードになるだろうと希望的観測レベルですが私は考えています。唯一痛いところはバックエンドにRustを使っているところで、習熟すれば強い味方になりますが習熟までの道のりが大変です。幸いにもRustは私の肌にあったのですが、コミュニティーが大きくなるかの観点ではRustは大きな壁だと思います。また、モバイル対応もまだ不十分で発展途上です。

スマートフォン向けにアプリを作ってみたいという思いを叶えるにはFlutterが最短の近道だと思います(Kotlinは肌に合わず、SwiftはMac/iOS中心になってしまうのでNGです)。もしくはReact Nativeも良いのかもしれません。ですが、Svelteの手軽さに慣れてしまいTauriやRust、TypeScriptでいつかスマートフォン向けのアプリを作れないかという思いがFlutterに触るほど増してきます。もちろん、冒頭の通りにPC向けにもと考えているのでその点で長い目線でTauriとwebを学ぶことが自身にあっているのではないかと考えています。

そうして考えながらも何度もFlutterを触って、Svelteに戻ってと堂々巡りしている状況ですが1年近くFlutterを触って何度もSvelteに戻っていることを考えるとそろそろTauriの選択が許されるのではないか、といった思いがあります。もちろん未熟なフレームワークでコミュニティも小さいので博打的な面もあります。ただ、デスクトップだけで見れば十分に便利であることも違いないので、たまには諦めて成るがままに挑戦することもまた学びなのかなと考えています。というわけでFlutterはおそらく寝かせる状態になるだろうと思います。