NeurIPS著者がGithub Skillsのチュートリアルをやってみた話

## はじめに

この記事は「[ただただアウトプットを癖付けるための Advent Calendar 2024](https://qiita.com/advent-calendar/2024/newbie2024)」に投稿した記事です。

[最初の記事](https://qiita.com/yotabouya/items/e63c53c5e18b3cf6a454#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)にも書いた通り、私は生物物理の実験を専門にしている研究者です。
最近はデータ解析のため機械学習のコード開発も行っており、その成果が[NeurIPSに採択されました](https://neurips.cc/virtual/2024/poster/93465)。
開発にGithubを使っているものの、mainに直接コードをpushするだけで、他の機能はほとんど使っていませんでした。
そこで、改めてGithubの使い方をもっと知りたいと思い、今更ながらGithub Skillsのチュートリアルをやってみました。

## 関連記事

#### 前の記事 「[アドベントカレンダー2024ことはじめ](https://qiita.com/yotabouya/items/e63c53c5e18b3cf6a454)」

#### 次の記事「[NeurIPS著者がGithub Actionsでタスク管理の効率化を測ってみた話](https://qiita.com/yotabouya/private/6df01732c0c0aa8171c4)」



## Githubについて
コミュニティ内でコードを共同開発するための定番プラットフォームです。
コードの保管やバージョン管理、編集作業などをおこなうことができます。

# Github Skillsとは
[Github Skills](https://skills.github.com/)
公式が出している、Githubの扱い方を体験できるツアーのようなものが多数転がっています。

今回は、ピン留めされている6つのリポジトリをやってみました。
だいたいどんなことが学べるのか、頭の整理を兼ねてまとめてみたのが以下です。

## [introduction-to-github](https://github.com/skills/introduction-to-github)

これはGithubでの基本動作を学ぶためのリポジトリです。
最初にこのリポジトリのコピーを自分のアカウント上に作成し、その上で作業していく形になります(以下同じ)。
ReadME.mdファイルに書かれている内容を実行すると、ReadME.mdファイルの内容が変更されます。その変更後の内容にも従い、次の作業をおこなうという手順を5回ほど繰り返すというのが、このリポジトリの内容です(以下同じ)。 

### ブランチの作成
Githubはクラウドであり、リモートサーバー上にファイルを置き、それを編集していくことで共同でのプログラミングをおこなう環境です。
共同でのプログラミングにはバージョン管理が必須です。誰がどこをどのように編集したか、それはどの時点でのファイルを元にした変更なのか、管理してくれます。
(これをやらないと、複数人が同時に編集した内容を反映させたり、ある時点の状態に戻すなどの操作が困難になります。)
Githubではバージョン管理を分岐させることがあります。これをブランチと呼びます。複数存在するブランチのうち、１つの中で編集をおこなうと、それはそのブランチにのみ反映されます。他のブランチには影響を与えません。

### マージ
複数のブランチで編集をおこなった結果を統合することをマージと呼びます。
マージするためには、プルリクエストという手続きを踏む必要があります。
プルリクエストは、他のブランチに対して、自分のブランチでの編集内容を取り込んでもらうためのリクエストです。
プルリクエストを作成すると、他の人がその内容を確認し、問題がなければマージしてくれます。
このgithub skillsのリポジトリでは、他の人からの確認の手順は省略されていますが、後の[review-pull-requests](#review-pull-requests)リポジトリでその手順を学びます。

## [communicate-using-markdown](https://github.com/skills/communicate-using-markdown)

これはGithubでの文章の書き方を学ぶためのリポジトリです。
Githubでは文章を書く際にMarkdownという記法を使います。
Markdownは、文章の構造を記述するための記法です。見出しやリスト、リンクなどを記述したり、画像を埋め込んだりすることができます。
さらに、GithubではMarkdownを使ってコードを記述することもできます。コードを記述すると、その部分がハイライト表示されます。例: ```print("Hello, World!")```
このリポジトリでもう一つ学ぶのは、タスクリストです。タスクリストは、チェックボックスを使ってタスクの進捗を管理するためのものです。例: - [x] タスク1 - [ ] タスク2
以上のような基本的なMarkdownの記法を学びます。

## [hello-github-actions](https://github.com/skills/hello-github-actions)

これはGithub Actionsという機能を学ぶためのリポジトリです。
Github Actionsは、Github上での自動化を行うための機能です。
Githubでは手元環境でのコードの更新をリモートリポジトリに反映させることをプッシュと呼びます。Actionsを使うと、プッシュされたタイミングで自動的に何らかの処理を行うことができます。
もちろん、他のことをトリガーにして処理を行うこともできます。
例えば、[intro-to-github](#introduction-to-github)リポジトリでは、プルリクエストを作成したタイミングでActionsの処理が実行され、ReadME.mdファイルが変更されていました。
[communiate-using-markdown](#communicate-using-markdown)リポジトリでは、Markdownファイルを編集したタイミングでActionsの処理が実行され、正しい変更が検知されればReadME.mdファイルが次の段階のものに書き換わっていました。
このリポジトリで学ぶのは、Actionsのワークフローの設定方法と、そこにまつわる以下の名称や概念です。

### ワークフロー
Actionsの処理の流れをワークフローと呼びます。
ワークフローは、イベントとジョブとステップから構成されます。

### イベント
イベントは、Actionsのトリガーとなるものです。
例えば、プッシュやプルリクエスト、タグの作成などがイベントになります。

### ジョブ
ジョブは、ワークフローの中で実行される処理の単位です。
ジョブは複数存在することができます。

### ステップ
ステップは、ジョブの中で実行される処理の単位です。
ステップは複数存在することができます。

## [github-pages](https://github.com/skills/github-pages)

これはGithub Pagesという機能を学ぶためのリポジトリです。
Github Pagesは、Github上でホスティングされる静的なウェブサイトを作成するための機能です。
Github Pagesを使うと、リポジトリ内のファイルをそのままウェブサイトとして公開することができます。
このリポジトリでは、Github Pagesの設定方法と、ウェブサイトの作成方法を学びます。


## [test-with-actions](https://github.com/skills/test-with-actions)

これはGithub Actionsを実際に使ってみるためのリポジトリです。
このリポジトリでは、Actionsに中身のある処理を書いてみます。

### Markdownのlint
Markdownのlintとは、Markdownファイルの記法が正しいかどうかをチェックする処理です。
このパートでは、エラーのあるWorkflowファイルを走らせてエラーがどこにでるかを確認します。
また、そのエラーを修正して、正常に動作するWorkflowファイルを作成します。

### Artifacts
Artifactsとは、ジョブの実行結果を保存するためのものです。
このパートでは、Artifactsを使って、test結果を保存する方法を学びます。

### Branch Protection
Branch Protectionとは、ブランチに対して、プッシュやプルリクエストを制限する設定です。
このパートでは、Branch Protectionの設定方法を学びます。


## [review-pull-requests](https://github.com/skills/review-pull-requests)

これはGithubでのプルリクエストのレビューを学ぶためのリポジトリです。
プルリクエストのレビューは、他の人が自分の編集内容を確認し、問題がないかをチェックしてもらうことです。
このリポジトリでは、プルリクエストのレビューの手順を学びます。