SwiftとGolangでスマホアプリを作る


今まで何度もスマホアプリを作ろうと思ったことはあったが、作ったことはなかった。

というわけで、七月の4連休で作ってみた!

使用技術

iOSの開発に長いこと苦手意識とトラウマがあったため、克服すべくiOSアプリを作ることにした。 というわけで、現在の使用技術はこんな感じ。

  • Swift

    • SwiftUI
  • Golang

    • Echo: REST Api 向けのフレームワーク
    • GORM: GoのORM
  • GCE
  • MySQL
  • GitHub

開発環境のみ

  • docker
  • Air: Goのホットリロード用のライブラリ

作るアプリ

今回は、以前授業で作成したアプリケーションのスマホ版を作ってみる。 そのアプリケーションは、「めしココ」という、「ご飯を食べにいくことは決まったけど、どこにいくか決まらない」人のために、行くご飯屋さんを決定してくれるアプリ。

開発は、詳細は作りながら考えていこうという見切り発車Development方式を採用

最近気づいたことなんですが、すでに同名のサイトが存在しており、改名を検討中。

Swiftでフロントエンドを作る

Apple公式のチュートリアルでSwiftでのアプリの作り方を学ぶ。

なるほど、以前に見たものとちょっと違う印象を受ける。

あれ、storyboardとかなかったっけ?

調べてみると、今回学んだものはSwiftUIというものらしい。

storyboardはGUIで画面を構成するのに対して、SwiftUIはコードでレイアウトを構築するものらしい。

ふーんという感じだが、とりあえず新しいほうで実際にプロジェクトを作ってみる。

チュートリアルでは、お気に入りの場所を登録するアプリを作るという感じで、割と流用できそうな内容であった。

とりあえず、ご飯屋さんの一覧を表示できるようにする。

そうして、ご飯屋さんの一覧から、ご飯屋さんをタップするとその詳細情報のページへ飛ぶようなアプリができた。

(データは仮置き)

Swiftという言語をほぼ初めて触ったが、結構いい感触を覚えた。 言語機能が結構豊富。 Optional型というものも、知ってはいたが、それが言語機能として組み込まれている言語を使ったことはなかったため、新鮮だった。 ただ、慣れてないだけかもしれないが、デバッグがちょっとしづらいかなと感じた。

バックエンドを作る

バックエンドはGoを採用した。 バックエンドでよく使われる言語で、使ったことがなかったし、なんかよく聞くので一度使ってみようかなという気持ちで使い始めた。

スマホ向けのAPIということで、フレームワークとしてEchoを使ってみた。 GinかEchoで迷ったが、Ginは今後別に使う可能性があるため、使わなさそうなEchoを試してみた。 ORMもできれば欲しいということで、GORMを使ってみる。 データベースは冒険せずにMySQLで行ってみる。

バックエンドに関しては特筆することもなく、ただGoの学習という感じ。 なにやらAPIを作る上で、MVC以外にCleanアーキテクチャというものがあるらしい。 多少調べてみたが、今回のプロジェクトで採用するにはアーキテクチャがデカすぎるように感じたため、見送った。

GoはCに近い印象だった。 Cにモダンな機能と文法を与えたような。 まだゴールーチンは使ったことがない。(有効に使えるような場面に遭遇していないと思う) シングルバイナリ好き

同時に二つの言語を新しく触ると頭がバグりがちなのでおすすめしない。

どこでホスティングするか

候補としては

  • AWSの何か(EC2など)
  • GCP

    • GAE
    • GCE
  • Azureの何か
  • 何かのVPS(Conohaなど)
  • Heroku

できるだけ、無料でやりたいという気持ちが強いため、VPSは除外 無料枠があるAWS, GCP, Azure, Herokuの中で、HerokuはすでにTwitter Botで無料枠を使っているため除外 また、せっかくなら使ったことのないサービスを使おうという気持ちからAWSを除外 そうしてAzureとGCPが残ったが、Azureは無料枠の判定だったりどういうサービスがどういう機能を持っているのか分かりづらかったため、 GCPを使うことにした。

GCE? GAE?

GCPの中で、今回使いそうになるサービスはGCEとGAE。 GCEはAWSでいうEC2で、VPS的なアレである。GAEはAWSでいうとなにになるのかわからないが、PaaSと言われるもので、Herokuのようにアプリケーションをデプロイするだけでプログラムを走らせられるというノリのもの。 この両方のサービスに無料枠がある。

最初、GAEをAPサーバ、GCEをMySQLサーバにしようと考えていたが、すでに似たようなことをやって結果をまとめてくれていた記事を発見 https://crieit.net/posts/GCE-DB-GAE

この構成で無料で動かすのに苦戦するっぽい

GCEにWeb+DB全部入れにしたら費用がかからなくなったのでやはりこの構成だと費用がかかるみたいです。

とのことだったため、GCEに全部載せにしてみる。

最初ためにし開発環境で使っていたDocker-composeをGCE上で動かしてみたが、当然メモリ不足で動かなかった。

そのため、本番環境ではMySQLをセットアップし、APサーバを普通に起動する方針に。

NginXをまだセットアップしていないため、そのうちやりたい

今後

とりあえず、一連の流れはできたのであとは機能を増やしていくだけ。

現在はお店のスマホから登録する機能を追加したところ。

次は画像の登録とかやってみようかな。

リポジトリは、開発に飽きてサーバ止めたら公開する予定