5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【個人開発】FlutterでQiitaクライアントアプリを公開したので、技術選定や振り返り

Last updated at Posted at 2021-05-22

リリースしたアプリ

どこでもQiita(現在はAndroidのみ公開中。)

今回やりたかったこと

Flutterは業務で経験して約10ヶ月くらいになるのですが、知識の整理もかねて、業務以外で自分でもFlutterアプリをリリースするという目標を掲げました。
業務中の開発だけだと、どうしても自分が担当するタスクに集中しがちだったり、他の方と相談して大きな方針を決定することが多いです。
なので今回は自分一人で全体を1から考え抜くことをやりたかったです。

アプリの設計など

今回、リリースしたアプリの主な設計としては、Provider + StateNotifierを基本設計として、その他のライブラリではfreezed、retrofit、moorなどを使用しました。
基本的に使用するライブラリは、なるべく公式のライブラリなどに限定したいです。Flutterはバージョンアップが早いため、そのライブラリがどこまでメンテナンスされるか不安なためです。

個人的にはChangeNotifierで書くのがあまり得意ではないので(notifyListenerを忘れたりする)、StateNotifierを使うことはすぐに確定しました。Providerにするか、Riverpodを使うかに関しては迷いました。(実際には、途中までRiverpodを使ってアプリの全体の6割くらいを作り終えた後、Providerで作り直しました。)

しかし私の場合はRiverpodだとどういう風に書くのが正解なのか、よく分からなくなることが多いです。この辺は自分自身のRiverpodに対する理解の浅さや、経験的にProviderを多く使用してきたので慣れてしまっているのかもしれません。あとはRiverpodは破壊的変更が入る時もあるらしく、個人開発にかけられる時間を考えると躊躇したり、まだ世の中にRiverpodのコード例が少なく感じています。

Null Safety未対応

まだNull Safetyには対応出来ていません。作成時に全てのライブラリが安定版でNull Safety対応していなかったことが大きな理由です。

画面一覧と主な機能&参考にした記事

今回のアプリを作成するにあたって、なるべく今まで自分が記事を書いたりしたことをベースに、リリースまで、あまり時間をかけずに作り切ることを優先しました。そのため自分のスキル外のことには一旦、手を出さないように開発を進めました。

ほとんどは自分の過去の記事ですが、実装時に参考にした記事などが明確になっているものに関しては、リンクにしておきます。出来れば、全ての機能の実装例の記事を書きたいです。

Qiita APIドキュメント

画面名 機能名 スクリーンショット
ログイン画面 アニメーション
ログイン認証
ホーム画面 ・最新記事表示
無限スクロール(リストの一番下にスクロールすると、記事一覧の続きをロード)
タグ一覧画面 ・タグ一覧表示
タグ記事一覧画面 ・選択したタグの記事一覧表示
記事の検索画面 ・記事の検索結果一覧表示
検索ワード履歴表示
ストック記事一覧画面 ・ストック記事一覧表示
記事詳細画面 WebViewで記事詳細表示
アカウント画面 ・アカウント情報取得
・自分が投稿した記事一覧表示
設定画面 ・ダークモードOn/Off

主に妥協したこと

個人でアプリ公開を目標にしている場合、途中でモチベーションがなくなる前にリリース目指すべきだと考えています。そのためには、機能的にデザイン的にも妥協も必要だと思っています。
その代わりリリース後に、継続してアップデートをするのが大事だと思います。

  • 記事詳細画面はWebViewにしたこと
    今回記事詳細画面はWebViewで表示するようにしています。flutter_htmlなどを利用して、取得した記事を変換して画面表示したいです。(軽く試したのですが、tableタグの部分などが一部崩れたので、ひとまずWebView表示に変更しました。)

  • Contributions数の確認機能
    やりたいこと自体は過去に記事を書きました。

FlutterでWebスクレイピング(QiitaのマイページからLGTMの数を取得)

ContributionsはQiita APIからは取得出来ないです。Webスクレイピングして取得しているだけなので、Qiitaのページに修正が入ると動作しなくなる問題があります。

まとめ

今回、これまでに書いてきた記事などをベースにアプリを作成し、あまり多くの時間を使わずにアプリをリリースすることが出来ました。完全に1からやろうとすると時間がかかってしまうと思います。

やはり常に自分のアウトプットを記事にしたり、あるいは記事にしなくても「Githubのリポジトリなどに自己学習の成果物をためておく」という作業を積み重ねることは、自分を助けてくれると実感しました。

またFlutterでのリリース作業をしたのは始めてのことでした。過去にAndroidアプリのリリースを経験していましたが、Flutterでアプリをリリースするのは、Androidで公開した時とは手順が少し違っていました。

クオリティを上げつつ、少し余裕ができたら、iOSでのリリースもしたいと思います。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?