Flutterで個人アプリリリースをして、約1年間で得た知見をまとめる

# 目次
2020年10月に個人開発でFlutterを使ったスマホアプリをリリースしました。
そろそろリリースしてから1年経つので得た知見を簡単に纏めておきます。
誰かの役に立てば嬉しいです。

## リリースしたアプリ
![スクリーンショット 2021-08-23 22.41.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/8004d861-c243-612b-839a-5837e82aa05d.png)



アプリ名：**グルメマップ**
機能：**近くの飲食店をMap表示するアプリ**
利用技術：**Flutter**
リリース日：**2020年10月**
作ったきっかけ：**3秒くらいで近くのランチやディナー検索できるアプリが欲しかった**
利用API：
[Google Maps API](https://developers.google.com/maps/?hl=ja)
[Google Places API](https://developers.google.com/maps/documentation/places/web-service/overview?hl=ja)
[Google Place Photos](https://developers.google.com/maps/documentation/places/web-service/photos?hl=ja)
[Google Place Details](https://developers.google.com/maps/documentation/places/web-service/details?hl=ja)

【Android】
https://play.google.com/store/apps/details?id=com.ayumisashitani.flutterfindshops
【iOS】
https://apps.apple.com/jp/app/%E3%82%B0%E3%83%AB%E3%83%A1%E3%83%9E%E3%83%83%E3%83%97-gourmet-map/id1535464321

### DL数 (2021/8/24時点)
【Android】
![スクリーンショット 2021-08-23 22.46.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/a60bd484-a582-731c-0cce-04b2851cc787.png)
【iOS】
![スクリーンショット 2021-08-23 22.48.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/293d466a-dc94-4b7a-78b4-e64b478822fa.png)

## 役に立ったツールなど

1. **[studio.app-mockup](https://studio.app-mockup.com/) (ストアスクショ作成)**
iOSとAndroid両方のストア用スクリーンショットを一度に作成できます。
お世話になったら開発者にチップを渡すシステムですので基本無料です。
めちゃくちゃ簡単に作れます。
![スクリーンショット 2021-08-25 21.23.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/abc1e97a-c0e1-deeb-2cd7-2b682a4ae923.png)
XD等に慣れている方は不要かもしれませんが、
テンプレも用意されてるのでサッと作りたい人にオススメ。


1. **[Github Pages](https://docs.github.com/ja/pages/getting-started-with-github-pages/about-github-pages)** 
iOSリリースの際にはプライバシーポリシーサイトを各アプリで準備する必要があります。
![スクリーンショット 2021-08-25 21.33.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/137a7d65-a282-7ff4-1589-500f703e97e3.png)

サイトを1から立ち上げるのも面倒で代替案を探していた時にGithubPagesを見つけ、
パッと作れたので利用しています。こんな感じ。([グルメマップ プライバシーポリシー](https://ayumisashitani.github.io/16018_myProject/) )

## 役に立ったライブラリ等

1. [firebase_analytics](https://pub.dev/packages/firebase_analytics) (analytics用)
2021年8月に入れました。ユーザの動きを追うことができます。


1. [app_tracking_transparency](https://pub.dev/packages/app_tracking_transparency)(ATT対応)
サクッとATT対応できました。

1. [native_admob_flutter](https://pub.dev/packages/native_admob_flutter/install)(広告表示)
下記で後述しますが、admob_flutterがnullSafety版で上手く作動しなかったので、
こちらに乗り換えました。

1. [bubble](https://pub.dev/packages/bubble)(吹き出し表示)
私のアプリでは以下のようにレビュー情報を表示しています。
この吹き出しマーク実装に用いました。
![スクリーンショット 2021-08-23 23.57.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/bb8f258e-2424-e7b7-d9b9-e71f58a6bf56.png)
実装はこんな感じです。

```dart
child: Container(
  alignment: Alignment.centerLeft,
  child: Bubble(
    nip: BubbleNip.leftTop,
    stick: true,
    color: Color.fromRGBO(255, 255, 255, 1.0),
    borderColor: Colors.black,
    child: Text("text",
  textAlign: TextAlign.left,
  style: TextStyle(fontSize: 15.0)),
  ),
),
```

## 大変だったこと

1. **FlutterのnullSafety対応** 
2021/03/04にFlutter2.0.0(Dart 2.12.0)が発表されnullableに対応するというメジャーバージョンアップが行われ、目を逸らしていたのですが、ようやく2021年8月に対応しました。
唯一詰まったところとして、[admob_flutter](https://pub.dev/packages/admob_flutter)がnullSafety版だとpod installでコケる問題がありました。
[issue](https://github.com/kmcgill88/admob_flutter/issues/283)として挙げられているっぽいですが、closeになる気配が無かったので、
別ライブラリ（[native_admob_flutter](https://pub.dev/packages/native_admob_flutter)）で対応しました。

1. **MarkerIconを変えられない**
GoogleMap上のMarkerアイコンを変える為に四苦八苦していましたが、
結論以下のように対応すればMarkerIconを変更できました。

```Dart
int markerSize; //お好きなサイズに。私はAndroid70、iOS80くらい ※OSによってサイズが異なって表示される時があった為。

BitmapDescriptor defaultIcon; //BitmapDescriptor型のアイコンを設定。

@Override 
void initState() {
    /// マーカ画像をassetより画像指定
    getBytesFromAsset('lib/assets/restaurantIcon.png', markerSize)
        .then((onValue) {
      defaultIcon = BitmapDescriptor.fromBytes(onValue!);
    });
}

// 一旦Unit8List型に返却
Future<Uint8List?> getBytesFromAsset(String? path, int? width) async {
  ByteData data = await rootBundle.load(path!);
  ui.Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List(),
      targetWidth: width);
  ui.FrameInfo fi = await codec.getNextFrame();
  return (await fi.image.toByteData(format: ui.ImageByteFormat.png))!
      .buffer
      .asUint8List();
}


```
>参考：[How to change the icon size of Google Maps marker in Flutter?](https://stackoverflow.com/questions/53633404/how-to-change-the-icon-size-of-google-maps-marker-in-flutter)


3 . **ATT対応**
実装で大変というよりは、表示文言に迷ったという意味で少し大変でした。
迷った結果以下のような文言を私のアプリでは表示するようにしました。もっといい文言が知りたい。

![スクリーンショット 2021-08-23 23.34.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/5762911d-5395-cdfb-9755-7a4f92a7fb5e.png)
下記を参考にさせて頂きました。

> [FlutterでATT(App Tracking Transparency)をサクッと対応
](https://zenn.dev/toshinobu/articles/0f7d4eebcf1f80)
> [各社の App Tracking Transparency のダイアログ事例と許可率について](https://serima.co/blog/ios14-att)


## 学んだこと
ざっくりと。

1. **とりあえずリリースしてみよう**

> **Done is better than perfect**
> 完璧を目指すよりまず終わらせろ
[【Qiita】Done is better than perfect](https://qiita.com/tosiooooooo/items/56d50e16f85a037ce767)

どれだけ練っても成功するかどうかなんて誰もわからないと思います。
最初に一気に機能を詰め込まず、まずはリリースしてみるのをオススメします。
最短、最小機能でリリースすることによりユーザからの声を早く聞けるメリットも私はありました。  
 2. **できない分野は外注もアリ**
アイコンやアプリデザインの知見がない場合、1から勉強するのも良いと思います。
ただ、クラウドソーシングサイト等デザイナーさんに外注を利用するのも個人的にはオススメします。
私はアプリアイコン、Map上のMarkerアイコンを外注して作ってもらいました。  
3. **広告連打はダメ**
adMobを実装した直後、自分のアプリの広告を連打してしまいました。
広告が止められる可能性あるのでやめましょう。  
4. **楽しい！**
要件も納期も自分次第であり、ユーザの声がダイレクトに届くのはやりがいがあります。
ただバグ対応も自分次第ですし、自己解決し続ける必要がありますが、やっぱり楽しいです。  
5. **analyticsは極力入れよう**
最近やっとanalyticsを入れてみたのですが、目に見えてユーザが使っているのが分かる為
モチベーションアップにも繋がると思います。
![スクリーンショット 2021-08-24 0.07.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410187/46f94687-2fb4-0b35-2f16-61ec202cc19a.png)


## 最後に
2020年の８月頃にアプリを作ろう！と意気込み、
９月から本格的に開発をスタートし、10月にリリースをして今に至りました。
やはり、**リリースをする**という経験はスマホアプリ開発者にとって大事だなぁと思います。
バグったものをリリースして「**やべ…審査通ってる…**」と平日朝に気づいて帰宅後夜な夜な修正リリースしたのもいい経験。
大変ですけど、これからもこのアプリだけでなく、
少しでも世に役に立つものをリリースし続けていきたいと思います。

また、最近そこまでFlutterに関する情報が少ないといったことも無く、
何かしら検索すれば情報がヒットするようになってきた気がします
企業が採用する事例も増えてきているようですし、今後もスマホアプリ開発としてFlutterが伸びてくれると嬉しいです。

※今回初投稿です。
誤字脱字、及び誤った情報等ございましたらコメントにてお知らせください。
後ダウンロードしてくれると嬉しいです。