趣味の開発ノート

ITの学習やプログラミング・ノーコードアプリ開発のことなど。

【ノンプロ研】技術ライティング講座 第8回「GitHubによる共同作業」まとめと演習

ノンプロ研で開催されている「技術ライティング講座 第5期」にホストとして参戦中。

tonari-it.com

この講座では「技術に関する文章を書くための知識とスキルを身につける」をゴールに、全9回+卒業LTという日程で学んでいます。

6/29(水)、8回目の講座が開催されました。
今回もまとめと演習に取り組んでいきます。

講座内容まとめ

8回目のテーマは「GitHubによる共同作業」です。
技術書の執筆を行う際にGitHubを使って編集者とやりとりをする流れを、ハンズオン形式で学びました。

togetter

当日の受講生の皆さんのツイートまとめです。
このようにノンプロ研では受講中Twitterでのアウトプットを推奨しており、毎回講師の方がまとめを作ってくれています。

togetter.com

講座のアジェンダ

  1. GitHubとは
  2. GitHubによる共同作業
  3. 共同作業の実践

内容

ノンプロ研の技術ライティングでは技術書の執筆を最終ゴールとしており、その際に活用する技術について、前回に引き続き学習してきました。

ひとつめのGitHubとは】では、前回学んだGitのリポジトリを共有するサービスであるGitHubについて、その概要を学びました。

github.com

前回学んだバージョン管理ツールGitは、ローカルPCにあるファイル・フォルダの履歴を管理するための仕組みでした。ローカルで作成したGitリポジトリ「ローカルリポジトリと呼ばれます。それに対して今回のGitHubでは、履歴をみんなで共有するための「リモートリポジトリ」を扱います。

リモートリポジトリの操作も基本的にはGitで行います。前回のおさらいになりますが、Gitでできることは以下になります(このうちリモートリポジトリに関するものは下の3つ)。

Gitでできること 呼び方 英語
変更履歴の記録 コミット commit
変更履歴の分岐 ブランチ branch
変更履歴の確認 ログ log
変更履歴の統合 マージ merge
●リモートから複製 クローン clone
●リモートに反映 プッシュ push
●リモートから反映 プル pull

ふたつめのGitHubによる共同作業】では、GitとGitHubを使って執筆者と編集者がやり取りする作業のイメージを学びました。

前回に引き続き、耳馴染みない用語がたくさん登場しており、今の作業が何なのか迷子になってしまいがちですね。実際の作業時には「今やっていることがどの段階の作業で、ローカルリポジトリ・リモートリポジトリのどちらに関する操作なのか」を一つ一つ確認しながら、繰り返し練習していくのが良いのかなと思います。

みっつめの【共同作業の実践】では、実際にライティング講座用のGitHubリモートリポジトリを使って、執筆者(受講者)が編集者(講師)にレビューをしてもらって執筆する手順を学びました。

具体的なコマンドとGitHub画面での操作手順は、この記事の後半で整理していきます。

今回の講座で使用するコマンド一覧

コマンド 説明
cd ディレクトリ名 ディレクトリを移動する cd writing-005
ls -a 現在のディレクトリの内容をすべて表示する ls -a
code ディレクトリ名 ディレクトリをエディタで開く code .
git version Gitのバージョンを表示する git version
git init 現在のディレクトリにリポジトリを作成する git init
●git clone クローン用URL リモートリポジトリをクローンする git clone https://github~
git branch ブランチ名 ブランチを作成する git branch massa
git branch ブランチ一覧を表示する git branch
git checkout ブランチ名 ブランチを切り替える git checkout massa
git add ディレクトリ名またはファイル名 ディレクトリまたはファイルをステージングする git add .
git commit コミットする git commit
●git remote リモートリポジトリを表示する git remote
●git push リモート名 ブランチ名 リモートリポジトリにプッシュする git push origin massa
●git pull リモート名 ブランチ名 リモートリポジトリからプルする git pull origin main
git status リポジトリの状態を確認する git status
git merge ブランチ名 ブランチをマージする git merge massa
git log --oneline コミットの履歴を確認する git log --oneline
git log --oneline --graph コミットの履歴をグラフィカルに表示する git log --oneline --graph

