Upgrade to Pro — share decks privately, control downloads, hide ads and more …

デプロイだけじゃない!GitHub Actionsの活用法 - NIFTY Tech Talk #15

デプロイだけじゃない!GitHub Actionsの活用法 - NIFTY Tech Talk #15

ニフティ株式会社

November 02, 2023
Tweet

Video


Resources

今さら聞けない!GitHub Actions超入門 - NIFTY Tech Talk #15

https://nifty.connpass.com/event/299800/

More Decks by ニフティ株式会社

Other Decks in Programming

Transcript

  1. Copyright © NIFTY Corporation All Rights Reserved.
 渡邊 大介
 
 入社   2019年4月(5年目)


    
 担当業務 自社WEBサービスの運用開発
 
 趣味   映画、ドライブ、バドミントン
 自己紹介

  2. Copyright © NIFTY Corporation All Rights Reserved.
 ニフティトップページ
 • 20世紀から存在する月間3,000万PVのポータルサイト

    • 多くのコンテンツを展開している ◦ 接続会員向け(宝箱、ニフくじ、メール、ニフティ ポイントクラブ) ◦ その他(ニュース、検索、天気、占いなど)
  3. Copyright © NIFTY Corporation All Rights Reserved.
 ブランチ戦略
 各ブランチと各環境の対応付けを実施
 開発環境#1

    featureブランチ developブランチ 本番環境 masterブランチ PR#1
 開発環境#2 ラベル付与 ラベル付与 ステージング環境 マージ時 PR#2
 PR#3
 マージ時 施策A 施策B 開発環境#1 ラベル付与 PR#4
 施策C releaseブランチ
  4. Copyright © NIFTY Corporation All Rights Reserved.
 PRレビューの課題
 • ユニットテストの結果がわからない

    ◦ ユニットテストは実装しているが、ローカルでしか確認できない ◦ バグやエラーの発見が機械的にできていない ◦ 不具合がある状態でリリースされてしまう問題が発生 • ブランチ戦略にあった実装、レビュー方法が確立できていない ◦ 具体的に各ブランチで何をやるべきかが明確ではなかった ◦ ドキュメント、環境変数の更新など
  5. Copyright © NIFTY Corporation All Rights Reserved.
 ユニットテスト自動化
 • PRを出したタイミングでユニットテストを実行するGitHub

    Actionsが自動的に起動 • ユニットテストが失敗した場合はPRをマージできないように制御 • 40行程度のコードで実現可能 name: Run unit test on: pull_request: branches: - master - develop paths: - 'public/**' - 'src/**' push: branches: - master - develop paths: - 'public/**' - 'src/**' env: node-version: '14.x' jobs: tests: runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.node-version }} - name: Install packages run: yarn install - name: Run type check run: yarn type-check - name: Run test run: yarn test:coverage
  6. Copyright © NIFTY Corporation All Rights Reserved.
 マージに必要な項目を自動で投稿
 • PRの品質と整合性を担保するためのマージ要件を自動的に投稿する

    ◦ 実装方法などの詳しい内容はブログ記事を参照 • 30行程度のコードで実現可能 name: Pull Request Comment on: pull_request: types: [opened] jobs: post_comment: runs-on: ubuntu-latest timeout-minutes: 5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} WORKING_DIRECTORY: .github/workflows/conf/pr_comments steps: - name: Checkout uses: actions/checkout@v3 - name: Check Base Branch name working-directory: ${{ env.WORKING_DIRECTORY }} run: | BRANCH_ACTION=`cat pull_request_comment.json | jq '.["${{ github.base_ref }}"]' -r` if [ "$BRANCH_ACTION" != "null" ]; then echo "IS_COMMENT_POST=true" >> $GITHUB_ENV COMMENT_FILE_PATH=`echo $BRANCH_ACTION | jq '.["comment_file_path"]' -r` echo "COMMENT_FILE_PATH=$COMMENT_FILE_PATH" >> $GITHUB_ENV fi - name: Create comment working-directory: ${{ env.WORKING_DIRECTORY }} if: ${{ contains( env.IS_COMMENT_POST, 'true') }} env: URL: ${{ github.event.pull_request.html_url }} run: | gh pr comment -F ${{ env.COMMENT_FILE_PATH }} "${URL}"
  7. Copyright © NIFTY Corporation All Rights Reserved.
 レビュアーの自動追加
 • PRのレビュアーとアサイニーを追加するのを忘れてしまう問題が発生

    • Auto Assign ActionというActionを導入することで、設定ファイルに記述したレビュ アーとアサイニーを自動的に追加 • 10行程度のコードで実現可能 name: "Auto Assign" on: pull_request: types: [opened, ready_for_review] jobs: autoassign: name: AddAssignees & Reviewers runs-on: ubuntu-latest steps: - name: Auto Assign Action uses: kentaro-m/[email protected] with: repo-token: "${{ secrets.GITHUB_TOKEN }}"
  8. Copyright © NIFTY Corporation All Rights Reserved.
 GitHubリリースノートとは
 • ソフトウェアの新しいバージョンが公開されるたびに作成される文書のことを指す

    • このノートには、そのバージョンの変更点、新機能、修正内容、既知の問題点など、ユーザーや 開発者が知っておくべき情報が詳細に書かれている
  9. Copyright © NIFTY Corporation All Rights Reserved.
 GitHub運用を行っているチームの要望
 • スクラムを採用した開発を行っているので、スプリント毎のリリース内容を把握したい

    • ブランチをカテゴリ別に整理したい • 管理している5つのリポジトリ毎にリリースノートを作成したい • スプリント終了時にリリースノートを自動生成したい
  10. Copyright © NIFTY Corporation All Rights Reserved.
 リリースドラフターを使って解決
 • release-drafterというActionを使って実現

    • PRを出したときのブランチ名を参照し、適切なラベル を付与 • そのラベルに基づいてカテゴリを分けたリリースノー トを生成 • スプリント終了時にBOTが自動的にリポジトリ毎にリ リースノートを作成
  11. Copyright © NIFTY Corporation All Rights Reserved.
 工夫した点(小技)
 • リリースノートのタイトルとタグがsprint{数字}という形でつけているので、この数字をスプ

    リントが変わるごとに変化させたい • github-scriptというワークフロー内でJavaScriptを実行できるactionを用いて、最新のリリー スノートのタグを取得し、+1を行う • 詳しい内容はブログ記事を参照
  12. Copyright © NIFTY Corporation All Rights Reserved.
 TypeDocとは
 • TypeScriptで記述されたアプリケーション用のドキュ

    メント生成ツール • コード内にコメントを書き、特定の生成コマンドを実 行するとドキュメントが生成される • 公式ドキュメント
  13. Copyright © NIFTY Corporation All Rights Reserved.
 課題
 • アプリケーションの改修に伴い、コード内コメントも追加されていく

    • 手動でのドキュメント生成の方法しかないので、ローカル環境でしか確認できない • 人によって最新の情報ではないので、一貫性が保てない
  14. Copyright © NIFTY Corporation All Rights Reserved.
 ドキュメント更新の自動化
 • GitHub

    Pagesを使ってGitHubだけで完結する構成で実装を行った • GitHub Pagesはプライベート公開が可能なので、アクセス権限を考えなくてすむ • actions-gh-pagesというactionを使い、masterブランチにマージされたタイミングで TypeDoc用のブランチにpushされる • 30行程度のコードで実現可能 name: Deploy TypeDoc to GitHub Pages on: push: branches: - master env: node-version: '14.x' jobs: deploy-typedoc: runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: ${{ env.node-version }} - name: Build TypeDoc working-directory: ./ run: | yarn yarn gendoc - name: TypeDoc Deploy uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./references
  15. Copyright © NIFTY Corporation All Rights Reserved.
 まとめ
 • GitHub

    Actionsを活用すると効率的かつ安全な開発フローを構築できる • 工夫次第でチームに合ったカスタマイズがいくらでもできる