Flutterで知識0からスマホアプリを作成する

Flutterの勉強からスマホアプリのリリースまで実施したことを纏めます。

今年に入ってReact、Pythonなど始めたのですが、どれも中途半端に終わったので、今回はAndroid版でリリースするぞ」と目標を掲げました。

 

以下、今回リリースしたアプリです。

play.google.com

 

以下、概要になります。

  1. 作成するアプリを決めて、作成期間を決める
  2. まとめサイトで勉強
  3. アプリ開発
  4. アプリリリース(Android版)

 

以下、詳細になります。(そんなに細かくないです)

1、作成するアプリを決めて、作成期間を決める

自分が日常で使いたいと思うアプリがあればそれを作るのが一番良いです。

もし何もなければ勉強用として電卓のようなアプリでも良いと思います。

まずはFirebaseやAWSを利用せず、スマホ内のローカルのみで動作する簡単なアプリが良いと思います。

期間は勉強時間も含め、モチベーションが続く1か月以内に。

私は3週間に設定しました。

1日2時間で週5回ぐらい時間を使ったので、30~40時間ぐらい。

 

2、まとめサイトで勉強

1週間ぐらい勉強しました。

以下の2つが分かりやすかったです。

zenn.dev

www.flutter-study.dev

 

どちらのサイトも最後まで勉強すると時間がかかり、途中で嫌になります。

「Flutter実践入門」の「Chapter 15 04.アプリの実装例」まで1週間勉強しました。

「Chapter 06」で環境構築するので、「Chapter 07」からは手を動かしながらプログラミングしていきます。

自分が作る予定のアプリで必要な機能はじっくり勉強し、利用しない機能はサラッと読みました。

「Flutterで始めるアプリ開発アプリ開発時に少し勉強することになりました。

 

3、アプリ開発

約2週間ぐらいかかりました。

勉強時は理解していたつもりでしたが、Widgetで画面を作ることに躓きました。

以下のサイトで「3. WidgetでUIを作る」で必要な箇所を再勉強。

Widgetとは | Flutterで始めるアプリ開発

画面さえ何となくできれば、あとはネットで調べながら作ることができました。

1日だけ会社を休んで、一気に作成しました。

 

4、アプリリリース(Android版)

はじめに以下を読んでリリースしようと思いました。

01.リリースの準備|Flutter実践入門

細かくて実施する項目が多いので、ざっくりしたサイトを参考にしました。

「GooglePlayでは「携帯電話」「7インチタブレット」「10インチタブレット」でそれぞれ16:9のスクリーンショットが最低2つずつ必要になります。」

上記の記載もありましたが、「携帯電話」などどれか1つのスクリーンショットだけあれば、リリースはできます。

アイコン未設定でもデフォルトアイコンで良いですし。

 

以下のサイトを中心に読みながら、リリースできました。

【2022年最新】Flutter製AndroidアプリをPlayストアにリリースするまでの手順を徹底解説! | 徒然なるままに技術

 

上記のサイトだと細かいところの記載が無く迷ったときは以下のサイトで確認

Flutterでリリースビルドする方法【Flutter, Android Studio, Windows】 | enoiu

 

リリースしましたが、ステップ数以上に警告がめっちゃ出ています。。

それでも問題無く動作はしています。

 

5、まとめ

自分が作ったアプリがスマホ上で動作すると素直に嬉しいです。

「何かアプリ作りたいな~」と思っていたのですが、1歩が踏み出せず。。

「作成したいアプリと作成までのスケジュール」を決めれば、進んでいくだけです。

 

いずれは収益化できるようなアプリを作りたいです。

 

クロスプラットフォームなのでiOS版もリリースしようかなと思っています。

 

以上になります。

Amazon RDSにプライベートIPで接続する方法(非推奨)

Amazon RDSにIPアドレスを指定して、ローカルPCから接続したいという要望がありました。

今回サーバ移行のプロジェクトで移行前がEC2上にDBサーバがあったので、そういう要望が出たのかなと思います。

EC2ならIPアドレス(グローバル、プライベート)は固定できるので。

 

以下、Amazon RDSの環境です

・プライベートサブネット

・パブリックアクセスなし

・マルチAZ

SQL Server 2019 Standard Edition

 ※MYSQLや他のDBでも同じですが、今回はSQL Serverで確認

 

ローカル環境はAWS Direct ConnectでAWSVPCと接続されているので、プライベートIPで接続はできそうです。

