はじめに
もうすぐ年末年始のお休みですね。まとまった休みになるので、個人開発を始めてみようといった人もいるかと思います。
個人開発をするときにどんな開発パターンがあるか、少しまとめてみたいと思います。
また、個人開発に関わらず、仕事ではない複数人のチーム開発という意味でサークル開発というのも同じくスコープに入れます。
方向性決めについて
個人開発をするときに、以下のどちらかのパターンになると思います。
技術から入るパターン
こんな技術を見聞きしたけど、それの実践編として動くアプリを作ってみたいというケースです。
目的としては、その技術の習熟度を上げる、学ぶということが主軸になります。
ニーズから入るパターン
機能ベースで、こんなものをざっくり作ってみたいとか、こんな困り事があるのでアプリ作って課題解決したいといったケースです。
ニーズの出元としては、自分自身が使いたいというものもあるかもしれませんし、家族や知り合いが困っていたというケースもあります。
また、未知なるニーズに応えるという意味では、新規ビジネスになりそうなサービス開発のようなものもここから始まるのだとは思います。
有名な例としては、FaceBookは、大学内での名簿も兼ねたソーシャルサービス、ゲームとして作り出されたものというものもあります。
アプリ種類ごとのアーキテクチャパターン
今回は上記どちらのパターンから入ってもよいように、カタログ的にあげ出していきたいと思います。
スタンドアロンアプリ
アプリから外に通信をせずに、端末内でクローズした形で動くアプリケーションです。例としては、電卓、BMI計算、バックアップ機能がないカメラアプリ、通信機能のないゲーム全般などがあります。
扱う技術については、動作環境により異なります。PC上でのデスクトップアプリであれば、Javaを扱いたければJavaFX、Windows系でC#、Pythonでもデスクトップライブラリがあります。
一方、スマホアプリでは、iOSであればSwift、Androidであれば今はKotlinで開発していく形になるかと思います。
GUIではなく、CLIアプリであれば、Shellだけでも実現できますが、これはアプリというよりツールかなと思いましたので詳細の説明は割愛します。
Webサイト
これは、静的なコンテンツとしてサイトを作るというものです。静的とはいいつつ綺麗なUIを実現することができます。
具体的な例としては企業や個人のホームページなどがあります。
扱う技術としては、フロントエンド関連の技術となります。利用者からはブラウザ経由でアクセスするためです。一方、ブラウザといえどもPCであったり、スマホのプラウザだったり、iPadのようなタブレットであっても表示崩れなく表現するようにしていくには技術が必要となります。SPA(Single Page Application)の技術や、JavaScript、HTML、CSSといったフロントエンド技術の進化は数年激しいものになってきていますので、技術として飽きはこないでしょう。
Webアプリケーション(サーバー単体)
仕事で扱うパターンとして最も多いものかと思います。
利用者のアクセス端末としては先ほどのWebサイトと同じで、PCやスマホやタブレットになります。ただし、利用者の想定によってタブレットやスマホは対象外にしたりすることもありえます。個人やサークル開発ではなおさらスモールスタートになると思うので、まずどこを対象にするのかかが考えることになります。
具体的な例としては、ブラウザ経由で動かすシステム全般になると思います。掲示板のような利用者から送信したデータを他の利用者にも見せたりするといったものまでかなり広い範囲で機能実現することできます。1つ目のパターンの例で示した電卓アプリやゲームなどを端末へのアプリインストールなしにブラウザだけで機能提供することも出来ます。
扱う技術としては、サーバー側のロジックも必要になりますが、実現手段は様々です。Java、Python、PHP、JavaScript(Node.js)、C#などからどれかをチョイスすれば良いと思います。データの永続化先(保管先)として、DBも用意することが多いです。
優れたUIを実現するために、ブラウザ経由ではなく、ネィティブアプリケーションで動かして、データだけをサーバーから取得することもあります。その際には先ほど記載したように、SwiftかKotlinを使うこともあります。
Webアプリケーション(他サービスと連携)
先ほどのWebアプリケーション(サーバー単体)はそこで閉じる形でしたが、最近ではWebAPIの発展により、サービス単体で動くものではなく複数サービスを連携させて利用者に提供するものがほとんどです。
具体的な例としては、SNSとの連携機能付きのサービスとして、Qiitaなどもサービス連携と利用者許諾をすることで記事を書いたら自動でTwitterに記事を書きましたという内容の投稿がされたり、Connpassといった勉強会情報共有のプラットフォームがありますがそこから参加登録したらGoogleカレンダーに連携されて自分の予定が登録される、などの実例があります。
郵便番号から住所を取得するなど、データ取得パターンとしての繋ぎ方もあります。そういった世の中のサービスやデータも活用しつつTotalで利用しやすいサービスを実現していきます。
AWSを始めとしたクラウドサービスの中のマネージドサービスを使うケースについても、このパターンに含まれるとも表現できるかなと思います。
おわりに
何か開発したいといった際に、何をどうやって作ろうかと考える際の材料としてまとめてみました。
この後については、技術選定をしつつ、ソースコード管理、タスク管理などどうしようかなどを考えていく形になるかと思います。