目次を開く(全 12 章)
01
なぜ履歴を残すのか
ファイルを直していると、必ず「昨日の状態に戻したい」瞬間が来ます。そのときのために、フォルダを複製して名前を付けていく方法があります。site_旧、site_修正版、site_本当に最終。誰もが一度は通る道ですが、すぐに破綻します。
| フォルダを複製する | Git を使う |
|---|---|
| どれが最新か、名前からは分からない | 最新は常にひとつ。過去は履歴の中にある |
| どこを変えたのか、開いて見比べるしかない | git diff で変えた行だけが出る |
| なぜ変えたのかは記録に残らない | コミットごとに理由を書き残せる |
| 複製のぶんだけ容量が増える | 差分だけを持つので軽い |
| 他の人と混ぜられない | GitHub 経由で共有・共同作業できる |
Git は変更の履歴を記録しておく道具です。区切りのいいところで「ここまでを 1 つの記録にする」と宣言していくと、あとからその地点に戻ったり、どこで壊れたのかを探したりできます。ひとりで作るときでも十分に元が取れます。
この 3 つは名前が似ていますが、担当がはっきり分かれています。Git は手元のパソコンで履歴を記録する道具、GitHub はその履歴をインターネット上に預けておく置き場、Netlify は預けたファイルを Web サイトとして配信するサービスです。Git だけでも、Git + GitHub だけでも成立します。
02
Git を使えるようにする
ここからはターミナル(Windows なら Git Bash やターミナル、macOS ならターミナル.app)を使います。1 行ずつ打って Enter、それだけです。まず入っているか確かめましょう。
git --version
# git version 2.51.0 のように出れば入っています
何も出ずにエラーになったら、git-scm.com からインストールしてください。macOS なら xcode-select --install でも入ります。入ったら、最初の 1 回だけ次の設定をします。
# 記録に残る名前とメールアドレス。GitHub と同じものにしておくと分かりやすい
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
# 最初のブランチ名を main にする(昔は master でした)
git config --global init.defaultBranch main
# 設定できたか確認する
git config --global --list
ここで設定したアドレスは、GitHub に上げたコミットの一部として誰でも見られる状態になります。知られたくない場合は、GitHub の設定画面で発行される 12345678+username@users.noreply.github.com という形式の非公開アドレスを代わりに指定してください。
03
リポジトリを作る
履歴を記録する対象のフォルダをリポジトリと呼びます。作りたいサイトのフォルダへ移動して、git init と打つだけです。
# サイトのフォルダへ移動する(パスは自分のものに置き換えてください)
cd ~/Documents/my-site
# ここを Git の管理下に置く
git init
# 今どうなっているかを見る
git status
.git という隠しフォルダが 1 つできます。ここに履歴のすべてが入ります。このフォルダを消すと履歴も消えますので、触らないでください。逆に言えば、Git をやめたくなったら .git を消すだけで元のただのフォルダに戻ります。
記録しないものを決める(.gitignore)
フォルダの中には、履歴に入れたくないものが混ざります。macOS が勝手に作る .DS_Store、エディタの設定、そしてパスワードや API キーです。.gitignore という名前のファイルを作り、そこに書いたものは Git が最初から見なくなります。
# OS が勝手に作るもの
.DS_Store
Thumbs.db
# エディタの設定
.vscode/
.idea/
# 秘密の値。絶対に履歴へ入れない
.env
*.key
# ライブラリを入れたときに増えるもの
node_modules/
コミットしてしまったパスワードは、あとからファイルを消しても履歴の中に残り続けます。GitHub に push したあとなら、消す作業より先にそのパスワードを無効にして作り直すのが正解です。.gitignore は「入れる前に」書いておくのが肝心です。
04
add と commit
Git がややこしく感じるのは、ファイルの置き場所が 3 つあるからです。ここさえ掴めば、あとの操作はほとんど暗記が要りません。
- 作業ツリー
- いま編集しているフォルダそのもの。保存しただけのファイルはここにいます。Git はまだ何も記録していません。
- ステージ
- 次のコミットに入れるものを並べておく台。
git addでここに載せます。3 つ直したうち 2 つだけを記録する、といった選び方ができます。 - リポジトリ
- 確定した履歴。
git commitで、台に載っているものがまとめて 1 つの記録になります。
# 何が変わったかを確認する。迷ったら、いつでもこれ
git status
# 台に載せる。ファイル名を指定するか、. で全部
git add index.html
git add .
# 台に載っているものを 1 つの記録にする
git commit -m "トップページの見出しを書き直した"
# 直したら、また add して commit。この繰り返しです
コミットメッセージの書き方
メッセージは未来の自分への手紙です。凝る必要はありませんが、何をしたのかが一行で分かるようにします。
- 「何を」ではなく「何のために」。
index.html を修正より問い合わせ先の電話番号を新しい番号に変えた。 - 1 コミット 1 目的。配色の調整と誤字修正を混ぜると、あとで片方だけ戻せません。
- 日本語で構いません。読むのは自分です。
updateとfixだけが並ぶ履歴より、ずっと役に立ちます。
「ここまでは動く」と言える所まで来たらが目安です。1 日 1 回でも、30 分に 1 回でもかまいません。細かすぎて困ることはほとんどなく、大きすぎると戻したいときに困ります。
05
履歴を読む
記録したものは、いつでも取り出せます。よく使うのは、一覧を見る log と、変えた中身を見る diff の 2 つです。
# 履歴を 1 行ずつ、新しい順に
git log --oneline
# a1b2c3d 問い合わせ先の電話番号を新しい番号に変えた
# 9f8e7d6 トップページの見出しを書き直した
# 4c5b6a7 最初のコミット
# まだコミットしていない変更を、行単位で見る
git diff
# 台に載せたあとの変更を見る
git diff --staged
# あるコミットの中身を見る(先頭の 7 文字で足ります)
git show 9f8e7d6
git log や git diff の表示が長いときは画面が固まったように見えますが、閲覧モードに入っているだけです。q を押せば抜けられます。ここで慌てて閉じてしまう人がとても多いので、覚えておいてください。
06
元に戻す
Git を使う最大の理由がこれです。戻し方は「どこまで進んでしまったか」で変わります。まだコミットしていないなら git restore、もうコミットしたなら git revert です。
# 編集を捨てて、最後のコミットの状態に戻す
git restore style.css
# フォルダ全部を戻す
git restore .
# add したのを取り消す(台から降ろすだけ。編集内容は残る)
git restore --staged style.css
# 2 つ前のコミットの時点の中身を取り出す
git restore --source=HEAD~2 style.css
# コミットそのものを取り消す(打ち消すコミットが 1 つ増える)
git revert 9f8e7d6
git restore はまだ記録していない編集を、確認なしに捨てます。Git が守ってくれるのはコミットした所までなので、これだけは元に戻せません。実行する前に git status と git diff で、捨ててよいものか確かめる癖をつけてください。
checkout ではなく restore と switch
古い記事では、ここで git checkout というコマンドが出てきます。間違いではありませんが、checkout は「ファイルを戻す」と「ブランチを移動する」というまったく別の仕事を 1 つで兼ねていたため、とても分かりにくいコマンドでした。
そこで Git 2.23(2019 年)で役割が 2 つに分けられました。いまから覚えるなら、こちらだけで十分です。
| やりたいこと | 今のコマンド | 昔のコマンド |
|---|---|---|
| ファイルの編集を捨てる | git restore style.css | git checkout -- style.css |
| add を取り消す | git restore --staged style.css | git reset HEAD style.css |
| ブランチを移動する | git switch main | git checkout main |
| ブランチを作って移動する | git switch -c fix-header | git checkout -b fix-header |
名前を見れば何をするコマンドか分かる、というのが新しい方の良いところです。restore は復元、switch は切り替え。他人の記事で checkout を見かけたら、この表で読み替えてください。
07
GitHub に置く
ここまでの履歴は、あなたのパソコンの中にしかありません。GitHub はその控えをインターネット上に預けておく場所です。パソコンが壊れても残りますし、次章の Netlify はここを見て公開してくれます。
- アカウントを作る
github.com で登録します。個人利用は無料です。
- 空のリポジトリを作る
右上の + から New repository。名前を付けて Create。README や .gitignore を追加するチェックは外しておくと、この後がすんなり進みます。
- 手元のフォルダと結びつける
作成後の画面に出るコマンドをコピーするだけです。下に同じものを載せています。
- 送る
git pushで、履歴がまるごと GitHub に上がります。
# 送り先に origin という名前を付けて登録する(URL は自分のものに)
git remote add origin https://github.com/username/my-site.git
# ブランチ名を main にそろえる
git branch -M main
# 送る。-u は「次からは git push だけでいいよ」という意味
git push -u origin main
# 2 回目以降は、これだけ
git push
GitHub のログインパスワードは使えません。個人アクセストークンを Settings → Developer settings から発行し、パスワード欄にそれを貼ります。毎回打つのが面倒なら GitHub CLI を入れて gh auth login を 1 回実行しておくのが、いちばん手間がかかりません。
なお GitHub Pages という、GitHub だけで公開できる仕組みもあります。それでも本稿で Netlify を使うのは、公開ディレクトリの指定やフォームの受け取り、独自ドメインの設定といった「その次」が、画面から迷わず触れるためです。
08
ブランチで試す
ブランチは履歴の枝分かれです。「うまくいくか分からないけど試したい」ときに、本線を汚さずに作業できます。最初は、この 3 つの流れだけ覚えれば足ります。
# 1. 枝を作って、そこへ移る
git switch -c fix-header
# ここで好きなだけ編集して、add と commit を繰り返す
# 2. 本線に戻る
git switch main
# 3-a. うまくいったので取り込む
git merge fix-header
git branch -d fix-header
# 3-b. やっぱりやめる場合は、枝ごと捨てる
git branch -D fix-header
いま自分がどの枝にいるかは git branch で確認できます。ブランチを移る前には、必ずコミットを済ませておいてください。中途半端な編集を抱えたまま移ろうとすると、Git が止めてくれます。
ひとりで小さなサイトを作っている間は、main に直接コミットしていく形でまったく問題ありません。ブランチが本当に効いてくるのは、人が増えたときと、公開中のサイトを壊さずに大きな改修を試したいときです。必要になってから覚えれば間に合います。
09
Netlify で公開する
Netlify は、置いたファイルをそのまま Web サイトとして配信してくれるサービスです。このガイドで作ってきたようなビルドの要らない静的サイトとは、とりわけ相性がいい組み合わせです。無料の枠で個人サイトは十分に運用できます。
いちばん簡単な方法:フォルダを落とす
アカウントを作り、管理画面の指定された枠にフォルダごとドラッグ&ドロップするだけです。数秒で https://ランダムな名前.netlify.app という URL が発行され、もう世界中から見られます。Git を通しません。まず公開の感触を掴みたいときは、これで十分です。
おすすめ:GitHub とつなぐ
一度つないでおくと、git push するたびに公開サイトが自動で更新されます。手作業でのアップロードが消えてなくなるので、慣れたらこちらへ移ってください。
- Netlify に登録する
netlify.com で、GitHub アカウントを使ってサインアップするのがいちばん早道です。
- Add new site → Import an existing project
GitHub を選び、公開したいリポジトリを一覧から選びます。
- ビルドの設定を答える
Build command は空欄のまま。Publish directory は、
index.htmlが置いてある場所を指定します。ルートに置いてあるなら.のままで結構です。 - Deploy を押す
1 分ほどで公開されます。以降は push するだけで、Netlify が勝手に取りに行って更新します。
ここで指定した場所の index.html がトップページになります。「Page Not Found」と出たら、まずこの設定を疑ってください。サイト一式を public/ や docs/ の中に入れているなら、その名前を書く必要があります。設定は公開後でも Site configuration → Build & deploy から直せます。
設定をファイルとして残しておくこともできます。リポジトリのルートに netlify.toml を置くと、管理画面での指定より優先されます。チームで共有するときや、設定をコードとして履歴に残したいときに便利です。
# ビルドの設定
[build]
publish = "."
# 見つからなかったときに出すページ
[[redirects]]
from = "/*"
to = "/404.html"
status = 404
サイト名は Site configuration から変更でき、https://好きな名前.netlify.app にできます。独自ドメインを持っているなら Domain management から追加してください。HTTPS の証明書は自動で用意され、更新も自動なので、こちらですることはありません。
10
公開したあと
ここまで来れば、日々やることは 3 行になります。直して、記録して、送る。それだけで公開中のサイトが更新されます。
# 毎日の流れは、この 3 つの繰り返し
git add .
git commit -m "営業時間の表記を直した"
git push
# あとは Netlify が勝手に公開してくれる
- 反映されないときは、まず再読み込み。ブラウザが古いファイルを覚えています。Shift を押しながら再読み込みすると、覚えている分を無視して取り直します。
- Netlify の Deploys 画面を見る。公開が成功したか、失敗したかが一覧で分かります。日時が更新されていなければ、push が届いていません。
- 公開前に確認できます。ブランチを push すると、本番とは別の URL でプレビューが作られます。試したいときに便利です。
404.htmlを置いておく。存在しない URL を開かれたときに、トップへ戻る道を用意しておけます。
スマートフォンの実機で開いてみること、そして開発者ツールの Lighthouse を一度走らせてみることをおすすめします。画像が重すぎる、alt が抜けている、文字と背景のコントラストが足りない、といった見落としが具体的な点数と一緒に出てきます。
11
つまずきやすい所
最初のうちに引っかかるのは、だいたい決まっています。ほとんどは手元では動くのに、公開すると動かないという形で現れます。
| 症状 | よくある原因 |
|---|---|
| 公開したら画像だけ出ない | ファイル名の大文字・小文字。macOS と Windows は区別しませんが、公開サーバーは区別します。Logo.png と logo.png は別物です |
| Page Not Found と出る | Publish directory の指定違い、または index.html がその場所にない |
| CSS が当たらない | href のパス違い。/assets/… と先頭に / を付けると、サーバーのルートからの意味になります |
| 直したのに変わらない | push できていないか、ブラウザのキャッシュ。Netlify の Deploys で日時を確認 |
| ターミナルから抜けられない | log や diff の閲覧モード。q で戻ります |
| コミットのメッセージを書く画面から出られない | Vim が開いています。Esc のあと :wq と打って Enter。次からは -m "…" を付けましょう |
| push が拒否される | GitHub 側に自分の知らない変更がある。git pull してから、もう一度 push |
| fatal: not a git repository | リポジトリの外にいます。cd で移動するか、git init を忘れています |
git status はいつ打っても安全です。今どのブランチにいて、何が変更されていて、次に何ができるのかを、Git 自身が教えてくれます。分からなくなったら、まずこれを打ってください。
12
次の一歩
これで、書いたものを人に見せられるようになりました。ここから先は、必要になったときに 1 つずつ足していけば十分です。
- プルリクエスト — 変更を「提案」として見せ、確認してから取り込む仕組み。共同作業の中心です。
- Issue — やることリスト。ひとりでも、思いついた改善をここに溜めておけます。
- GitHub Actions — push をきっかけに、点検やビルドを自動で走らせる仕組み。
- Netlify Forms — お問い合わせフォームを、サーバーを書かずに受け取れます。
- 独自ドメイン — 年に千数百円ほどで、自分の名前の URL にできます。
公開してみると、手元で見ていたときには気づかなかったことが必ず出てきます。読み込みが遅い、スマートフォンで文字が小さい、リンクが切れている。それを直せるのは、公開した人だけです。完璧になってから出すより、出してから直していくほうが、ずっと速く良くなります。