Slide 1

Slide 1 text

GitHub Actions Hands on Tech Play 女子部

Slide 2

Slide 2 text

お集まりいただきありがとうございます! 短い時間ではありますが、一緒に楽しみながら GitHub Actions に入門していきましょう〜!

Slide 3

Slide 3 text

ざっくりスケジュール 10:00 - 10:15 オープニング(イマココ) 自己紹介タイムを含みます! 10:15 - 10:30 座学 10:30 - 11:00 Hands on part1 11:00 - 11:05 休憩 11:05 - 11:55 Hands on prat2 11:55 - 12:00 クロージング

Slide 4

Slide 4 text

さっそくですが自己紹介タイムです! 今日は参加してくださっている皆様全員に一人一言ずつ自己紹介していただきたいです。ビデオ ONにできる方はお願いします。(できる方だけで大丈夫です) 話すこと ● 名前(呼んで欲しい名前) ● 普段どんなことをしているのか ● 今回申し込んだきっかけとか理由とか

Slide 5

Slide 5 text

zoomの使い方 ● 私から説明するときは画面共有をしながら進めていきます ● Hands on 中のビデオ、音声のON/OFFはご自由にどうぞ ● こちらから問いかけをすることや進捗を確認することがありますが、その際は音声、またはリ アクションをお願いします

Slide 6

Slide 6 text

Hands on の進め方 3部構成です 1. 座学 (10分程度) 2. Hands on part1 (30分程度) ○ 私の実演とハンズオンを交互に進めていきます 3. Hands on part2 (50分程度) ○ パート1でやったこと&資料を参考にしながら各個人でもくもく進めていきます ○ わからない場合など、もちろん質問 OKです! ○ もくもく進めるのもあり!わからないことを質問するのもあり!な時間です

Slide 7

Slide 7 text

今日目指すこと GitHub Actions でUnitテストを実行してみるところまでやってみる!

Slide 8

Slide 8 text

座学パート

Slide 9

Slide 9 text

Agenda ● CI/CD とは ● GitHub Actions の基本

Slide 10

Slide 10 text

CI/CD とは ● CI ○ Continuous Integration (継続的インテグレーション) ■ コードに変更があるたびに自動でテストを実行すること ● CD ○ Continuous Delivery (継続的デリバリ) ■ コードを常にリリース可能な状態にしておく ○ Continuous Deployment ( 継続的デプロイ) ■ 常に自動でデプロイする

Slide 11

Slide 11 text

CI/CD で自動化できること ● ビルド ● テスト ● デプロイ ● その他 ○ 使用しているライブラリのアップデート ○ 静的解析チェック

Slide 12

Slide 12 text

CI/CD による自動化から得られるメリット CI/CDによる自動化によって得られるメリットを紹介します ● ヒューマンエラーを防ぐ ○ 自動的に実行されるため、テストやチェックし忘れを防げます ○ 毎回同じ手順で実行されるため、人によって実行の仕方が違う、手順を飛ばしてしまう、 というミスを防ぐことができます ● 積極的にリリースできる ○ リリース時の工数が減るため、積極的なリリースにつながります ○ 万が一バグがあったとしてもすぐにロールバックすることもできます

Slide 13

Slide 13 text

CI/CD ツール・サービス CI/CDを行うためのツールやサービスは様々です。 ● GitHub Actions ● CircleCI ● Jenkins ● AWS CodeBuild / AWS CodeDeploy / AWS CodePipeline

Slide 14

Slide 14 text

GitHub Actions の基本 GitHubのイベントをトリガーとして実行されるワークフローを定義できます。 ● pushされたらテストを実行する ● プルリクエストが作られたら〇〇する ● △△ブランチにpushされたらビルドしてデプロイする publicリポジトリであれば無制限で無料、 privateリポジトリも無料枠があります https://github.co.jp/features/actions

Slide 15

Slide 15 text

ワークフローの実体はymlファイル CI/CDを行いたいリポジトリに .github/workflows ディレクトリを作成し、その配下に yml ファイル を作成します

Slide 16

Slide 16 text

Hands on パート1

Slide 17

Slide 17 text

Agenda ● ①初めての GitHub Actions ● ②actionを使ってみよう

Slide 18

Slide 18 text

①初めての GitHub Actions ゴール: ワークフローを定義して echo コマンドで文字列を出力する ★ 自分で .github/workflows ディレクトリを準備してymlファイルを作って、ということもできます が、今日は github.com 上でワークフローを作ってみます ★ 「echo コマンドで文字列を出力する」というシンプルなワークフローを作ってみましょう

Slide 19

Slide 19 text

初めての GitHub Actions 1) cloneしたリポジトリをgithub.com上で開きます 2) Actionsタブをクリックし、「set up a workflow yourself」というリンクをクリックします

Slide 20

Slide 20 text