※前回講座のコマンド一覧との差分(リモートリポジトリが絡むコマンド)には●を記載しています。

要点整理

今回の演習は講座中に手を動かす写経がメインでした。
この記事では、前回に引き続き操作手順をまとめる形で整理しながらアウトプットしていきます。

GitHubによる共同作業の流れ

執筆者と編集者で共同作業する流れは以下のようになります。

(1) 編集者による準備作業

 - リモートリポジトリを作成する
 - 執筆者を招待する
 - ローカルリポジトリへのクローンを行う

(2)執筆者の準備作業

 - 招待してもらったリモートリポジトリに参加する
 - ローカルリポジトリへのクローンを行う
 - ローカルリポジトリで作業用ブランチを作成して切り替える

(3)執筆者の執筆作業

 - VSCodeを使って作業用ブランチで執筆する
 - 変更をステージング&コミット

(4)執筆者の提出作業

 - 作業用ブランチをリモートリポジトリへプッシュする
 - レビュアーを選択してプルリクエストを送る

(5)編集者の確認作業

 - レビューを行う
  a. もう少し! → 修正依頼を出して(3)へ
  b. オッケー! → 作業用ブランチをメインブランチにマージして(6)へ

(6)執筆者の次の作業

 - リモートリポジトリをプルして3へ

執筆者は2までの準備を済ませたら、3〜6の流れを繰り返すルーチンで執筆を行います。

GitHubでの執筆準備

執筆者の準備作業

まず初めに、編集者にリモートリポジトリに招待してもらい作業前の準備をします。

# ローカルリポジトリへのクローン
git clone https://github.com/~

# 作業用ブランチの作成と切り替え
git branch massa
git chekcout massa

クローン時、GitHubへはじめてアクセスする場合は、ユーザー名とアクセストークンの入力が必要です。
アクセストークンの期限が切れていることもあるので要注意です。

GitHubでの執筆ルーチン

執筆者の執筆作業

実際に執筆を行う際の流れです。以下の手順を、作業が一区切りつくまで繰り返します。

# カレントディレクトリがバージョン管理したいプロジェクトフォルダであることを確認

# VS Codeでカレントディレクトリを開いて執筆
code .

# 更新したらステージングとコミット
git add .
git commit

コミットのタイミングは「一連の作業の区切り」もしくは「1日の作業の区切り」で行うのが目安です。

また、間違えてコミットした場合は取り消したりせず、修正し直して再度コミットする「前向き」の修正をするようにしましょう。

執筆者の提出作業

執筆が一区切りしてレビューしてもらいたい時に行います。

#作業ブランチをリモートリポジトリにプッシュする
git push origin massa

ブランチをプッシュした後に、GitHubリポジトリの画面上に出ている「Compare & pull request」ボタンからプルリクエストを送ります。

この時、Reviewsからレビュアーを選択し、レビューしてもらう相手にレビュー依頼を送ります。
レビューがOKだったら次の作業に進み、NGだったら再び執筆作業に戻ります。

執筆者の次の作業

レビューが通れば、作業用ブランチをメインブランチにマージしてもらえます。
マージされるのはリモートリポジトリの方なので、ローカルリポジトリの方もリモートの変更を取り込んでおく必要があります。

# リモートリポジトリをプル
git pull origin main

プルするのは作業用ブランチのままで行います(git checkout 〜でブランチを移動す必要なし)。
この後、再び執筆作業に戻ります。

色々確認

# リポジトリの状態を確認
git status

# ブランチ一覧を表示(現在のブランチの確認も)
git branch

# リモートリポジトリを表示
git remote

# コミットの履歴を表示
git log --oneline
git log --oneline --graph

おわりに

前回・今回でGitとGitHubについて学んできました。

主に作業手順についてまとめてきましたが、用語に関してはあまりまとめられていない感じです。引き続き学習を続けていきたいです。