開発プロジェクトのフェーズ
プロジェクトは以下の主要フェーズを経て進行する:
- 要件定義:開発マネージャーがタスクを分割し、チームメンバーのスキルと人数を考慮してアサインする。
- 開発:各メンバーが担当モジュールを開発。統合前に全開発メンバーが協力して結合テスト(インタグレーションテスト)を実施。
- テスト:品質保証チームが機能検証を実施。
- デプロイ:運用チームが本番環境にリリース。
- 運用・保守:システムの監視と継続的な改善。
開発環境の種類と役割
個人開発環境
- デバイス:個人所有のノートPCまたは会社支給PC。
- 特徴:環境構成(ソフトウェアバージョン、ツールチェーンなど)は開発者ごとに異なる可能性がある。
- 作業内容:個別モジュールや機能の実装。
- 責任者:開発者本人。
- ゴール:担当タスクの完了とモジュール開発の終了。
共通開発環境(内部サーバ)
- インフラ:社内サーバ。
- 特徴:本番環境と同一構成。
- 作業内容:モジュール間の結合テスト。
- 参加者:全開発チーム。
- ゴール:全機能の統合と開発完了確認。
テスト環境
- インフラ:社内サーバ(本番同等構成)。
- 作業内容:バグ検出と機能検証(いわゆる「つっこみ」)。
- 担当:QAチーム。
- ゴール:仕様通りの動作保証。
プレ本番環境(ステージング)
- インフラ:本番サーバ群の一部(本番同等構成)。
- 作業内容:
- 決済機能の検証
- 負荷試験
- セキュリティ対策の最終確認
- 担当:運用(SRE/DevOps)チーム。
- ゴール:本番投入前の最終品質保証。
本番環境
- インフラ:公開サーバ群(パブリックIPを持つクラウドまたはオンプレミス)。
- 作業内容:コードのデプロイとサービス公開。
- 担当:運用チーム。
- ゴール:ユーザーへの安定したサービス提供。
コードデプロイの実践
デプロイとは何か?
テストを通過し、品質が保証されたコードを、パブリックにアクセス可能なサーバ(例:AWS、Azure、Alibaba Cloud、Tencent Cloud)に配置し、Webサービスとして公開すること。
デプロイ手法
- 手動デプロイ:遅く、エラーが多く、セキュリティリスクが高い。
- スクリプトによる自動デプロイ:高速、再現性があり、安全。
デプロイフロー
ソースコードの取得
コードはバージョン管理システムから取得する:
- 集中型:Subversion (SVN)
- 分散型:Git
企業では、プライベートGitリポジトリ(例:GitLab)を社内またはクラウド上に構築することが一般的。アクセス権限はプロジェクトメンバーに限定され、ロールに応じて「開発」「管理」「閲覧」などの権限が付与される。コード変更はコミットハッシュ(バージョンID)で追跡される。
コードのパッケージ化
目的:
- 転送ファイル数の削減
- 転送データ量の圧縮
- ネットワーク転送効率の向上
代表的な形式:
- Windows:ZIP、RAR
- Linux:tar.gz、ZIP
コードの転送
ネットワーク接続ありの場合:
- Git(直接プル)
- FTP
- SCP
- 共有ディレクトリ経由のcp
- rsync
ネットワーク接続なしの場合:
- USBメモリや外付けHDDなどの物理メディア
SCPによる転送例
ローカルからリモートサーバへファイルを送信:
scp app_release.tar.gz user@192.168.56.12:/opt/deploy/
リモートサーバからローカルへファイルを取得:
scp user@192.168.56.12:/opt/deploy/app_release.tar.gz ./