はじめに
なぜシェルスクリプトがチーム開発の生産性を向上させるのか
シェルスクリプトは、複数のコマンドをまとめて実行できる強力なツールです。これをチーム開発に活用することで、以下のような効果が期待できます。
- 作業の標準化: 異なる開発者が同じ手順で作業を行えるようになります。
- 自動化: 繰り返しの多い作業を自動化し、人的ミスを減らします。
- 時間短縮: 手作業で行っていた時間を、より重要なタスクに充てられます。
- 知識の共有: スクリプトを通じて、暗黙知だった手順を形式知化できます。
本記事で紹介するスクリプトの目的と効果
本記事で紹介するシェルスクリプトは、チーム開発における様々な課題を解決し、開発者の生産性を向上させることを目的としています。具体的には、
- 環境構築: 新しいメンバーがすぐに開発に参加できる環境を整える。
- コード品質: チーム全体で一貫したコーディングスタイルを維持する。
- テスト: 効率的にテストを実行し、早期にバグを発見する。
- デプロイ: 安全かつ迅速にアプリケーションを本番環境にリリースする。
- 日常業務: よく使うコマンドを簡略化し、日々の作業をスムーズにする。
開発者全員が恩恵を受けるための共通スクリプトの重要性
特定の開発者だけが使うスクリプトではなく、チーム全員が共通のスクリプトを利用することで、その効果は最大化されます。共通スクリプトは、チームのベストプラクティスを体現し、新しいメンバーへの教育にも役立ちます。また、問題が発生した場合にも、全員が同じツールを使って原因を調査できるため、解決までの時間を短縮できます。
開発環境をワンコマンドで立ち上げる
Docker Composeを使った環境構築の自動化
Docker Composeは、複数のDockerコンテナを定義し、管理するためのツールです。プロジェクトに必要なWebサーバー、データベース、キャッシュサーバーなどを一つのdocker-compose.ymlファイルに記述し、docker-compose upコマンド一つでまとめて起動できます。
チームでこのファイルを共有し、環境構築手順をドキュメントに加えておくことで、新しいメンバーは迷うことなく開発環境を立ち上げることができます。
プロジェクトのセットアップを自動化するスクリプト(setup.sh)
docker-compose upだけでは完了しない初期設定(依存パッケージのインストール、環境変数の設定、データベースのマイグレーションなど)を自動化するsetup.shスクリプトを作成します。
setup.sh
bash
#!/bin/bash
Dockerコンテナが起動しているか確認
if ! docker ps --filter name=app -q | grep -q .; then
echo "Dockerコンテナを起動します..."
docker-compose up -d
fi
echo "依存パッケージをインストールします..."
docker-compose exec app composer install
echo ".envファイルをコピーします..."
if [ ! -f .env ]; then
cp .env.example .env
fi
echo "アプリケーションキーを生成します..."
docker-compose exec app php artisan key:generate
echo "データベースをマイグレーションします..."
docker-compose exec app php artisan migrate --seed
echo "セットアップが完了しました!"
このスクリプトを実行することで、新しい開発者はDocker環境の起動から基本的な設定までを自動で行うことができます。
実行コマンドの統一とエイリアスの活用
Dockerコンテナ内でコマンドを実行する際に、毎回docker-compose exec app php artisan ...のように長いコマンドを入力するのは非効率的です。このような頻繁に使うコマンドに対して、シェルエイリアスを設定することで、より短いコマンドで実行できるようになります。
例えば、.bashrcや.zshrcに以下のようなエイリアスを設定します。
エイリアスの例
alias art='docker-compose exec app php artisan'
alias composer='docker-compose exec app composer'
alias npm='docker-compose exec frontend npm' # フロントエンドがある場合
これにより、art migrateやcomposer installといった短いコマンドでLaravelのArtisanコマンドやComposerを実行できるようになり、タイプミスも減らすことができます。
コード品質を保つための自動化
Gitフックを使ったコードフォーマッターの自動実行
Gitフックを利用すると、特定のGit操作(コミット前など)のタイミングでスクリプトを自動実行できます。例えば、コミット前にコードフォーマッター(Prettier、PHP CS Fixerなど)を自動実行するように設定することで、チーム全体で一貫したコーディングスタイルを保つことができます。
.git/hooks/pre-commitファイルを作成し、実行権限を付与します。
.git/hooks/pre-commit の例(PHP CS Fixer)
#!/bin/bash
echo "コードのフォーマットを実行します..."
docker-compose exec app php-cs-fixer fix --config=.php-cs-fixer.dist.php --allow-risky=yes
git add $(git diff --name-only --cached)
echo "コードのフォーマットが完了しました。"
このスクリプトは、コミット前にPHP CS Fixerを実行し、修正されたファイルを自動的にステージングに追加します。
静的解析ツール(ESLint、PHPStanなど)を自動で実行するスクリプト
静的解析ツールは、コードを実行せずに潜在的なバグやコーディング規約違反を検出するのに役立ちます。これらのツールを定期的に実行することで、コード品質を高く保つことができます。専用のシェルスクリプトを作成し、CI/CDパイプラインに組み込むだけでなく、開発者が手動で実行できるようにしておくことも重要です。
analyze.sh の例
#!/bin/bash
echo "PHPStanを実行します..."
docker-compose exec app phpstan analyse -l 5 ./app ./tests
echo "ESLintを実行します..."
docker-compose exec frontend npm run lint # Vue.jsの場合
このスクリプトを実行することで、PHPStanとESLintがそれぞれコードを解析し、問題があれば報告してくれます。
開発者が意識せずにクリーンなコードを保つ仕組み
Gitフックや静的解析ツールの自動実行を導入することで、開発者は特別な操作を意識することなく、自然とクリーンなコードを保つことができます。これにより、コードレビューの時間を短縮し、手戻りを減らすことができます。
テストとデプロイを効率化する
全てのテストをまとめて実行するスクリプト(test.sh)
ユニットテスト、インテグレーションテスト、E2Eテストなど、プロジェクトに存在する全てのテストをまとめて実行するtest.shスクリプトを作成します。
test.sh の例
#!/bin/bash
echo "ユニットテストを実行します..."
docker-compose exec app php artisan test
echo "インテグレーションテストを実行します..."
docker-compose exec app php artisan test --group=integration
echo "E2Eテストを実行します..."
docker-compose exec app php artisan dusk
このスクリプトを実行するだけで、全てのテストを網羅的に実行できるため、リリース前の品質チェックを効率的に行うことができます。
特定のテストケースを素早く実行するエイリアス
開発中に特定のテストケースだけを何度も実行したい場合があります。そのような場合に便利なのが、特定のテストファイルを直接実行するエイリアスです。
エイリアスの例
alias test-unit='docker-compose exec app php artisan test'
alias test-feature='docker-compose exec app php artisan test --group=feature'
alias test-dusk='docker-compose exec app php artisan dusk'
さらに、特定のテストファイルやメソッドを指定するエイリアスも便利です。
本番デプロイ前のチェックリストを自動化するスクリプト(deploy_check.sh)
本番環境へのデプロイ前に確認すべき項目(テストの成功、静的解析のエラーがないこと、ビルドが完了していることなど)を自動でチェックするdeploy_check.shスクリプトを作成します。
deploy_check.sh の例
#!/bin/bash
echo "テストを実行します..."
./test.sh
if [ $? -ne 0 ]; then
echo "テストが失敗しました。デプロイを中止します。"
exit 1
fi
echo "静的解析を実行します..."
./analyze.sh
if [ $? -ne 0 ]; then
echo "静的解析でエラーが検出されました。デプロイを中止します。"
exit 1
fi
echo "フロントエンドをビルドします..."
docker-compose exec frontend npm run build
if [ $? -ne 0 ]; then
echo "フロントエンドのビルドに失敗しました。デプロイを中止します。"
exit 1
fi
echo "デプロイ前のチェックが完了しました。"
このスクリプトを実行することで、デプロイ前に必要な品質基準を満たしているか自動的に確認でき、人的ミスによるデプロイ失敗のリスクを減らすことができます。
日常業務をシンプルにする便利スクリプト
複数のログファイルをまとめて表示するスクリプト
複数のコンテナやサービスのログファイルをまとめて表示したい場合に便利なスクリプトです。
logs.sh の例
#!/bin/bash
docker-compose logs -f app web db worker # 必要に応じてサービス名を追加
-fオプションを付けることで、ログをリアルタイムに追跡できます。
開発中に頻繁に実行するコマンドのショートカット
開発中に頻繁に実行するコマンド(キャッシュのクリア、コンフィグのクリアなど)を短いスクリプトやエイリアスとして定義しておくと、作業効率が向上します。
エイリアスの例
alias cc='art cache:clear'
alias rc='art route:clear'
alias vc='art view:clear'
alias mc='art config:clear'
新しいブランチを作成し、定型コミットメッセージを自動入力するスクリプト
新しい機能開発やバグ修正のためにブランチを作成する際、ブランチ名やコミットメッセージの形式を統一するために役立つスクリプトです。
new-branch.sh の例
#!/bin/bash
read -p "ブランチ名を入力してください (feature/xxx, bugfix/xxx): " branch_name
if [ -z "$branch_name" ]; then
echo "ブランチ名が入力されていません。"
exit 1
fi
git checkout -b "$branch_name"
read -p "最初のコミットメッセージを入力してください: " commit_message
if [ -n "$commit_message" ]; then
git add .
git commit -m "$commit_message"
fi
echo "新しいブランチ '$branch_name' を作成しました。"
このスクリプトを使うことで、ブランチ作成と最初のコミットをスムーズに行うことができます。
まとめとチームでの運用方法
シェルスクリプトをチームで共有する際のベストプラクティス
- リポジトリでの管理: 作成したシェルスクリプトは、プロジェクトのリポジトリで管理し、バージョン管理の対象とします。
- 実行権限: チームメンバーがスクリプトを実行できるように、実行権限 (chmod +x script.sh) を付与します。
- ドキュメント化: 各スクリプトの目的、使い方、引数などをREADMEファイルやWikiに記述します。
- 命名規則: スクリプトの役割が分かりやすいように、一貫した命名規則を採用します。
ドキュメント化の重要性
シェルスクリプトは、その機能がブラックボックスになりがちです。チームメンバー全員がスクリプトの意図や使い方を理解できるように、適切なドキュメントを作成することが不可欠です。ドキュメントには、スクリプトの概要、必要な環境変数、実行方法、期待される結果などを記述します。
チーム全体でスクリプトを改善していく文化の醸成
シェルスクリプトは一度作ったら終わりではありません。日々の開発の中で「もっとこうなれば便利だ」というアイデアが出てくるはずです。チーム全体でスクリプトを共有し、改善提案を歓迎する文化を作ることで、スクリプト集は常に進化し、チームの生産性向上に貢献し続けるでしょう。
今回紹介したシェルスクリプトは、あくまで一例です。皆さんのチームの課題や開発フローに合わせて、独自の「魔法のシェルスクリプト集」を作り上げていくことをお勧めします。これらのスクリプトを活用することで、チーム開発の効率を大幅に向上させ、より多くの時間を本質的な開発業務に費やすことができるようになるはずです。
安心安全のホワイト高還元SESに転職を考えている方へ
新しい挑戦に踏み出すことは、人生において重要な一歩です。 転職活動は自分自身を知り、成長する貴重な機会でもあり、夢や成長を追求するためには必要な要素の一つ になるかと思います。 どんな選択をされるにせよ、その決断があなたに取って素晴らしい未来を切り開くことを願っています! グラディートと一緒に誇れるエンジニアを目指しましょう!
■『株式会社グラディート』では受託開発・SES・ブランディングデザイン・事業コンサルティングなどを事業として行う都内のIT企業です。現在、不遇な待遇で困っているエンジニアさんは、ぜひ一度グラディートに相談してみてね!(年収査定・SESへの転職相談も承っております!)
株式会社グラディート採用情報はこちら▼
https://en-gage.net/gradito/
株式会社グラディート公式サイトはこちら▼
https://www.gradito.co.jp/
