見出し画像

コストを抑えてアプリケーションを作るための開発ツール(サービス)

はじめに

この記事では『なるべく開発コストを抑えてアプリケーションを作る』ということに注力したときの開発ツールやサービスを紹介します。

エンジニアがいないチームやエンジニアはいるが人数が少ないチーム、個人の少ない時間で開発している人などがこれからアプリを作る時に、ぜひ参考にしていただければ幸いです。

◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆

作りたい物が簡単なWebページ& エンジニアがいない

方針 ▶ ノーコードで作りましょう

エンジニアがチームにいない状況で、無理にサーバをレンタルしてコードを書く必要はありません。ノーコードでWebページを作成できるサービスに頼った方がよいでしょう。
※ 勉強目的で自分でやりたいという理由があればこの限りではありません

サービス詳細の紹介は割愛しますが、ノーコードでwebページを作れるサービスは数多くあります。独自ドメインをホストしても1000 ~ 3000円/月程度で運用できるものがほとんどだと思いますので、条件に合ったサービスを探しましょう。料金は掛かるのが普通だと思いますが、探せば無料(に限りなく近いコスト)で運用することも可能かもしれません。

こちらのように特性をまとめてくれているページも多くあるため事前に色々と調べると良いと思います。

重要なことは「メンテナンスコストを掛けないこと」です。簡単なサービスとはいえサーバを自分で運用するということは、障害対応やバージョンアップ対応を行う必要があり、技術的な問題解決に大きな労力が掛かります。

★ 個人的なおすすめ

個人的にはパワポ感覚でスタイルが整ったページが簡単につくれるSTUDIOはオススメだと思います。

◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆

作りたい物が簡単なWebページ& エンジニアがいる

方針 ▶ ノーコードで作りましょう

エンジニアがいる場合でも開発が不要であればわざわざ作る必要はありません。ノーコードで解決できるならその方がよいでしょう。

ただし、エンジニアがいる場合は、エンジニアがコントロールできる範囲でコードを実装しても良いと思います。自分で実装するメリットとしては、よりリッチな表現ができることや、無料でWebページをホストする選択肢も広がることなどがあります。メンテナンスコストと比較して良い方を選択しましょう。

■ 無料でホスティングできるサービスの一部

◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆

比較的高機能なサービス & エンジニアがいない

方針 ▶ ノーコードで作りましょう

ユーザー情報を持っていたり、決済機能があるなど、比較的高機能なWebサービスを作る場合の選択肢です。

エンジニアがチームにいない場合は、コードを自分で書くという選択は最終手段とし、まずはノーコードで実現できるか調査してみましょう。ただし、「中途半端にノーコードではじめてしまい、途中で実現不可なことに気付く」といったリスクを回避するために、まずは『やりたいサービスがノーコードで十分実現できるか』をしっかり調査しましょう。

ノーコードで高機能なアプリケーションを開発するための選択肢は徐々に増えています。その中でも最も有名なのはおそらく WordPress でしょう。ECサイトや簡単なマッチングサイトであればWordPressのプラグインで実現できます。

その他にも多くのサービスがあり、こちらも次のような比較ページは多くあるため読んでおくと良いと思います。

特徴として、Bubbleのようなノーコードのツールは高機能を実現できる分、簡単なWebページ作成ツールよりも学習コストは高い印象です。安易に始める前に学習する時間を別途設けた方が確実かもしれません。

学習方法としては、公式のチュートリアルやYoutubeなど最近では勉強できる場所も増えています。

上記Youtubeチャンネルは色々なノーコードの学習方法や事例を紹介しており、非常に勉強になります。

◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆

比較的高機能なサービス & エンジニアがいる

方針 ▶ なるべく工数が掛からない統合環境を選択する

エンジニアがいる場合は、工数を抑えるために色々な機能が内包されている統合開発ツールを選択するのが良いと思います。

ここでは、バックエンド、フロントエンドに分けていくつかのツールを紹介します。基本的にはバックエンドの方が依存関係が大きく、後々の変更コストは高い傾向にあります。

▶▶▶【バックエンド】

■ Firebase

Googleが提供する「Firebase」は、

・リアルタイムデータベース
・アナリティクス
・ホスティング
・認証

など、一通りのアプリケーションに必要なサービスがオールインワンになった統合開発環境です。

Firebase上で認証やデータベースなどの機能を全て提供しており、アクセスするためのクライアントのSDK(開発環境)も全て用意されているため、サーバーアプリケーションとして実装することは基本的に必要ありません。プログラミングはフロントエンドのアプリケーションに注力できます。

また、Webページのホスティング機能も提供されているため、フロントエンドのWebページ(例えば、ReactやVueのアプリ)もFirebase上でホスティング可能です。

特徴としては、データベースをリアルタイムでクライアントと同期できるという点で、簡単なチャットアプリなどはFirebaseの基本機能だけで実装できます。

■ AWS Amplify

Amazon AWSが提供するAmplifyも基本的にはFirebaseと同じような機能を全て提供しています。サーバはAWS上に自動で構築されるため別途用意する必要はありません。

Firebaseと異なるのは、データベースがリアルタイムデータベースではなくAPIでアクセスする点です。APIの特徴として標準で「GraphQL」をサポートしており、データの構造を定義すると自動でGraphQLのスキーマを作成してくれます。

Firebaseと基本的には似ていますが、実現できる機能は微妙に異なっているため、選択する際によく調査するのがよいでしょう。

■ Hasura

HasuraはFirebaseやAmplifyとは少し毛色が違い、GraphQLのバックエンドサーバーを簡単に構築するための統合環境です。

Hasuraは特定のベンダーが提供するものではなく、RubyOnRailsのように自由に好きなサーバへホスティングできる「フレームワーク」のような位置づけです。(Hasura Cloudというホスティングサービスもあります)

