エンジニアとしての強み
各カテゴリの詳細を確認できます
DevOps
継続的インテグレーション/デリバリーのパイプライン構築と自動化について紹介します。
CI/CDの説明
CI (継続的インテグレーション)
開発者それぞれが実行したコード変更を頻繁に統合し、全体のコードの品質を継続的に保つプロセス
CD (継続的デリバリー)
開発が完了したコードを本番環境にいつでもリリースできる状態に保つプロセス
基本的な運用方法
main(trunk)ブランチを常にリリース可能な(かつ、リリース可能であることが保証された変更を統合された)状態に保つ
ソース変更を行う場合は開発用ブランチを作成し(必要であればさらなる分枝を作成し)、そのブランチに対してソース変更単位ごとにコミット行うことでリリース可能とは限らないコード変更を記録することを可能とする
ブランチ(例えば開発用ブランチ)におけるソース変更(コミット)を別のブランチ(例えばmain)にマージすることで、変更を統合する。この際、マージされる先のブランチに相当する責任者による承認または、自動化された承認プロセスにより、統合後のソースの品質を担保する
複数の開発ブランチにおけるソース変更を上手く統合するためには、実際にtrunkにマージする際、矛盾を減らす必要がある。このため、適宜rebaseを行うことでmainブランチにマージされた変更を他の開発ブランチに反映する。
実際のコマンド例
# 新しい機能ブランチを作成
git checkout -b feature/new-feature
# 変更をコミット
git add .
git commit -m "Add new feature"
# mainブランチの最新変更を取り込む
git checkout main
git pull
git checkout feature/new-feature
git rebase main
# Pull Requestを作成してレビューを依頼
# (GitHub上での操作)
# レビュー後、mainにマージ
git checkout main
git merge feature/new-feature
git push
ソフトウェア開発におけるコンテナの利用は、アプリの実行環境にCI/CDを取り入れる上で広く用いられる手法の一つである。OSをその管理対象に含まない為、その他の方法と比較して特に軽量であるという利点を有する
Dockerはそのようなコンテナツールの一つである。
基本的な運用方法
Dockerfileにアプリの前提となる実行環境(例node.js)とそのバージョン、環境変数、起動時に実行するコマンドをコードにより指定することでソースコードと共に実行環境を保守対象とする
Dockerfileやcompose.yamlを元にコンテナを起動し、アプリ実行環境を作成する
複数のアプリに共通されるような実行環境がある場合は、前提となる実行コードを含めて実行されたコンテナ環境をイメージとして生成、またDockerHub等を通じて共有し、これを前提としてDockerfileを作成し、コンテナを起動できる
コンテナの終了とともに消失してほしくないデータがある場合や、ソースコード等を外部からエディタなどを通じて編集し、反映したい場合等はマウントを行うことでコンテナ外のフォルダをコンテナ内のフォルダと対応付けることができる
実際のファイル例
# Dockerfile
FROM node:18-alpine # ベースイメージとしてNode.js 18のAlpineバージョンを使用(軽量)
WORKDIR /app # コンテナ内の作業ディレクトリを/appに設定
COPY package*.json ./ # package.jsonとpackage-lock.jsonをコンテナにコピー
RUN npm install # 依存関係をインストール
COPY . . # ソースコード全体をコンテナにコピー
EXPOSE 3000 # コンテナがリッスンするポートを指定
CMD ["npm", "start"] # コンテナ起動時に実行するコマンド
# docker-compose.yml
version: '3' # Docker Composeのバージョンを指定
services: # サービス(コンテナ)の定義を開始
app: # アプリケーションサービスの名前
build: . # カレントディレクトリのDockerfileを使用してビルド
ports: # ポートマッピングの設定
- "3000:3000" # ホストの3000ポートをコンテナの3000ポートに接続
volumes: # ボリュームマウントの設定
- ./src:/app/src # ホストのsrcディレクトリをコンテナの/app/srcにマウント(ライブリロード用)
environment: # 環境変数の設定
- NODE_ENV=development # Node.jsの環境を開発モードに設定