以下、接続のイメージです。

[参考(AWS公式サイト)]

VPC の DB インスタンスにアクセスするシナリオ - Amazon Relational Database Service

 

以下、結論になります。

・プライベートIPではなく、RDSのエンドポイントで接続することが推奨

・プライベートIPでRDSに接続はできる

・プライベートIPは固定できないので、プライベートIPの接続は非推奨

※RDSのエンドポイントは「XXXX.ap-northeast-1.rds.amazonaws.com」のようなURLみたいなものです。

 

以下のパターンでプライベートIP(EIPも同様)は変更されます。

[参考(AWS公式サイト)]

RDS インスタンスに割り当てられた IP アドレスに関連する問題のトラブルシューティング

 

前置きが長くなりましたが、

Amazon RDSにプライベートIPで接続する方法になります。

 

1、RDSのプライマリのAZを確認

「ap-northeast-1a」になります。

 

2、ネットワークインターフェースでプライベートIPを確認

 EC2サービスの「ネットワーク&セキュリティ ⇒ ネットワークインターフェース」

 今回はRDSのセキュリティグループと説明(説明 = RDSNetworkInterface)で検索

AZが「ap-northeast-1a」のプライマリプライベートIPアドレスが接続するIP

「192.168.20.133」になります。

ちなみにセカンダリプライベートIP(192.168.20.15)でも接続は可能です

 

3、ローカルから接続確認

① SSMSから接続確認

 サーバー名に「192.168.20.133,1433」を入力し、「接続」ボタンをクリック

 「プライベートIP + ,(カンマ)+1433SQL Serverなので)」

 

ODBCから接続する方法

 Serverに「192.168.20.133」を入力し、「完了」ボタンをクリック

 

以上になります。

 

↓関連記事です。

 

以下、推奨されているRDSのエンドポイントで接続方法です

rikues2012.hatenablog.com

 

以下、RDSのプライベートIPが実際にどの手順で変更になるか?確認した記事です。

rikues2012.hatenablog.com

 

ローカル環境からプライベートサブネットにあるRDSに接続する

ローカル環境からプライベートサブネットにあるRDSに接続する方法です。

RDSのエンドポイントで接続することが推奨されているので、その手順を作成しようと思ったのですが、設定不要でした。

でも、気になっていたことを書いていきます。

 

以下、Amazon RDSの環境です

・プライベートサブネット

・パブリックアクセスなし

・マルチAZ

SQL Server 2019 Standard Edition

 ※MYSQLや他のDBでも同じですが、今回はSQL Serverで確認

 

ローカル環境はAWS Direct ConnectでAWSVPCと接続されています。

以下、接続のイメージです。

[参考(AWS公式サイト)]

VPC の DB インスタンスにアクセスするシナリオ - Amazon Relational Database Service

 

RDSがプライベートサブネットにあって、パブリックアクセスなしでRDSのエンドポイントが指定できるのか?という疑問がありました。

結果、特に何も設定せずにできました。

 

一部隠していますが、赤枠がRDSのエンドポイントです。

「s-rds-test.c9XXXXXXXXXX.ap-northeast-1.rds.amazonaws.com」

 

以下がRDSのプライベートIPです

「193.168.20.133」

 

 

nslookupでIPを逆引きするとできました!!(特に設定はしていない)

# nslookup RDSのエンドポイント

AWS Direct Connectが接続してない環境でも逆引きできます

 

長くなりましたが、

RDSのエンドポイントで接続することが推奨されているので、その手順となります。

 

設定は。。特に何も必要ないです。

なので、確認のみになります。

 

3、ローカルから接続確認

① SSMSから接続確認

 サーバー名に「s-rds-test.c9XXXXXXXXXX.ap-northeast-1.rds.amazonaws.com」を入力し、「接続」ボタンをクリック

 

ODBCから接続する方法

 Serverに「s-rds-test.c9XXXXXXXXXX.ap-northeast-1.rds.amazonaws.com」を入力し、「完了」ボタンをクリック

 

以上になります。

 

個人的に思ったこと

「ローカル環境からプライベートサブネットにあるRDSに接続する方法」をネットで検索してみたのですが、あまりヒットしませんでした。

今となれば「RDSのエンドポイントで接続する」のが当たり前で設定も不要なので、誰も詳しい記事にしていなかったのだと思いました。

私も特に何も考えずパブリックサブネットにあるRDSはエンドポイントで接続していたので。。

 

