GitHub Actions 事始め

## この記事のターゲット

- GitHub Actionsってなに
- 本格的なのはいいからちょっと触ってみたい


## 何やるか
まずGitHub Actionsってそもそもなんなのかについて簡単に説明します。
その後実際にmasterブランチに対してPRが作られた時だけCI（今回はコンソールにechoするだけ）を動かすところまでやってみます。


### GitHub Actionsとは

公式：[GitHub Actions](https://github.co.jp/features/actions)
超ザックリいうとGitHub製のCircleCI, Jenkinsです。

Git上での特定のアクションに対してテストを走らせたり、buildコマンドを実行したり、実環境にデプロイしたりということを自動化することができます。

気になるお値段ですが、なんとPublic Repositoryなら無料！
以下は公式のページに書かれている文章です。
なんともありがたい...

```
GitHubはオープンソースを支援します。
```

Private Repositoryでも一ヶ月あたり2,000分までFreeでも利用可能です。

詳細については公式や他の方のまとめも見てみてください。


### やってみよう
では本題。

まずはリポジトリを用意しましょう。
新規でも既存でもいいです。
今回は新規に作ります。（画像は全部終わったあとなのでもろもろありますが気にしないでください.）

<img width="1680" alt="スクリーンショット 2019-12-25 13.24.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177043/f3f469cc-54c5-40b4-00ff-7fda69e2bda3.png">

「Actions」というタブがありますね。
これがGitHub Actionsを利用するためのタブです。
これをクリックすると多分こんな感じ。

<img width="1680" alt="スクリーンショット 2019-12-24 12.43.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177043/362eff93-bdc2-df01-b6cf-975572c75c40.png">

すでに用意されているworkflowを選ぶかSimple workflowを選ぶかの画面になります。
今回はシンプルでいいのでSimple workflowの「Set up this workflow」をクリックします。

<img width="1680" alt="スクリーンショット 2019-12-24 12.44.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177043/aa4de89b-7a0f-b49f-d9f3-24fa64155aed.png">

すると多分こんな感じ。
リポジトリに「.github/workflows」というディレクトリが切られ、ymlファイルを作ることになります。
このymlファイルに書いた内容がGitHub Actionsで実行する内容になるわけです。
デフォルトではpushされるとubuntu-latest環境でechoコマンドが3回実行されます。
とりあえずこのまま「Start commit」してみましょう。
この画面のcommitはgitコマンドでのpush扱いになるのでCIが実行されるはずです。

もう一度Actionsタブを開くと画面が変わっていて多分こんな感じ。
CIが1回実行されていることがわかります。

<img width="1680" alt="スクリーンショット 2019-12-24 12.45.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177043/5f4b2e3e-f2e5-0a60-8b90-c9284a4c1c14.png">

実行ログを選ぶと実際のログが閲覧できます。
多分こんな感じ。

<img width="1680" alt="スクリーンショット 2019-12-24 12.45.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177043/aa539bfd-7c97-77bd-5772-ab07494668b4.png">

echoコマンドが3回走ってる結果がみて取れますね。

おめでとうございます！
記念すべき1回目のCIが成功しました！

しかし今回のゴールはもう少し先です。
あらゆるpushで実行されては大変なのでmasterブランチにPRされた時だけ実行されるように変更していきます。

ブランチを切って先ほど作成したblank.ymlを編集しましょう。
CIの実行契機はonというキーワードの部分に書いていきます。
pushではなくpull_requestで,branchはmasterのみで。
指定するキーワードや階層は編集画面の右側のタブにdocumentがあるのでぜひ見比べてみてください。


```yml
name: CI

on:
  pull_request:
    branches:
      - master

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1
    - name: Run a one-line script
      run: echo Hello, world!
    - name: Run a multi-line script
      run: |
        echo Add other actions to build,
        echo test, and deploy your project.
```

編集できたら新しく切ったブランチにcommit。
この時点ではまだ古いymlの内容で実行されるのでCIが走ります。

試しにREADME.mdでも作ってpushしてみましょう。
今度は新しいymlの内容で実行されるのでCIは走りません。


ここまで確認できたらmasterブランチに対してPRを作成。
マージする前にActionsタブで確認すると、pull_requestを契機にCIが走ったことがわかります。

<img width="1680" alt="スクリーンショット 2019-12-25 13.48.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177043/72c7cdb7-af57-eb11-54ed-a98955aec7e1.png">


ここまできたら成功！
無事にmasterブランチへのpull_requestだけをCIのターゲットにできました。



## まとめ
あとはCIで実行するjobをテストにしたりビルドにしたり、契機をマージにしてデプロイしたりとやりたい放題です。
これまではCIをやろうとするとCirclCIやJenkinsなど管理する外部サービスやサーバー、アカウントが増えてしまっていたのでGitHubで完結するようになるのは嬉しいですね。

マサカリ歓迎。