ごきげんよう。最近はUnityでの開発に四苦八苦しているgonzoです😿
今回は開発作業を効率化し、質を高める為のCI/CDの例についてざっくり解説していきます。
CI/CDって何?
CI/CDとは、こんな仕組みのことです。
- CI(継続的インテグレーション):
プログラムが正しく動くかを、自動でテストやビルドして確認する仕組み。 -
CD(継続的デリバリー/デプロイメント):
テストをクリアしたコードを自動でリリースしたり、本番環境に反映する仕組み。
簡単に言えば、「開発で生じる面倒な作業を自動化する」ための方法です。
GitHub Actionsを使おう
では、今回の主役「GitHub Actions」の紹介です。
GitHub Actionsは、GitHubが提供している「自動化ツール」です。リポジトリに変更が加えられたときに、決められた手順(=ワークフロー)を自動で実行してくれます。
例えば、以下のようなことができます。
- プルリクエストが来たときにテストを実行する
- 本番環境にコードをデプロイする
- コードフォーマットをチェックする
GitHub Actionsはこのようなワークフローを比較的簡単に作成して実行できるようになっています。
しかもある程度は無料で使えます!😍
今回やること
今回は、GitHub Actionsを使ってC#のコードフォーマット(=プログラムコードの体裁)をチェックする仕組みを作ります。使うツールはdotnet format
です。コードの見た目に問題があると教えてくれる便利なツールです。
リポジトリの準備をしよう
1. GitHubリポジトリを準備する
自分のC#プロジェクトをGitHubに登録しましょう。リポジトリがまだなければ、新規作成してください。
2. .editorconfigを作る
.editorconfig
は、コードフォーマットのルールを定義するファイルです。プロジェクトのルートディレクトリ等に以下の内容でファイルを作成しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# .editorconfigファイルのサンプル root = true [*.cs] indent_style = space indent_size = 4 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true dotnet_sort_system_directives_first = true dotnet_separate_import_directive_groups = true |
これで、C#コードのインデントや改行、usingディレクティブの順序などが統一されます。
GitHub Actionsを設定する
ワークフローファイルを作る
リポジトリの.github/workflows
ディレクトリに移動し、format-check.yml
というファイルを作成します。
以下はC#コードのフォーマットチェックを行うGitHub Actionsのワークフローの例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# ワークフローの名前 name: Code Format Check # mainブランチに対するプルリクエストが作られたら実行 on: pull_request: branches: - main # 実行するジョブ jobs: format-check: runs-on: ubuntu-latest steps: - name: コードを取得 uses: actions/checkout@v4 - name: .NETをセットアップ uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: dotnet formatをインストール run: dotnet tool install --global dotnet-format - name: フォーマットチェックを実行 run: |- dotnet format ExampleApp.csproj \ --verify-no-changes \ --report ./format-check-report.json - name: レポートを整形してアップロードする if: failure() run: |- echo "ファイルパス | 行 | 列 | エラー内容" >> $GITHUB_STEP_SUMMARY echo "--- | --- | --- | ---" >> $GITHUB_STEP_SUMMARY cat ./format-check-report.json | jq -r --arg base "$(pwd)" \ '.[] | . as $parent | .FileChanges[] | "\($parent.FilePath | sub($base + "/"; "")) | \(.LineNumber) | \(.CharNumber) | \(.FormatDescription)"' >> $GITHUB_STEP_SUMMARY |
この設定で、プルリクエストが作成されるたびにコードフォーマットがチェックされます。
実際に動かしてみよう
- プロジェクトに変更を加えたら、GitHubでプルリクエストを作成してください。
- ワークフローが自動的に動き、フォーマットに問題があればエラーを通知します。
Details
リンクの先にあるSummary
でエラー箇所を確認します。- 指摘された箇所を修正して再度プッシュしましょう!
以下が実際の流れです。
例えば、下記のようなプログラムコードをProgram.cs
というファイル名でコミットしたとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class ExampleClass { public static void Main() { // インデントをしていない string str = "Hello, World!"; // 行末に空白が入っている Console.WriteLine(str); // 空白行に余計なインデントが入っている } } |
修正後にコミットすると、再度ワークフローが実行されて、成功となります。
以上のように、GitHub Actionsとdotnet format
を組み合わせれば、このようにコードフォーマットのチェックを簡単に自動化できます。これを取り入れることで、開発チーム全体の効率やコードの品質がぐんと上がりますよ。
他にもCI/CDでできること
CI/CDを使うと、他にも開発の面倒な作業を自動化できます。今回はいくつかの例をサクッとご紹介します。
- 自動テスト:
コードが正しく動くか、自動でチェック!ユニットテストや統合テストを使えば、バグを早期に発見できます。 -
自動ビルド:
コードを変更したら、実行ファイルやライブラリを自動生成!手作業でのミスも防げます。 -
本番環境へのデプロイ:
テストをクリアしたコードを自動で本番環境に反映。これでリリース作業も楽々! -
コード品質チェック:
静的解析ツールで、コードの書き方やセキュリティリスクを自動チェック。チームのコードを統一できます。 -
ドキュメント生成:
コードからAPIドキュメントを自動生成。更新漏れも防げて安心!
おわりに
CI/CDは、開発を効率化する魔法のような仕組み。
テストやデプロイを自動化すれば、作業がぐっと楽になります。
特に近年はAIの導入も組み合わさって、コードレビューやデータ分析などの高度な作業も可能になってきています。
また、あらゆる開発支援ツールへの導入も進んできており、使っていて当たり前になってきているほどですので、まだ触ったことが無い方はぜひ試してみてくださいね!
おしまい