RDSのパブリックアクセス有無の設定は「ネットワークインターフェース」にパブリックIPを付与するしないだけで。

サブネットはどっち(パブリック、プライベート)にあるかだけで。

どんな設定にしてもRDSのエンドポイントはDNSで逆引きできるので、RDSに接続できる環境ならばRDSのエンドポイントで接続できるってことなんですかね。

 

プライベートにあるインスタンスはなんとなくDNSで逆引きできないのかな?と思っていましたが、気のせいでした。。

 

Amazon RDSのプライベートIPが変更される操作

AWS公式サイトにRDSのIPは変更されるとの記載があったので、実際に試してみました。

 

以下、AWS公式サイトに記載されている内容です。

[参考]

aws.amazon.com

 

以下、試したAmazon RDSの環境です

・プライベートサブネット

・パブリックアクセスなし

・マルチAZ

 

以下、試した概要です

1、DBインスタンスの再起動

2、DBインスタンスのフェイルオーバー

3、DBインスタンスインスタンスクラス変更(スペックアップ)

 

以下、詳細です。

1、DBインスタンスの再起動

結果:AWS公式サイト通り、IPは変更されませんでした。

1-1、再起動前のプライマリプライベートIP

  ap-northeast-1a:192.168.20.133

  ap-northeast-1c:192.168.21.41

 

1-2、再起動(フェイルオーバーなし)

 

 

1-3、再起動後のプライマリプライベートIP

  ap-northeast-1a:192.168.20.133(変更なし)

  ap-northeast-1c:192.168.21.41(変更なし)

 

 

2、DBインスタンスのフェイルオーバー

結果:AWS公式サイト通り、RDSのエンドポイントのIPは変更される

   ただし、RDSのプライマリAZが変更されるだけでAZの1a、1cのIPは変わらない

 

2-1、フェイルオーバー前

  AZ:ap-northeast-1a

 

 プライマリプライベートIP

  ap-northeast-1a:192.168.20.133

  ap-northeast-1c:192.168.21.41

 

