アプリ開発で必要な知識とは?プログラミング以外の知識も解説
こんにちは、株式会社Pentagonの山本です。アプリを10年以上開発しています。
今回の記事では、アプリ開発エンジニアに必要な知識について解説したいと思います。これからアプリ開発エンジニアを目指す方、現在アプリエンジニアの方でスキルアップしたい方の参考になればと思います。
この記事を読むことで、アプリ開発で必要な知識がわかり、自分に不足している知識が何かわかります。
【初級】主にプログラミングスキル
当然ですが、アプリ開発をする上でプログラミングスキルは必須となってきます。まずはフロントエンドかバックエンドのどちらかに絞って、プログラミングスキルを身につけるのが重要です。余力があれば、フロントエンドとバックエンドの両方を学習しておくとアプリ開発の全体像が理解できます。
基本的な用語の把握
特によく使う用語についてはこちら。他にもたくさんありますが、このあたりは少なくとも理解しておきたいところです。
- クラス
- インスタンス
- コンストラクタ
- 変数・定数
- 関数・メソッド
- 引数
- 遷移
- 型・オプショナル型
- API
- SQL
- git, clone, pull, push, commit, merge
フロントエンドの開発知識
フロントエンドとは、主にアプリの見た目部分を開発することを意味します。作りたいアプリによって学ぶべきプログラミング言語と必要なフレームワークが異なります。
iOSアプリ | Objective-C / Swift iPhone・iOSのアプリを開発する方法とは?初心者向けに解説 |
Androidアプリ | Java / Kotlin Androidアプリの作成におすすめの開発言語とは? |
iOS・Androidアプリ両方 | React Naitve / Flutter Flutterとは?Flutterの特徴・メリット・デメリットを専門家が解説 |
Webサイト | HTML, CSS, JavaScript |
Webアプリ | HTML, CSS, JavaScript, Ruby / Python / PHP |
すべてをマスターする必要はありませんが、少なくとも1つは習得する必要があります。
ちなみに、スマホアプリを開発する場合、Flutterをおすすめしています。iOS・Androidアプリを両方作成するでき、安定した開発環境でアプリを制作することができます。詳しくはこちらの記事をご覧ください。» Flutterとは?Flutterの特徴・メリット・デメリットを専門家が解説
バックエンドの開発知識
バックエンドとは、主にアプリのデータや通信を制御する目に見えない部分を指します。どのようなアプリを開発するのかによって必要な知識が変わってきますが、少なくとも1つはマスターしておきましょう。
Ruby on Rails | Ruby言語で開発されたWebアプリケーションフレームワークです。簡潔で読みやすいコードを書くことができ、迅速な開発を可能にします。MVC(Model-View-Controller)アーキテクチャに基づいており、効率的な開発が特徴です。 Rubyでアプリ開発はできる?Rubyで出来ることを解説 |
Node.js | JavaScriptでサーバーサイドのアプリケーションを開発するためのランタイム環境です。Webサーバーの構築やAPIの開発に広く使用されています。 |
Python | 汎用プログラミング言語であり、シンプルで読みやすい構文が特徴です。Web開発、データ分析、機械学習など、さまざまな領域で利用されています。DjangoやFlaskなどのフレームワークを使うことで、Webアプリケーションの開発が容易になります。 |
Firebase | サーバーの構築など不要で、比較的簡単に通信部分を開発することができます。複雑な検索などが必要なアプリ開発には向いていません。 |
Supabase | サーバーの構築など不要で、簡単に通信を制御することができます。データを取得するためにSQLの知識が必要です。» Supabaseとは? |
スマホアプリを開発したい場合は、FirebaseやSupabaseを採用すると学習コストを抑えることができます。
チーム開発の知識
GitHubの使い方
Gitは、プログラムや文書の変更を記録するツールです。例えば、プログラムを書いているときに、最初のバージョンから後のバージョンに修正を加えたい場合、Gitを使えばどのような変更を行ったかを記録し、いつでも過去の状態に戻ることができます。また、複数の人が同じファイルを同時に編集しても、Gitを使えばそれらの変更を管理できます。つまり、何が変更されたかを追跡し、必要に応じて以前の状態に戻すことができます。»【プログラミング超入門】GitHubの使い方|初心者向けにアカウント登録から解説!
リーダブルコード
チームで開発する場合、チームメンバーが読みやすく管理しやすいコードを書く必要があります。読みやすくわかりやすいコードを書くことを意識しましょう。詳しく勉強したい方は、この本がおすすめです。
【中級】設計・データ通信に関する知識
アプリの設計は、アプリ全体の品質に影響を及ぼす重要な部分となります。プログラミング言語をある程度マスターしたあとは、どのようにアプリやデータを設計すると良いアプリを開発することができるか、学習していきましょう。逆に、アンチパターン(ダメな例)を学ぶことで、実際の開発に活かすことができます。
データベースの知識
データベースには様々な種類がありますが、一般的にはリレーショナルデータベース(RDBMS)やNoSQLデータベースがあります。
データベースの基本的な概念や必要な知識には以下のようなものがあります:
- リレーショナルデータベース(RDBMS):
リレーショナルデータベースは、表形式のデータ(テーブル)を使用し、テーブル間の関係を定義することでデータを整理します。代表的なRDBMSとしてはMySQLやPostgreSQLがあります。 - NoSQLデータベース:
NoSQLデータベースは、リレーショナルデータベースとは異なるデータモデルを使用し、柔軟なデータの格納や処理を可能にします。ドキュメント型、キー・バリュー型、カラムファミリー型などの異なるデータモデルがあります。代表的なNoSQLデータベースとしてはMongoDBやRedisがあります。 - データベース設計:
データベースを効果的に利用するためには、適切なデータベース設計が重要です。テーブルの設計やインデックスの作成など、データの正確性やアクセスの効率性を考慮した設計が必要です。データベースの設計はアプリの品質に大きな影響を与えるため、しっかりと学習しましょう。 - クエリ言語:
データベースから情報を取得するためには、クエリ言語を使用します。SQL(Structured Query Language)はリレーショナルデータベースで広く使用されるクエリ言語ですが、NoSQLデータベースには独自のクエリ言語があります。 - トランザクション管理: データベースでは、複数の操作をまとめて実行するトランザクション管理が重要です。トランザクションの完全性や一貫性を確保することが目的です。
SQLを学びたい方はこちらの本が簡単に解説されていておすすめです!
API設計の知識
アプリ開発におけて、APIは、主にフロントエンドとバックエンドでデータをやりとりするために利用されます。APIの開発は主に、バックエンドの領域になります。フロントエンドはこのAPIを使ってデータを送受信します。
良いAPIはフロントエンドでのデータ取得を容易にし、フロントエンド側に変更があってもAPIの修正を最小限に抑えることができます。APIの設計のアンチパターンをしっかりと理解しておく必要があります。
セキュリティ
外部に漏れてはいけない情報をアプリに保存しない、といった基本的な方針から、気をつけるべきポイントがたくさんあります。以下は、スマホアプリの開発で気をつけるべき代表的な項目です。
- 外部に漏れてはいけない情報をアプリに保存しない
- 秘密鍵などアプリのソースに埋め込まない
- クレジットカード情報は自前のサーバー等に保存しない
- 流出してはいけない個人情報は暗号化して保存する
- 認証トークンはセキュアな領域(キーチェーンなど)に保存する
アプリのアーキテクチャ設計
特にフロントエンドの開発では、様々なアプリの設計方法があります。適切なアプリの設計は、開発効率を上げたり、バグを未然に防ぐことができます。
アーキテクチャ | 説明 |
---|---|
MVC | モデル(データ)、ビュー(ユーザーインターフェース)、コントローラ(ビジネスロジック)の3つの要素にアプリケーションを分割するアーキテクチャ。 |
MVP | プレゼンターがコントローラの代わりに使われるMVCの派生形。ビューはユーザーインターフェースを表示し、モデルはデータを保持し、プレゼンターはビューとモデルの間の仲介者として機能する。 |
MVVM | ビューモデル(ViewModel)がプレゼンターの役割を果たすアーキテクチャ。ビューモデルはビューとモデルの間でデータバインディングを管理し、ビューの状態とモデルの状態を同期する。 |
Clean Architecture | ユースケース、エンティティ、インターフェースアダプターの3つの主要なコンポーネントで構成されるアーキテクチャ。ビジネスルールやアプリケーションの核心部分を分離し、柔軟性とテスト容易性を提供する。 |
Microservices Architecture | アプリケーションを小さなサービス(マイクロサービス)に分割し、それぞれが独立して展開・スケーリングできるようにするアーキテクチャ。各マイクロサービスは独自のデータベースを持ち、APIを介して通信する。 |
テスト手法
アプリのテストには様々なテスト手法があります。テストはアプリの品質を維持するために重要なものになります。テスト手法を理解し、実際の開発プロジェクトに導入していきましょう。
単体テスト | プログラミング単体でテストすること。 |
結合テスト | 機能を組み合わせたときにバグがないかテストすること。 |
シナリオテスト | ユーザーの行動ストーリーを考え、そのストーリーに沿って実際に動作確認をしていく方法。 |
ランダムテスト | その名の通り、ランダムにアプリを触って不具合が起きないかなど確認していく方法。 |
受け入れテスト | アプリ開発の依頼者が、不具合がないか検証すること。 |
第三者によるテストを実施することは、バグを見つける上で有効的です。開発チームの中では、先入観を持ってテストを実施してしまうため、バグに気が付かないことがあります。アプリの仕様も何も知らない人にデバックしてもらうことで、見つかるバグや発見があります。
アプリのリリースと審査に関する知識
スマホアプリを開発して公開する場合、AppleやGoogleによる審査があります。どういったアプリだと審査に落ちるか開発前に把握しておくことは非常に重要です。「ここで審査に落ちそうだから、この機能はやめましょう。代わりにこういった機能を開発するのはどうでしょう?」といった判断ができると完璧です。App Store Reviewガイドラインにアプリの公開に関するルールが記載されているので、しっかりと読み込んで把握しておきましょう。
【上級】プロジェクトマネージメント
アプリ開発は長期間に及ぶプロジェクトです。基本的にアプリ開発は、様々な役割の人が関わり複数名で開発をしてきます。この開発を前に進めるスキルとして、プロジェクトマネージメントに関する知識が必要となります。
プロジェクトマネージャーの役割は、主に開発スケジュール、アプリの品質管理、予算管理などが挙げられます。プロジェクトのQCD (品質・コスト・納期)は、それぞれが影響を及ぼし合います。例えば、スケジュールが遅れることで余計なコストが発生することもあります。プロジェクトを成功させるために、プロジェクト全体を見る視野の広さと適切なリスク管理が必要となります。
スケジュール管理に関する知識
ガントチャート
スケジュール遅延しないための工夫
適切なバッファを設けたり、多少の遅延が発生しても挽回できるスケジュールを組みます。
品質管理に関する知識
リスク管理
アプリの開発プロジェクトには、様々なリスクがあります。開発したことない機能、複雑な機能、お金に関する機能、アプリの審査で落ちるリスク。こうしたリスクは、スケジュールの遅延や品質の低下を招く大きな要因になります。プロジェクトに潜むリスクを洗い出し、先手を打って潰していくスキルが求められます。
品質を担保するための工夫
- プロジェクト開始前に、どこに技術的なリスクがあるか洗い出し対策を立て実行する
- 毎週プロジェクトのリスクについて考える
- 開発チームで話やすい雰囲気をつくる
- 前もってテストの計画を立てる
- テスト期間を十分に取る
予算管理に関する知識
アプリの開発をする場合、どれくらいの工数やコストが発生するのか把握することは非常に重要です。以前当社が調査した結果では、300万円〜2000万円程度がアプリ開発にかかる費用になります。そのほとんどは人件費になります。どんな開発があり、どれだけエンジニア・デザイナーを稼働させる必要があるのか算出するスキルが必要となります。
開発工数の見積もり
開発工数を見積もる方法はたくさんありますが、当社ではストーリーポイントを使った見積もり手法を採用しています。最も簡単な機能をポイント1として、それと比較した際の開発の重たさを考えていきます。ポイントはフィボナッチ数列から選択できるようになっており、1、2,3,5,8,13,21... といった数値で決めていきます。
この際は、21を超えるポイントをつけた場合は、それだけリスクが高い、不確定要素が含まれていることになりますので、タスクをブレイクダウンして、どんな開発が必要なのか分けていきます。
要件定義
要件定義とは、ざっくり説明すると「アプリを作りたい人の注文を明確にすること」です。アプリを作りたいと一言で言っても、どんなアプリを作りたいのか、画面数はどれくらいあるのか、どんな機能を有しているのか、など決めるべきことがたくさんあります。
なぜ要件定義が重要かといえば、要件定義をしっかりとしていないとトラブルになるからです。
依頼者:「こんなアプリを作ってほしい」
開発者:「できました」
依頼者:「思っていたものと違う...」
アプリ開発には300万円〜2000万円程度かかりますから、こうしたトラブルを避けるためにも、要件定義に関する知識は重要です。
リーダーシップ&チーム構築
チームをまとめる能力やタスクを適切に割り振る能力が必要となってきます。
ボールが宙に浮く現象には、特に注意が必要です。
プロジェクトを進めていくと、開発チームの中で認識の齟齬が発生します。
リーダー:「この機能の開発できていませんがどうなってますか?」
Aさん:「Bさんが対応してくれると思っていました。」
Bさん:「ここまで作業すれば良いと思っていました。」
このようにチームにおいてリーダーシップが発揮されていないと、こうしたやるべきタスクを誰も持っていない状況が生まれます。これはプロジェクトの遅延やバグの発生の原因となります。
チームにおけるリーダーシップは、スケジュール管理・品質管理に大きな影響を与えます。定例会議を開く、朝会を開くなどして、良いチーム構築を心がける必要があります。
アプリ開発には高レベルのスキルが求められる
アプリ開発に必要な知識やスキルについてざっと説明しました。単に作るだけならプログラミングが出来ればOKですが、大規模なアプリや商用のアプリを開発する場合は、複数名のチームで開発することになります。また数千万円規模の予算が動くので、そのプロジェクトを進めるには、高いレベルのスキルが求められます。
当社の社員は、全員プロジェクトマネージャーになることを前提に採用をしています。個人差はありますが、3〜6ヶ月程度でプレイングマネージャーという形で活動していきます。制作もしつつ、プロジェクト管理も行っていく。
もし興味がある方は気軽にお問い合わせください。» Pentagon, Inc. 採用・求人情報