【ITニュース解説】🚀 Deploying a Gallery App with Docker, Jenkins, and EC2..
2025年09月24日に「Dev.to」が公開したITニュース「🚀 Deploying a Gallery App with Docker, Jenkins, and EC2..」について初心者にもわかりやすく解説しています。
ITニュース概要
ReactとFirebase製ギャラリーアプリを、Dockerでコンテナ化し、Jenkins CI/CDで自動的にビルド、セキュリティスキャン、AWS EC2へデプロイする実践手順だ。DevOpsとクラウドデプロイの基礎を学び、アプリ開発から公開までの一連の流れを理解できる。
ITニュース解説
システムエンジニアを目指す初心者が、Webアプリケーションを開発し、それをインターネット上で公開する一連の流れを理解することは非常に重要だ。この記事では、ReactとFirebaseを使って開発されたギャラリーアプリを題材に、最新の技術と手法を使ってアプリを構築し、安全かつ効率的にインターネットに公開するまでの道のりを解説する。Docker、Jenkins、AWS EC2といったツールがどのように連携し、開発から運用までの自動化(DevOps)を実現するのか、その具体的なステップを順を追って見ていこう。
まず、プロジェクトの核となるギャラリーアプリについて説明する。このアプリは、ユーザーが画像をアップロードしたりダウンロードしたり、安全にログイン・ログアウトして自分だけのギャラリーを管理できるシンプルなWebアプリケーションだ。フロントエンドにはReact、認証とデータ保存にはFirebase、デザインにはTailwindCSSを使用している。アプリ自体はシンプルだが、注目すべきはその公開方法にある。単にアプリを動かすだけでなく、開発したアプリをいかに迅速に、安全に、そして安定してユーザーに届けるか、そのための「デプロイ」というプロセスに焦点を当てる。
最初のステップは、アプリが自分の開発環境(ローカル環境)で正しく動作することを確認することだ。これはどんな開発でも基本中の基本だ。まず、アプリのソースコードが格納されているリポジトリを自分のパソコンにコピーする(クローンする)。次に、アプリを動かすために必要な「依存関係」と呼ばれる追加のプログラムをインストールする。そして、開発用のサーバーを起動すれば、Webブラウザで指定されたURL(通常はhttp://localhost:5173のようなアドレス)にアクセスすることで、アプリが動作していることを確認できる。もし本番環境で使うための最適化されたファイルを生成したい場合は、ビルドコマンドを実行することで、配布に適した「dist/」フォルダが作成される。
次に、このアプリを「Docker」を使ってコンテナ化する。Dockerを使う目的は、アプリが動作する環境の差異による問題を解消し、どこでも同じようにアプリを実行できるようにすることだ。アプリケーションとその実行に必要なすべてのもの(コード、ライブラリ、設定など)を一つにまとめた「コンテナ」という独立した環境を作成する。このプロセスは「Dockerfile」という設定ファイルを使って定義する。このDockerfileは、マルチステージビルドという手法を採用している。これは、まずNode.js環境でReactアプリをビルドし、その結果生成された静的ファイルだけを、次にNginxというWebサーバーの軽量なコンテナにコピーするという二段階のプロセスだ。これにより、最終的なコンテナイメージが不要なファイルを含まず、非常に小さく効率的になる。Dockerfileを元にDockerイメージをビルドし、そのイメージからDockerコンテナを実行することで、ローカルPCの指定されたポート(例:ポート80)でアプリにアクセスできるようになる。
手動でのビルドやコンテナ実行はテスト段階では良いが、実際のプロジェクトでは「Jenkins」のようなCI/CDツールを使ってこれらの作業を自動化する。CI/CDとは、継続的インテグレーション(Continuous Integration)と継続的デリバリー(Continuous Delivery)の略で、コードの変更が加えられるたびに自動でビルド、テスト、そしてデプロイを行う一連の流れを指す。Jenkinsは、この一連のパイプラインを構築し、自動実行するサーバーだ。このプロジェクトでは、JenkinsがAWSの仮想サーバー(EC2)上で動作し、以下のタスクを自動で行うように設定されている。まず、アプリのソースコードをリポジトリから取得し、Dockerイメージをビルドする。次に、そのイメージをセキュリティスキャンし、問題がなければDockerHubという共有レジストリにプッシュする。最後に、AWS EC2上にこのイメージを使ってアプリケーションをデプロイする。これらの自動化された手順は、リポジトリに含まれる「Jenkinsfile」という設定ファイルによって定義される。
デプロイのプロセスにおいて、セキュリティは非常に重要だ。そのため、Dockerイメージを共有レジストリにプッシュする前に、「Trivy」というツールを使ってセキュリティスキャンを実施する。Trivyは、ベースとなるOSのイメージや、アプリが利用しているライブラリなどに既知の脆弱性がないかを詳細にチェックする。これにより、潜在的なセキュリティリスクを早期に発見し、修正することが可能になる。
セキュリティスキャンが完了し、イメージに問題がないことが確認されれば、そのDockerイメージは「DockerHub」にプッシュされる。DockerHubは、Dockerイメージを保管・共有するためのオンラインレジストリだ。ここにイメージをプッシュすることで、世界中のどこからでもそのイメージをダウンロードして利用できるようになる。Jenkinsパイプラインが成功すればこのプッシュも自動的に行われるが、必要であれば手動でイメージにタグ付けし、DockerHubへプッシュすることも可能だ。
そして最終ステップは、AWSの「EC2」というサービスにアプリをデプロイすることだ。EC2は、Amazon Web Servicesが提供する、インターネット上で利用できる仮想サーバーサービスを指す。Jenkinsパイプラインが最後まで成功すれば、このデプロイも自動で完了する。具体的には、EC2インスタンス上で先ほどDockerHubにプッシュされたイメージをダウンロードし、そのイメージからDockerコンテナを実行する。これにより、ギャラリーアプリはインターネット上に公開され、EC2インスタンスの公開IPアドレスを通じて誰でもアクセスできるようになる。
まとめると、このプロジェクトを通じて、システムエンジニアがWebアプリケーションを開発し、運用する上での重要な一連の流れを体験できる。まず、アプリがローカル環境で動くことを確認し、次にDockerを使ってアプリを環境に依存しない「コンテナ」としてパッケージ化する。その後、JenkinsによるCI/CDパイプラインを構築し、コードの変更からデプロイまでを自動化する。この自動化プロセスには、セキュリティスキャンやDockerHubへのイメージプッシュも含まれる。そして最終的に、AWS EC2というクラウド上の仮想サーバーにアプリケーションをデプロイし、インターネットに公開する。この一連のプロセスは、DevOpsの考え方を具体的に実践するものであり、アプリを迅速、安全、そして信頼性の高い形でユーザーに届けるための現代的なアプローチを学ぶ良い機会となるだろう。