2-2、再起動(フェイルオーバーあり

 

2-3、フェイルオーバー後

  AZ:ap-northeast-1c(AZが変わる)

 プライマリプライベートIP

  ap-northeast-1a:192.168.20.133(変更なし)

  ap-northeast-1c:192.168.21.41(変更なし)

 

 

3、DBインスタンスインスタンスクラス変更(スペックアップ)

結果:AWS公式サイト通り、RDSのエンドポイントのIPは変更される

   AZの1a、1cのIPも変更される

   プライマリAZも変更されました。(3回試しましたが、3回とも変更)

公式サイトに「DBインスタンスクラスの更新などの状況により、基盤となるホストが置き換えられます。」とあったので、気になりましたが、全て置き換わりました。

IPだけ変わったのかな。。

 

3-1、スペック変更前

  AZ:ap-northeast-1c

 プライマリプライベートIP

  ap-northeast-1a:192.168.20.133

  ap-northeast-1c:192.168.21.41

 

3-2、スペック変更(変更中の動作も含む)

 

スペック変更中にネットワークインターフェースがどうなるのか?見てみました。

なんとなく気になったので。。

 

① AZセカンダリ(1a)のネットワークインターフェースが追加

「192.168.20.107」が追加

 

② 元々あった1aのネットワークインターフェースが削除

「192.168.20.133」が削除

ap-northeast-1a:192.168.20.133 ⇒ 192.168.20.107 になる

 

③ AZ-1cのネットワークインターフェースが追加

「192.168.21.177」が追加

 

④ 元々あった1cのネットワークインターフェースが削除

「192.168.21.41」が削除

ap-northeast-1c:192.168.21.41 ⇒ 192.168.21.177 になる

 

2-3、スペック変更後

  AZ:ap-northeast-1c(AZが変わる)

 プライマリプライベートIP

  ap-northeast-1a:192.168.20.107(IPが変わる)

  ap-northeast-1c:192.168.21.177 (IPが変わる)

 

プライベートIDはけっこう変わりますね。

という話になります。

スペック変更時は新しいインスタンスに付け替えているのですね。(たぶん)

 

SQL Server 2019 Express 利用制限

開発環境用として、RDSでSQL Server 2019 Expressを利用することになりました。

 

ポイントしては、DBごとのデータ容量が10GBとなるところです。

1つのインスタンスに5つのDBがあり、それぞれ8GBで、合計40GBでも問題無し。

合計で10GBと思っていましたが、勘違いでした。

 

他の利用制限はそんなに困らなそうです。

 

以下、公式サイト

docs.microsoft.com

 

以下、まとまっているサイト

www.fenet.jp

簡単にお店のホームページを作る方法

昨年(2021年)知り合いがお店を始めるので、ホームページを作成したいとの相談をされました。

HTMLやプログラムの知識は無しで、安くて、簡単に作成できて、更新しやすい方法を探しました。

 

ということで、WordPressで作成することを提案。

ある程度(2~3日間ぐらい)の学習は必要になります。

WordPressならWEB上から簡単に記事、商品、問い合わせ画面を作ることができます。

私もWordPressを初期から構築するのは初めてだったので、レンタルサーバー選定、WordPressのテンプレート選定までをまとめました。

WordPressを知っている前提で話します。

 

1、レンタルサーバ

WordPressを入れる箱です。

エックスサーバー or ConoHa WING の2択です。

レンタルサーバーはいろいろあり、もっと安いサーバーもありますし、もっと性能が良いサーバーもあります。

安心、値段、性能、サポートなど総合的に判断すると、どちらかになる(と思います)

どちらも1年間契約にすれば、月1000円ぐらいです。

キャンペーン時期や契約年数(3年とか)よってはもっと安くなります。

 

どちらも以下の一番安いプランで十分です。

・エックスサーバー:スタンダードプラン

www.xserver.ne.jp

 

・ConoHa WING:ベーシックwww.conoha.jp

 

エックスサーバーは昔から有名で安心です。(国内シェアNo.1)

ConoHaはレンタルサーバーとしては比較的新しいですが、超大手のGMOが管理しているので、安心です。

私は迷いましたが、「ConoHa」にしました。

 

2、ドメイン取得サービス

ヤフーだと「yahoo.co.jp」がドメインです。

10年ぐらい前のホームページ作成時は1と2を別々の会社にして、少し面倒でした。

エックスサーバー or ConoHa WING であれば、レンタルサーバーの料金にドメインも含まれているので、そういう意味でもお勧めです。

レンタルサーバーの契約をすれば、ドメイン料金は永久無料です。

しかもConoHa WINGだと2つのドメインが無料です。

 

3、WordPressのテーマ

WordPressのテンプレート的なものです。

テンプレートの機能が豊富であればいろいろなことができますが、値段が高いです。

1万~3万ぐらいの価格帯が多かったです。

HTML、CSS、プログラムができるなら、無料のテンプレートで十分だと思います。

そもそもプログラムできるなら、WordPress使う必要ないですが。。

 

どのテーマにするのか?迷ったのですが、「New Standard」にしました。

newstd.net

 

14日間無料で試すことができたので、使ってみると、汎用的で機能が充実していてとても使いやすかった。

使い方のマニュアルもあるので、初心者でも安心して始めることができます。

ユーザーマニュアル | New Standard

 

ただ若干値段は高めで3万円弱となりますが、十分に価値はあると思います。

申込時に以下のクーポンコードを利用すると1000円引きとなります。

R7t9KPvT

 

以下に New Standard を利用して作成したホームページの事例があります。

いろいろな業種のホームページが作成できると思います。

newstd.net

 

あと、お菓子屋専用のテーマですが、「SWEETY」も良いかな~と思いました。

値段は安めの12000円弱です。

WordPressテーマ「SWEETY」(tcd029) | ワードプレステーマTCD

 

お菓子屋専用のテーマなので、かなり細かく設定できます。

無料期間がないのと、機能は少ないのですが、設定が多すぎる感じがしたので、私は辞めました。

お菓子屋&時間がある方なら「SWEETY」がお勧めです。(だと思います)

 

以上になります。

RDSのSQL Serverでデータベース削除するコマンド

RDSのSQL Server 2019でデータベース削除するコマンド

対応

SSMSで以下のコマンドを実行

EXECUTE msdb.dbo.rds_drop_database  N'your-database-name'


参考

Microsoft SQL Server データベースの削除 - Amazon Relational Database Service

 

 

SSMSで以下のコマンドを実行するとエラーになります

DROP DATABASE データベース名

エラー内容

The database データベース名 is currently joined to an availability group. Before you can drop the database, you need to remove it from the availability group.

(可用性グループからデータベースを削除する必要があります)

 

備考

データベース名に「-」がある場合は以下のように [] で囲うこと

例)EXECUTE msdb.dbo.rds_drop_database  [your-database-name]