専門学生がFlutterを独学で初めて3ヶ月でリリースした話

# はじめに
先日AppStoreとGooglePlayStoreに入館アプリをリリースしました。 
学校の友人とアプリを作ることになったため, その練習としてこちらのアプリを作りました。
自分の通っている専門学校が点呼での出席確認を行なっていたことから
作ってみようとなったのがきっかけです。

## 完成像
![出席GIF_AdobeCreativeCloudExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1631114/c1089680-22d3-6f97-d788-9468072c67d4.gif)


団体ごとに自作のQRコードをスキャンするだけで入館が完了するアプリです。
[AppleStore シュッ席- 入館管理アプリ](https://apps.apple.com/jp/app/id1620188388)
## GitHub
[secretused/student_attendance_app](https://github.com/secretused/student_attendance_app)
まだissueベース開発を試せていないので, 実務を意識した開発を行なってみたいです。

## 機能
* 新規登録・ログイン
* ユーザ編集・削除
* QRコード読み込み
* 入館管理・絞り込み
* メンバー管理・絞り込み
* 団体の編集・削除

# 所感
勉強したことは自分の通う専門学校に来校されたKboyさんの[Flutter実践](https://www.youtube.com/watch?v=VZ9wcJ920XA&list=PLuLRJz1UnJzEYLFd1ihJit1E6dYol8VC5)を
最初にやりました。その後は随所公式ドキュメントや記事を検索をしてリリースまで出来ました。Widgetが整っており状態管理も理解しやすく, 初心者に優しいといった感想です。
## 反省点
1. iOS・Androidそれぞれのユーザーの認識の差を考慮できなかった。
1. エラー・バグ処理が網羅されていない。
1. テストを意識した設計・開発ができなかった。
1. 完成してからリリースまでを甘く見すぎていた。

## 良かった点
1. 学校のためという目的を持って開発ができた。
1. ニーズを考えてMVP(Minimum Viable Product)で作れた。
1. インプットよりアウトプット寄りの学習ができた。
1. デザインの使いやすさ, 統一感を意識できた。

今後は個人開発でもより実践的に近い
タスク管理やテストを導入しやすい設計を意識して開発していきたいです。

# 技術要素
## 環境
* Dart 2.16.2 
* Flutter 2.10.4 • channel stable
* provider: ^6.0.2
## State管理 ・ DB
[Provider](https://pub.dev/packages/provider) + [ChangeNotifier](https://docs.flutter.dev/development/data-and-backend/state-mgmt/simple#changenotifierprovider) で主にを管理しています。
KboyさんがFirebaseを導入した動画で使用していたため採用しました。
Riverpod + freezedの勉強を現在しています。

[Firebase・Firestore](https://firebase.google.com/docs/firestore/quickstart?hl=ja) 認証機能・データ管理をしています。
## パッケージ ・ Widget
* [flutter_barcode_scanner](https://pub.dev/packages/flutter_barcode_scanner) QRコード読み取り
* [DatePicker](https://flutter.ctrnost.com/basic/interactive/form/datapicker/) カレンダーモーダル表示
* [flutter_picker](https://pub.dev/packages/flutter_picker) 絞り込みPicker表示
* [CircularProgressIndicator Class](https://api.flutter.dev/flutter/material/CircularProgressIndicator-class.html) ローディング処理
* [url_launcher](https://pub.dev/packages/url_launcher) 外部サービス アクセスURL認証
* [flutter_native_splash](https://pub.dev/packages/permission_handler) スプラッシュ画面作成 
* [permission_handler](https://pub.dev/packages/permission_handler) アクセス認証
* [flutter_localizations](https://qiita.com/maria_mari/items/4b2780d5657581c4f406) 多言語対応設定
## 運用
* [showLicensePage](https://api.flutter.dev/flutter/material/showLicensePage.html) ライセンス提供
* [Twitter: uta_app_vta](https://twitter.com/uta_app_vta) お問い合わせフォーム
* [Qiita: シュッ席](https://qiita.com/utasan_com/private/ffebc0e73b8bae704306) 利用規約/プライバシポリシー

Firebase/AnalyticsとFirebase/Crashlyticsを今後使用したいです。

## 審査 ・ リリース参考リンク
* [リリース編2 : AppStore/iOS](https://zenn.dev/kazutxt/books/flutter_practice_introduction/viewer/release_appstore)
* [App Store申請-Apple Developer Programへの登録](https://www.musen-connect.co.jp/blog/course/product/ios-ble-dev-app-store-apple-developer-program/)
* [Flutter製AndroidアプリをPlayストアにリリースするまでの手順を徹底解説](https://gakogako.com/flutter_android_release/)

今回審査は 1リジェクト 2エラーでリリースができました。
審査は予想より対応が早く, 合計で2日程かかりました。

# さいごに
勢いで始めた自分が短期間でアプリリリース出来るまでに成長したのには正直ビックリです。
開発を進めていると自分の苦手なところや性格がわかってくるので
改善点や今後の課題がわかりとても有意義です。
リリースまで繋げるとモチベーションやポートフォリオにもなるのでとても良かったです。

### 宣伝
入館管理アプリ **シュッ席** というアプリをリリースしました。
改善点はありますが, 是非ダウンロードしてみてください！

iOS
[AppleStore シュッ席](https://apps.apple.com/jp/app/id1620188388)
Android
 [GooglePlayStore シュッ席](https://play.google.com/store/apps/details?id=com.app.attendanc_management_app)