初めての GitHub Actions 3) 一度このままcommitします。右上の Start commit ボタンからコミットします。コミットが完了 すると自動的に Code タブに戻ります。

Slide 21

Slide 21 text

初めての GitHub Actions 4) Actions タブを開き直すと、今作ったワークフローが実行されています 5) echo コマンド部分を自由に書き換えて実行してみましょう

Slide 22

Slide 22 text

example.yml 詳しくはこちら name: CI # このワークフローの名前 on: # このワークフローをキックするイベント push: # push された時 branches: [ main ] # main ブランチ jobs: # 1つのワークフローは 1つ以上のjobからなる build: # このジョブのID runs-on: ubuntu-latest # “build”ジョブを実行するマシンの種類 steps: # 1つのジョブにはstepsと呼ばれる一連のタスクがある - name: Run a one-line script # 1つのstepは - によって区切られる run: echo Hello, world! # 使用されているマシンの OSのシェルを使用してコマンドラインプログラムを実行する

Slide 23

Slide 23 text

ワークフローを図解するとこんなイメージ workflow(yml) trigger: push job OS(runs-on): ubuntu steps checkout echo job OS(runs-on): windows steps echo checkout echo echo

Slide 24

Slide 24 text

②actionを使ってみよう ゴール: checkout アクションを使ってみよう ★ actionとは ○ GitHub Actions 内のライブラリのようなもの ○ https://github.com/marketplace?type=actions ○ 実はすでに先ほど作成したワークフローで checkout actionを使っています

Slide 25

Slide 25 text

actionを使ってみよう checkout actionの動きを確認しましょう。checkout action実行ステップの前後にlsコマンドを実行 するステップを差し込みます。 jobs: build: runs-on: ubuntu-latest steps: - name: before run checkout #追加 run: ls -a - uses: actions/checkout@v2 - name: after run checkout #追加 run: ls -a

Slide 26

Slide 26 text

CIの基本 ● CIで実現したいことはローカル環境でも実現できていることが前提になります ● ローカル環境での手順をどうやって CIで実行させるのかが鍵になります

Slide 27

Slide 27 text

Hands on パート2

Slide 28

Slide 28 text

Agenda ● ③Unitテストの実行 ● ④スケジュール実行をしてみよう ● ⑤Unitテストが失敗したときに通知をしてみよう

Slide 29

Slide 29 text

③Unitテストの実行 ゴール: Unitテストを実行してみよう ★ アプリのUnitテストを GitHub Actions で実行してみましょう ★ 今のmain.ymlに付け足していきます

Slide 30

Slide 30 text

ヒント main.ymlを修正する前に、ローカルでUnitテストを実行する手順を復習します 0. PCにnode.js環境構築 & ローカルにリポジトリを clone 1. npm install 2. npm test この手順を GitHub Actions で実現します。今の main.yml では、0番目の手順まで実現できてい ます。 残り2つの手順をそれぞれステップで実現します。

Slide 31

Slide 31 text

④スケジュール実行をしてみよう ゴール: 指定した時間に実行されるワークフローを作ってみましょう ★ 今までは push されたときに実行されるワークフローを作っていました ★ 指定した時間に実行されるワークフローを作ってみましょう ○ ワークフローは新しく作っても、今まで使っていたものに修正を入れても OKです ○ 定期実行にすると永遠に実行され続けるのであとで消しておきましょう

Slide 32

Slide 32 text

ヒント ● 今までは push イベントを使っていましたが、 schedule イベントを使います ● 以下のリンクを参考にしてみてください ○ https://docs.github.com/ja/free-pro-team@latest/actions/reference/workflow-s yntax-for-github-actions#onschedule ○ https://docs.github.com/ja/free-pro-team@latest/actions/reference/events-that- trigger-workflows#schedule

Slide 33

Slide 33 text

⑤Unitテストが失敗したときに通知をしてみよう ゴール: ワークフローが失敗したときにだけ実行されるステップを作ってみましょう ★ Unitテストが失敗したときに通知をしてみましょう ★ 本当はSlack通知などを行いたいところですが、 Slackへの連携作業に時間がかかりそうなの で、今日は実際の通知は行いません ★ Unitテストが失敗したときにだけ実行されるステップを作ってみましょう

Slide 34

Slide 34 text

ヒント ● まずはUnitテストを失敗させましょう ○ 実は今のアプリにはおかしいところがあります。そして Unitテストも間違っています。Unit テストを修正してみてください(コードも間違っているのでテストは失敗するはずです )。 ○ テストは、 リポジトリの__tests__/service/rule-test.js です ● ステップの中で if 条件文を使うことができます ● 以下のリンクを参考にしてみてください ○ https://docs.github.com/ja/free-pro-team@latest/actions/reference/context-and -expression-syntax-for-github-actions#failure ○

Slide 35

Slide 35 text

いかがでしたでしょうか? アンケート実施予定です。ぜひご意見お待ちしております。