無料ツールで構築する、実践的なDevOpsパイプライン構築術:エンゲージメント最大化ガイド
DevOpsは高コスト?そんな心配は不要です。無料ツールだけで、プロレベルのパイプラインを構築できます。本記事では、コストをかけずに、より洗練されたDevOps環境を構築する方法をステップごとに解説します。
無料ツールで構築する、実践的なDevOpsパイプライン構築術:エンゲージメント最大化ガイド
DevOpsは高コスト?そんな心配は不要です。無料ツールだけで、プロレベルのパイプラインを構築できます。本記事では、コストをかけずに、より洗練されたDevOps環境を構築する方法をステップごとに解説します。
はじめに:無料でDevOpsは可能か?
DevOpsと聞くと、高価なツールやインフラが必須だと思われがちです。しかし、実際には自動化、一貫性、セキュリティ、可視化といったDevOpsの基本要素は、すべて無料ツールで実現可能です。
この記事では、費用をかけずに実践的なDevOpsパイプラインを構築する方法を解説します。CRUDアプリケーションを例に、構築プロセスを詳細にご紹介します。
前提条件
- Gitの基本知識(リポジトリのクローン、ブランチ作成、コミット、プルリクエストなど)
- コマンドライン操作の基礎知識(Docker、Terraform、Kubernetesなど)
- CI/CDの基本的な理解(継続的インテグレーションとデリバリーの概念)
必要なアカウント
- GitHubアカウント
- クラウドプロバイダー(AWS Free Tier推奨、Oracle Cloud Free Tier、またはGoogle Cloud/Azureの無料クレジット)
- Terraform Cloud(無料プラン)
- Grafana Cloud(無料プラン)
- UptimeRobot(無料プラン)
インストールしておくと便利なツール
- VS Codeなどのコードエディタ
- PostmanなどのAPIテストツール
- YAMLとDockerfileの知識
ソース管理とプロジェクト構成のセットアップ
1. 整理されたリポジトリを作成
パイプラインの基盤となるのは、整理されたリポジトリです。
- frontend、backend、infrastructureの各フォルダを作成
- ワークフロー設定用の.githubフォルダを作成
- 明確な命名規則とREADME.mdを作成
2. 無料機能でブランチ保護
GitHub Proの高度なルールは不要です。
- マージ前にプルリクエストを必須に
- ステータスチェックを有効化して問題のあるコードのマージを防止
- リニアな履歴を強制してバージョン管理をより明確に
3. PRテンプレートと自動チェック
レビューをスムーズにしましょう。
- PULL_REQUEST_TEMPLATE.mdを作成して貢献者をガイド
- GitHub Actions(後述)で、lint、テスト、フォーマットチェックを自動化
4. GitHub Issueテンプレートとプロジェクトボード
個人開発者にもIssue追跡は役立ちます。
- バグや機能に関するIssueテンプレートを追加
- GitHub Projectsで、カンバンボードを使って作業を管理
5. 高度なテクニック:Pre-commitフックでカスタム検証スクリプトを設定
GitHubにコードをプッシュする前に、ローカルで問題を検出できます。
- Huskyなどのツールで、コミット前にコードをlint
- テストやフォーマッタを自動的に実行
- 誤ってシークレットがコミットされるのを防止
# Huskyを初期化し、必要な依存関係をインストール
npx husky-init && npm install
npx husky add .husky/pre-commit "npm test"
6. サンプルCRUDアプリの構成
今回は、ユーザー管理(CRUD)機能を持つシンプルなアプリを例に説明します。
以下は、最低限のコードサンプルです。
GitHub ActionsによるCIパイプライン構築
1. 最初のGitHub Actionsワークフローを設定
コードをプッシュまたはプルリクエストを開くたびに、ビルド、テスト、lintを自動的に実行する基本的なワークフローを作成します。これにより、アプリの状態を常に健全に保ち、問題を早期に発見できます。
.github/workflows/ci.yml
ファイルを作成し、以下を追加します。
name: CI Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ runner.os}}-node-${{ hashFiles('**/package-lock.json')}}
- run: npm ci
- run: npm test
- run: npm run lint
2. マルチステージビルドパイプラインの作成
CIパイプラインを、install、test、lintなどの明確なステージに分割します。
jobs:
install:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm ci
test:
needs: install
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm test
lint:
needs: install
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm run lint
3. マトリックスビルドによるクロス環境テスト
異なるNode.jsバージョンやデータベースでテストを実行します。
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [ 14.x, 16.x, 18.x ]
database: [ postgres, mysql ]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm test
4. 依存関係のキャッシュによるワークフローの最適化
依存関係をキャッシュして、ビルド時間を短縮します。
- name: Cache node modules
uses: actions/cache@v3
with:
path: |
~/.npm
node_modules
key: ${{ runner.os}}-node-${{ hashFiles('**/package-lock.json')}}
restore-keys: |
${{ runner.os}}-node-
Docker Buildの最適化
CIでDockerイメージをビルドする際、ビルド時間がボトルネックになることがあります。マルチステージビルド、レイヤーキャッシュ、BuildKitを有効活用しましょう。
1. 基本的なDockerfileの作成
まずは、アプリの依存関係をインストールして実行するシンプルなDockerfileを作成します。
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN npm ci
CMD [ "npm", "start" ]
2. マルチステージDockerビルド
ビルドプロセスとプロダクションイメージを分離します。
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/package*.json ./
RUN npm ci --production
CMD [ "node", "dist/server.js" ]
3. レイヤーキャッシュの最適化
Dockerfileの命令順序を最適化します。
COPY package*.json ./
RUN npm ci
COPY . .
結論
この記事では、無料ツールを使って、実践的かつ効率的なDevOpsパイプラインを構築する方法を解説しました。これらのテクニックを活用することで、コストを抑えながら、より洗練されたDevOps環境を構築できます。