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...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ニフティ株式会社
PRO
November 02, 2023
Video
Resources
Programming
0
940
デプロイだけじゃない!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 ニフティ株式会社
CS教育のDX AIによる育成の効率化
niftycorp
PRO
0
86
AI 開発合宿を通して得た学び
niftycorp
PRO
0
93
なぜISPでオリジナルカードゲームを作ったのか?制作者と対談 - NIFTY Tech Talk #25
niftycorp
PRO
0
70
「なぜかネットが遅い」を“見える化”する 〜マイ ニフティが繋ぐサポートと暮らし〜 - NIKKEI Tech Talk #39
niftycorp
PRO
0
470
InnerSource Summit 2025 Three points that promoted innersource activities
niftycorp
PRO
0
240
Maker Faire Tokyo 2025 出展うらばなし - NIFTY Tech Talk #25
niftycorp
PRO
0
94
Private Status Pageの設定と活用 〜インシデントレスポンスへの活用とStatus Page運用をどうするか?〜
niftycorp
PRO
0
160
ニフティのPagerDuty活用状況
niftycorp
PRO
0
130
会員管理基盤をオンプレからクラウド移行した時に起きた障害たち - asken tech talk vol.13
niftycorp
PRO
0
2.6k
Other Decks in Programming
See All in Programming
ロボットのための工場に灯りは要らない
watany
10
2.7k
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
200
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
130
「抽象に依存せよ」が分からなかった新卒1年目の私が Goのインターフェースと和解するまで
kurogenki
0
110
The Ralph Wiggum Loop: First Principles of Autonomous Development
sembayui
0
3.7k
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
210
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
400
DSPy入門 Pythonで実現する自動プロンプト最適化 〜人手によるプロンプト調整からの卒業〜
seaturt1e
1
700
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
140
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
2
120
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
280
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
570
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Google's AI Overviews - The New Search
badams
0
930
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
82
Abbi's Birthday
coloredviolet
2
5.3k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.8k
Un-Boring Meetings
codingconduct
0
220
Test your architecture with Archunit
thirion
1
2.2k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
250
Are puppies a ranking factor?
jonoalderson
1
3.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Building the Perfect Custom Keyboard
takai
2
710
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を活用すると効率的かつ安全な開発フローを構築できる • 工夫次第でチームに合ったカスタマイズがいくらでもできる