今回は、初めてGitHub Actionsを使ってCIを構築したので手順について説明します
Table of Contents
この記事の内容
自身が初めてGitHub Actionsを使ってCI環境を導入しました。「きもちいいーーー!!!!!」ってなったから丁寧に使い方を残していきますね。
想定読者はGitHub Actionsの初学者になっています。
この記事のゴール
- GitHub Actionsの大まかな流れを理解できる
- RuboCopを導入できる
- 自身でもなんとなくCI環境を構築できる
あたりが今回のゴールになりそうかな!
前提条件
すでにRuboCopは導入している前提で進めます。
もしまだ導入されていなかったら先に以下記事を参考に導入してみてくださいね!
GitHub Actionsの導入
GitHub Actionsとは
そもそもGitHub Actionsとはなんぞやというのを公式では以下のように説明されていました↓
GitHub Actionsを使用すると、ワールドクラスのCI / CDですべてのソフトウェアワークフローを簡単に自動化できます。 GitHubから直接コードをビルド、テスト、デプロイでき、コードレビュー、ブランチ管理、問題のトリアージを希望どおりに機能させます。
https://github.co.jp/features/actions
ということで、GitHub Acionsを利用することで、CI / CD環境の構築ができるということですね。
CI/CD とはという記事がRed Hatの公式にありましたが、簡単にいうと自動化させまくってデプロイ簡単にしようぜ、システムの品質向上させようぜ、開発環境整えようぜ。みたいな意味だと自分は認識しています。
結論、そのCI / CD環境を提供しているのがGitHub Actionsなんですね。
自分も初めて触ってみたんですが、思った以上に簡単に構築できてびっくりでした。(もっと複雑かと思っていた…)
だから早めに準備しておけばおくほど効率的になるのかなと思っています。
GitHub Actionsの導入
RuboCop導入がGitHub上であったので参考にしていきます。
GitHub Actions←この辺りも見ながら
では最初にディレクトリを作ります。
プロジェクト直下の一番親にgithub/workflows
を作成
workflows
ディレクトリの中にgithub-action.yml
を作成
github/workflows/github-action.yml
の中身は以下ですね
name: Run rubocop
on:
push:
pull_request:
jobs:
rubocop:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2'
bundler-cache: true
- name: Run RuboCop
run: |
cd backend
bundle install
bundle exec rubocop
Code language: JavaScript (javascript)
mac-osの時にはbundle installをrunの中で実行しないとvm内でbundle installをしてくれないらしいので注意が必要っぽいです。
上記で記載したGitHub Actions のワークフロー構文について少し確認してみましょう
on
ワークフローを自動化させるためのトリガーがonで指定できます。トリガーになれるイベントはこちらを参照ください。
runs-on
ジョブを実行するマシンの種類を定義します。
GitHubホステッドランナーとして利用できるイメージは複数あるようです。
GitHub ホステッド ランナーの選択
他にも色々使い方があるので気になる場合は調べてください!
【初心者向け】【入門】GitHub Actionsの書き方についてデバッグ設定、runs-onやcheckoutなどの仕組みや構造も含めて徹底解説という記事がわかりやすかったです。
もし、実際にGitHub Actionsを実行しておかしいことがあったらpwd
とかをrunの中に入れて実行ディレクトリがおかしくないかとかも試してみましょう!
GitHub Actionsを実行
あとは実行するだけです。
何か適当なブランチを切って、GitHubにpushしてください。
そしてPRを作成すると勝手にGitHub Actionsが実行されてエラーが起きたり、成功が帰ってきたりします。
まとめ
CIとかってどうなっているのか?というのを大枠でも理解できたのは非常に良かったです。
- フォーマッターは絶対かけてね
- テストは絶対は試してね
みたいなルールがあっても人ってそこを疎かにすることが多いと思います。
なのでこのようなツールを使って自動的に実行してもらえるような仕組みを作れるのがすごく気持ちよかったです!
ぜひ現場でも使っていきたいですね