データベース(PostgreSQL)を用意して設定を行なうことで自動で連携し、GraphQLのエンドポイントを構築してくれます。データの更新や挿入といった操作も自動で構築されるため、サーバ側の実装はほとんどいりません。

Hasura上でデータベースのマイグレーションを行なうとGraphQLのスキーマも自動で修正されます。また別のGraphQLサーバへの問い合わせを自動でスキーマ反映してくれたりと、複雑な実装を非常に簡単な設定だけで実現できます。

Hasura自体は、認証機能を持っていませんが、Auth0やFirebaseの認証と自動連携する機能もあり、エコシステムとして充実しています。

★ 個人的な比較

---ともかく簡単に実装したい場合は『Firebase』

Firebaseは、セットアップ項目が少なくともかく簡単に始められます。SDKもWebアプリ、モバイルアプリともに用意されており導入難易度も低いです。とりあえず最短ですぐに動くものが作りたいのであればFirebaseがオススメです。

---AWSの知見や財産があるなら『Amplify』

Amplifyは、Firebaseに比べると若干学習コストが高い印象があります。AmplifyはAWSの様々なサービス(AppSync,DynamoDB,Lambda,Cognitoなど)の組み合わせで構築されており、各サービスの特性の理解が必要なことが理由です。

しかしAWSのその他サービスと親和性が高いというのはメリットの一つで、既存のAWS資産があるような会社であれば、Amplifyを選択しても良いかと思います。GraphQLが使えるというのも個人的には良いポイントです。

---ベンダーロックインしたくないなら『Hasura』

FirebaseまたはAmplifyを使う場合は、後々に他環境へ移行することはかなり難しい状況になります。そういう状況を避けたいのであればHasuraを使うのが良いと思います。Hasuraのサーバーをどこに配置するかは自由で、データベースとも独立しているため、後々の移植性は高いと言えます。

Hasuraの役割もそれほど複雑ではないため、いざというときにHasura自体から脱却するのも他の2つのサービスよりは簡単です。

▶▶▶【フロントエンド】

■ Next.js / Nuxt.js (Webアプリ)

Webアプリを作るのであれば、ReactまたはVueというJavascriptフレームワークを使った環境がオススメです。

Reactであれば「Next.js」Vueであれば「Nuxt.js」が代表的な環境ですが、どちらを使うかはチームのスキルセットで変えれば問題ないと思います。

Next.jsの場合は、「Vercel」という簡単にホスティングできる環境もあるため、デプロイコストも最小限にしたいのであれば検討しても良いかもしれません。

■ Flutter (モバイルアプリ)

Flutterは、Googleが開発しているモバイルアプリの統合開発環境で、iOSとAndroidのアプリ※を一つのコードで作成することができます。Googleが作っているということもあるためFirebaseとの相性も良いです。

※ Webアプリも作れます

■ Expo (モバイルアプリ)

Expoは、JavascriptでiOSとAndroidのアプリを作る統合開発環境です。内部ではReactNativeというReactを応用した技術が使われているのですが、違いとしては、Expoで開発するとiOSとAndroidの開発環境(XCodeやAndroidStudio)を全く触ることなくアプリを開発することができます。

★ 個人的な比較

Webアプリについては、ReactとVueの経験から決めるでよいかと思います。

モバイルアプリについては、Reactの経験があるなら「Expo」未経験なら「Flutter」にするのが無難です。

ただし、この辺りは判断が難しいのでチュートリアルやサンプルコードの実装を通して判断してみると良いかもしれません。

個人的にはWebアプリであれば「Next.js」、モバイルアプリであれば「Flutter」がおすすめです。

◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆

RubyOnRailsなどはどうか?

ここまでは、バックエンドとフロントエンドを別のツールで開発する方法を紹介してきましたが、小規模の開発チームでは RubyOnRails のような「サーバアプリケーションが直接HTMLを生成する」開発環境もよく使われます。ここでは、RubyOnRailsをはじめとするWebアプリケーションツールを紹介しなかった理由について記載しておきます。

---Webアプリとモバイルアプリを両方作るニーズが多い

サーバーアプリケーションでHTMLを生成する方式だとWebアプリケーションについては問題ありませんが、モバイルアプリケーションを同時に作りたいという要件について別途開発が必要になります。「Webアプリ、モバイルアプリ」を最短で同時に開発したい場合は、バックエンドを別環境にしておいた方が工数を削減できます。

---複雑な機能をHTML側で実装するとプロジェクトが煩雑になりすぎる

最近のアプリケーションでは、クライアント側(HTML,Javascriptの世界)で求められる機能もリッチになってきており、それをサーバーアプリケーションの環境と統合すると、プロジェクトの依存関係が大きくなりすぎてしまいます。設計的な観点からもクライアントとサーバを分けることのメリットがあると感じています。

ここに書いてあるような内容はあくまで理由の一部であるため、Railsの経験が豊富なチームや比較的単機能なアプリの場合はRailsの方がコストが小さいケースも考えられます。状況に応じて技術選択を行なうことが重要です。

◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆

まとめ

読んでいただきありがとうございました。
今回は、なるべく開発工数を小さく押さえてアプリケーションを開発するための方法について紹介しました。

他にも色々な選択肢があると思いますので、今後も色々紹介していきたいと思います。ご意見・ご感想などももぜひアンケートでいただけると幸いです。

◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆

アンケートのお願い

このチャンネルでは、これから提供していくコンテンツやサポートの内容を改善していくために、アンケートをお願いしています。
ぜひアンケートにご協力ください。

アンケートはこちらから

この記事が参加している募集

#とは

57,861件

この記事が気に入ったらサポートをしてみませんか?