【ITニュース解説】The Cloud Resume Challenge: My GCP Implementation
2025年09月25日に「Dev.to」が公開したITニュース「The Cloud Resume Challenge: My GCP Implementation」について初心者にもわかりやすく解説しています。
ITニュース概要
Google Cloudで履歴書サイトを作る「Cloud Resume Challenge」に挑戦し、GCSとCloudflareでホスティング。Cloud RunとFirestoreで訪問者APIを作成した。Terraformでインフラをコード化し、GitHub Actionsで自動デプロイを実現。IaC、CI/CD、テスト、API連携など、クラウド開発の全体像と実践スキルを学んだ。
ITニュース解説
Cloud Resume Challengeとは、クラウドインフラ、継続的インテグレーション・継続的デリバリー(CI/CD)、API、そして基本的なフロントエンド開発といった、現代のシステム開発に不可欠な要素を総合的に学ぶための実践的なプロジェクトである。この挑戦の目標は、Google Cloud Platform(GCP)上に完全にクラウドネイティブな履歴書サイトを構築することだった。具体的には、サイトのすべてのインフラストラクチャをコードとして管理し、デプロイプロセスを完全に自動化することを目指した。
構築した履歴書サイトは、主に四つの要素で構成されている。一つ目は「静的履歴書ホスティング」だ。これは履歴書の内容であるHTMLやCSSといったファイルを、Google Cloud Storage (GCS) というGCPのストレージサービスに保存し、ウェブサイトとして公開する方法だ。通常、ウェブサイトを公開する際にはロードバランサーのようなネットワーク機器が必要になることがあるが、これらは設定が複雑で運用コストもかかる場合が多い。そこで、今回はCloudflareという外部サービスを利用した。Cloudflareは無料で利用できるプランがあり、DNS(ドメイン名とIPアドレスの変換)、CDN(コンテンツを高速に配信するネットワーク)、SSL(ウェブサイトの暗号化通信)といった機能を提供してくれる。この構成によって、サイトは世界中にコンテンツをキャッシュできるため高速に表示され、HTTPSによるセキュリティも確保でき、しかも余計なインフラ費用をかけずにプロフェッショナルなウェブサイトとして公開できた。
二つ目は「訪問者カウンターAPI」である。これはサイトが読み込まれるたびに訪問者数をカウントし、その数を表示するための機能だ。この機能は、Pythonで書かれたFlaskというフレームワークを使った小さなAPI(Application Programming Interface)として実装された。このAPIはGCPのCloud Runというサービス上で動作する。Cloud Runは、コンテナ化されたアプリケーションをサーバーレスで実行できるサービスで、必要な時だけ起動し、使った分だけ料金が発生するため効率的だ。APIがカウントした訪問者数は、FirestoreというGCPのNoSQLデータベースに保存される。ページが読み込まれるたびにAPIがデータベースのカウンターを一つ増やし、その更新された値をウェブサイトに返す仕組みだ。
三つ目は「Infrastructure as Code (IaC)」の導入だ。これは、サーバーやネットワーク、データベースといったインフラストラクチャの設定を、手作業で行う代わりにコードで記述し、管理する手法である。このプロジェクトではTerraformというツールを使って、Cloud Runサービスのデプロイ、ユーザーやサービスに与える権限(IAMパーミッション)の設定、APIの有効化など、全てのインフラ設定をコードとして記述した。IaCを導入することで、インフラの構築プロセスが自動化され、何度でも同じ環境を再現できるようになる。また、コードとして管理されるため、設定の変更履歴を追跡しやすく、チームでの共同作業も効率的になる。
四つ目は「CI/CD自動化」だ。CI/CDとは継続的インテグレーション(Continuous Integration)と継続的デリバリー(Continuous Delivery)の略で、ソフトウェアの開発からテスト、デプロイまでの一連のプロセスを自動化することを目指す考え方と技術である。このプロジェクトでは、GitHub ActionsとCloud BuildというGCPのCI/CDサービスを組み合わせて利用した。これにより、コードの変更をGitリポジトリ(GitHub)にプッシュするだけで、インフラの更新やアプリケーションの再デプロイが自動的に行われるように設定した。手動での作業が不要になるため、デプロイにかかる時間やヒューマンエラーのリスクを大幅に削減できる。
これらの技術を実際に使いこなす中で、多くの学びと課題に直面した。Infrastructure as Codeは非常に強力なツールだが、初めて使う人にとっては習得に時間がかかることも実感した。Terraformの記述ミス、例えばリソース名や権限設定のタイプミス一つで、エラーが発生し、解決までに長い試行錯誤が必要になることがあった。エラーメッセージを読み解き、変更を適用する「apply」や計画を立てる「plan」、変更を元に戻す「roll back」といったコマンドの適切な使い方を学ぶ必要があった。
CI/CDパイプラインの構築も、深い学びをもたらした。単に動作させるだけでなく、セキュリティや機密情報の管理、そして本番環境にコードをデプロイする前の適切なテストの重要性を痛感した。特に、GitHub ActionsがGCPに安全に認証を行うための「Workload Identity Federation」の設定には苦労した。これは、GitHub上に保存された長い認証キーを使わずに、一時的な認証情報を使って安全にアクセスするための仕組みだが、設定の微調整に何度も失敗し、公式ドキュメントを徹底的に読み込むことでようやく解決できた。この小さな成功が、大きな自信につながった。
また、テストとコード品質の重要性も再認識した。Cloud Runで動作するAPIのために自動テストを記述することで、些細なミスがコードに紛れ込むのを防ぐことができた。自動テストは、コードの品質を高め、訪問者カウンターが常に正しく機能することを保証するだけでなく、新しいコードをプッシュするたびに「何か壊れていないか」という心配から解放される安心感を与えてくれた。
訪問者カウンターAPIのデプロイでは、CORS(Cross-Origin Resource Sharing)という問題に直面した。これは、フロントエンド(Cloudflareでホストされているウェブサイト)とバックエンド(Cloud Runで動作するAPI)が異なるドメイン(オリジン)にある場合に発生する、セキュリティ上の制約である。APIを呼び出そうとするとエラーが発生し、これを解決するためにFlask-CORSというライブラリを利用し、適切なオリジン、ヘッダー、メソッドを設定する方法を学んだ。この経験から、ログの確認がいかに重要であるかを痛感した。Cloud Runのログ、Firestoreのエラーメッセージ、GitHub Actionsの出力など、様々なログを注意深く見ることで、問題の根本原因を特定し、解決策を見つける速度が格段に上がった。
このプロジェクトを通じて得た最大の教訓は「エンドツーエンド思考」の重要性である。これは、単にPythonコードを書いたり、仮想マシンをデプロイしたりするだけではなく、システム全体を俯瞰して考えることだ。例えば、「フロントエンドとバックエンドはどのように連携するのか」「バックエンドはデータベースと安全に通信できるのか」「デプロイは繰り返し可能で安全な方法で行われるのか」「機密情報を手動で管理する手間をどうなくすか」といった問いに答えることを通じて、DevOpsやクラウドエンジニアリングがどのように全体を結びつけ、システムを構築しているのかを深く理解できた。
Cloud Resume Challengeは決して簡単な挑戦ではなかったが、それがまさにこのプロジェクトの醍醐味だった。この挑戦は、クラウドインフラ、CI/CDパイプライン、セキュリティ、そして自動化といった、実用的なスキルを強制的に身につけさせてくれた。何よりも、複雑なクラウドプロジェクトであっても、それを小さな管理可能なステップに分解し、一つずつ解決していく自信を与えてくれた。もしあなたがクラウド技術やDevOpsの分野で成長したいと考えているなら、この挑戦にぜひ取り組むことを強く推奨する。それは単なる技術スキルのテストに留まらず、ソフトウェアの構築とデプロイに対する考え方そのものを変えるきっかけとなるだろう。