Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
デプロイだけじゃない!GitHub Actionsの活用法 - NIFTY Tech Talk #15
Search
ニフティ株式会社
PRO
November 02, 2023
Video
Resources
Programming
0
240
デプロイだけじゃない!GitHub Actionsの活用法 - NIFTY Tech Talk #15
ニフティ株式会社
PRO
November 02, 2023
Tweet
Share
Video
Resources
今さら聞けない!GitHub Actions超入門 - NIFTY Tech Talk #15
https://nifty.connpass.com/event/299800/
More Decks by ニフティ株式会社
See All by ニフティ株式会社
チーム力を高めるスクラム実践法:カンバン公開と課題攻略について - ニフティのスクラムトーク Vol. 2 - NIFTY Tech Talk #18
niftycorp
PRO
1
120
スクラムチームと認知負荷 - ニフティのスクラムトーク Vol2. / NIFTY Tech Talk #18
niftycorp
PRO
1
130
Visual Studio Code Dev Containers ススメ Python編 - NIFTY Tech Talk #17
niftycorp
PRO
1
76
dotfilesを作ろう - NIFTY Tech Talk #17
niftycorp
PRO
1
81
フロントエンドを始める前に どうしていっぱいツールがあるの? - NIFTY Tech Talk #17
niftycorp
PRO
1
120
サービスシステム監視 (シフト例)
niftycorp
PRO
0
61
スクラムマスターの技を磨く! ニフティのスクラムトーク vol. 1 - NIFTY Tech Talk #16
niftycorp
PRO
1
140
AWS基礎 / 2023 ニフティ新人研修
niftycorp
PRO
0
280
データベース / 2023 ニフティ新人研修
niftycorp
PRO
0
160
Other Decks in Programming
See All in Programming
Code Reviews
bkuhlmann
4
900
Azure OpenAI Serviceのプロンプトエンジニアリング入門
tomokusaba
3
870
スクラムガイドのスプリントレトロスペクティブを改めて読みかえしてみた / Re-reading the Sprint Retrospective Section in the Scrum Guide
mackey0225
3
480
VS Code をプロダクトにどう取り込むか
onomax
1
650
Elm 0.19.0 Changes
bkuhlmann
0
510
Git Rebase
bkuhlmann
11
1.6k
Ruby Pattern Matching
bkuhlmann
0
930
Git Lint
bkuhlmann
4
760
Going beyond Apache Parquet's default settings
xhochy
0
130
使ってみよう Azure AI Document Intelligence
kosmosebi
2
360
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
380
Goのエラースタックトレースの歴史と今後
sonatard
10
1.8k
Featured
See All Featured
Music & Morning Musume
bryan
41
5.6k
In The Pink: A Labor of Love
frogandcode
138
21k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
8
1.3k
How STYLIGHT went responsive
nonsquared
92
4.8k
Clear Off the Table
cherdarchuk
85
310k
A better future with KSS
kneath
231
16k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
65
14k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
275
13k
A Philosophy of Restraint
colly
197
16k
Building Applications with DynamoDB
mza
88
5.6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
21
1.9k
The Invisible Side of Design
smashingmag
294
49k
Transcript
Copyright © NIFTY Corporation All Rights Reserved. デプロイだけじゃない!GitHub Actionsの活用法 渡邊 大介
会員システムグループ 第一開発チーム
Copyright © NIFTY Corporation All Rights Reserved. 渡邊 大介 入社 2019年4月(5年目)
担当業務 自社WEBサービスの運用開発 趣味 映画、ドライブ、バドミントン 自己紹介
Copyright © NIFTY Corporation All Rights Reserved. ニフティトップページについて
01
Copyright © NIFTY Corporation All Rights Reserved. ニフティトップページ • 20世紀から存在する月間3,000万PVのポータルサイト
• 多くのコンテンツを展開している ◦ 接続会員向け(宝箱、ニフくじ、メール、ニフティ ポイントクラブ) ◦ その他(ニュース、検索、天気、占いなど)
Copyright © NIFTY Corporation All Rights Reserved. ブランチ戦略 各ブランチと各環境の対応付けを実施 開発環境#1
featureブランチ developブランチ 本番環境 masterブランチ PR#1 開発環境#2 ラベル付与 ラベル付与 ステージング環境 マージ時 PR#2 PR#3 マージ時 施策A 施策B 開発環境#1 ラベル付与 PR#4 施策C releaseブランチ
Copyright © NIFTY Corporation All Rights Reserved. 安全にPRをレビューするための工夫
02
Copyright © NIFTY Corporation All Rights Reserved. PRレビューの課題 • ユニットテストの結果がわからない
◦ ユニットテストは実装しているが、ローカルでしか確認できない ◦ バグやエラーの発見が機械的にできていない ◦ 不具合がある状態でリリースされてしまう問題が発生 • ブランチ戦略にあった実装、レビュー方法が確立できていない ◦ 具体的に各ブランチで何をやるべきかが明確ではなかった ◦ ドキュメント、環境変数の更新など
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
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}"
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 }}"
Copyright © NIFTY Corporation All Rights Reserved. リリースノートの自動生成 03
Copyright © NIFTY Corporation All Rights Reserved. GitHubリリースノートとは • ソフトウェアの新しいバージョンが公開されるたびに作成される文書のことを指す
• このノートには、そのバージョンの変更点、新機能、修正内容、既知の問題点など、ユーザーや 開発者が知っておくべき情報が詳細に書かれている
Copyright © NIFTY Corporation All Rights Reserved. GitHub運用を行っているチームの要望 • スクラムを採用した開発を行っているので、スプリント毎のリリース内容を把握したい
• ブランチをカテゴリ別に整理したい • 管理している5つのリポジトリ毎にリリースノートを作成したい • スプリント終了時にリリースノートを自動生成したい
Copyright © NIFTY Corporation All Rights Reserved. リリースドラフターを使って解決 • release-drafterというActionを使って実現
• PRを出したときのブランチ名を参照し、適切なラベル を付与 • そのラベルに基づいてカテゴリを分けたリリースノー トを生成 • スプリント終了時にBOTが自動的にリポジトリ毎にリ リースノートを作成
Copyright © NIFTY Corporation All Rights Reserved. 工夫した点(小技) • リリースノートのタイトルとタグがsprint{数字}という形でつけているので、この数字をスプ
リントが変わるごとに変化させたい • github-scriptというワークフロー内でJavaScriptを実行できるactionを用いて、最新のリリー スノートのタグを取得し、+1を行う • 詳しい内容はブログ記事を参照
Copyright © NIFTY Corporation All Rights Reserved. ドキュメント生成ツールの自動更新 04
Copyright © NIFTY Corporation All Rights Reserved. TypeDocとは • TypeScriptで記述されたアプリケーション用のドキュ
メント生成ツール • コード内にコメントを書き、特定の生成コマンドを実 行するとドキュメントが生成される • 公式ドキュメント
Copyright © NIFTY Corporation All Rights Reserved. 課題 • アプリケーションの改修に伴い、コード内コメントも追加されていく
• 手動でのドキュメント生成の方法しかないので、ローカル環境でしか確認できない • 人によって最新の情報ではないので、一貫性が保てない
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
Copyright © NIFTY Corporation All Rights Reserved. まとめ • GitHub
Actionsを活用すると効率的かつ安全な開発フローを構築できる • 工夫次第でチームに合ったカスタマイズがいくらでもできる