Skip to the content.

第2章 セクション8 Git

第2章ではGitHub Pagesを用いて、第1章で作成したサイトを公開することを目指します。 このセクションでは、それに必要なGitの使い方を学びます。

Gitについて

ソフトウェアの開発では、機能の拡充、バグの対策など、様々な改良が日々行われます。 第1章で作成したJekyllのソースファイルでも書き直しが行われましたし、これからも行われるでしょう。 それを記録するのがバージョン管理システムで、その代表格がGitです。

Gitの対象となるディレクトリとその履歴情報をレポジトリといいます。 このセクションでは、my-blogのソースファイルをGitで管理する実例を通して、Gitの基本的使い方を学びます。

Gitのインストールと初期設定

Linuxディストリビューションには、Gitのパッケージが用意されています。 Ubuntuならば、

$ sudo apt install git

で簡単にインストールできます。

Gitにユーザ名とメールアドレスを登録します。

$ git config --global user.name "ユーザー名"
$ git config --global user.email "メールアドレス"

ユーザ名に空白がある場合、例えば「Taro Yamada」のような場合、ダブルクォートで囲む必要があります。 これは、Bashが空白を引数の区切りと解釈するためです。

Gitのユーザ名、メールアドレスとGitHubのユーザ名、メールアドレスは別物ですが、同じにすることをお勧めします。 また、Gitに登録したユーザ名とメールアドレスはGitHubを通して公開されるということに注意してください。

次に、Gitで使うエディタを設定します。

$ git config --global core.editor "エディタ名"

エディタにVS Codeを指定する場合は--waitオプションをつけてください。

$ git config --global core.editor "code --wait"

設定をしない場合は、デフォルトのエディタ(Ubuntuではnano)になります。

GitHubにおけるメイン・ブランチのデフォルト名はmainです。 それにあわせて、Gitのデフォルト・ブランチ名をmainに設定します。

git config --global init.defaultBranch main

この設定は、次に述べるgit initよりも前に行ってください。

レポジトリの初期化

カレントディレクトリを、my-blogディレクトリに移動します。 このディレクトリをGitのレポジトリにするには、initコマンドを使います。

$ git init
$ ls -a
.  ..  .git  .gitignore  .ruby-version  404.html  Gemfile  Gemfile.lock  _config.yml  _posts  _site  about.md  assets  index.md  mise.toml

新たに.gitというディレクトリが作成されていることがわかります。 このディレクトリにバージョンの履歴情報が保存され、その管理をGitが行うのです。

作業ディレクトリの状態確認

作業ディレクトリとはGitの管理対象であるディレクトリのことで、ワーキング・ツリーとも言います。 ここでは、my-blogディレクトリが作業ディレクトリにあたります。

作業ディレクトリの状態を確認するには次のようにタイプします。

$ git status
On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        .ruby-version
        404.html
        Gemfile
        Gemfile.lock
        _config.yml
        _posts/
        about.md
        assets/
        index.md
        mise.toml

Gitの表示メッセージは良く読むようにしましょう。 そこには、次に何をしたらよいかが書かれていることが少なくありません。 ここでは、次のようなことが書かれています。

  (use "git add <file>..." to include in what will be committed)

後にコミットされるファイルをgit add <file>...を使って(ステージング・エリアに)含めましょう、という意味です。 まだステージング・エリアの説明はしていませんが、とりあえずこのようなメッセージが出たら、それに従っておいても大きな間違いにはならないことが多いです。

.gitignore

ところで、git addを使う前に、履歴に残すべきファイルと残すべきでないファイルについて考えてみましょう。

$ ls -a
.  ..  .git  .gitignore  .ruby-version  404.html  Gemfile  Gemfile.lock  _config.yml  _posts  _site  about.md  assets  index.md  mise.toml

この中で履歴に残す必要のないのは、_siteです。 なぜなら、その内容はJekyllがソースから生成したものだからです。 そして、このレポジトリをクローンしたユーザーは_siteをいつでもJekyllで生成できます。

このように、生成物については履歴に残す必要がない、というのがひとつの原則です。

履歴に記録しないファイルは「.gitignore」というファイルに記述します。 それにより、Gitはそれらのファイルを記録対象から外します。

ところで、.gitignoreはすでにディレクトリ内にありました。 これは、Jekyllがnewコマンドで作成したものです。 中身を確認してみましょう。 catコマンドを使うとファイルの中身を表示できます。

$ cat .gitignore
_site
.sass-cache
.jekyll-metadata

Jekyll自身が作ったものだけあって、_siteはきちんと入っていましたね。 .sass-cache.jekyll-metadataはディレクトリ内にはありませんが、入れておいて良いでしょう。

さきほどgit statusしたときに、履歴に残すべきファイルのリストに_siteがありませんでした。 それは、_site.gitignoreに書かれていたからなのです。

git add

Gitでは、ファイルを直接履歴に書くことはできません。 その中間にステージング・エリアがあり、それを通して履歴に書き込みます。

第1段階のステージング・エリアにファイルやディレクトリを登録するのがgit addコマンドです。 全てのファイルをaddするには、カレントディレクトリ「.」をaddすれば良いので、

$ git add .

とタイプします。 最後にピリオド(カレントディレクトリを指す)があることに注意してください。

$ git add .
$ git status
On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   .gitignore
        new file:   .ruby-version
        new file:   404.html
        new file:   Gemfile
        new file:   Gemfile.lock
        new file:   _config.yml
        new file:   _posts/2026-01-30-st-george-church.md
        new file:   _posts/2026-01-31-kapitan-keling-mosque.md
        new file:   about.md
        new file:   assets/images/DimSum.jpg
        new file:   assets/images/KapitanKelingMosque.jpg
        new file:   assets/images/StGeorge.jpg
        new file:   assets/images/StreetArt.jpg
        new file:   index.md
        new file:   mise.toml

$

記録すべきファイルがすべて「Changes to be committed(コミット予定の変更点)」に書かれています。 このことは、表示されているファイルがステージング・エリアに登録されたということを意味します。 なお、ステージング・エリアに誤ってファイルを入れてしまった場合はアンステージ(ステージング・エリアから除くこと)できますが、それもGitの出力の中に書かれています。

  (use "git rm --cached <file>..." to unstage)

git commit

ステージング・エリアのファイルを記録に残すことをコミットといいます。 英語のコミット(commit)にはいろいろな意味がありますが、その中に「(物事を)(記憶・焼却など)にゆだねる、付す」という意味があります。

commit an idea to writing => 着想を書き留める

git commitコマンドでファイルを記録し、その記録に関するメモを残すことができます。 コマンドを発行すると、エディタが立ち上がるので、短くメモを書きます。 例えば「Add first draft of blog」などです。 コミットは一般には英語で書くことが多いです。

コミットするとメッセージが表示されます。

$ git commit
[main (root-commit) 9c39a64] Add first draft of blog
 15 files changed, 466 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 .ruby-version
 create mode 100644 404.html
 create mode 100644 Gemfile
 create mode 100644 Gemfile.lock
 create mode 100644 _config.yml
 create mode 100644 _posts/2026-01-30-st-george-church.md
 create mode 100644 _posts/2026-01-31-kapitan-keling-mosque.md
 create mode 100644 about.md
 create mode 100644 assets/images/DimSum.jpg
 create mode 100644 assets/images/KapitanKelingMosque.jpg
 create mode 100644 assets/images/StGeorge.jpg
 create mode 100644 assets/images/StreetArt.jpg
 create mode 100644 index.md
 create mode 100644 mise.toml
$ 

このように、Gitにはファイルの内容だけでなくモード(100644)も記録されます。

(注)Gitのファイルモードについては、Gitリファレンスのgit-fast-importを参照してください。

$ git status
On branch main
nothing to commit, working tree clean
$

Git の状態は、mainブランチで、コミットすべきものはなく、作業ディレクトリ(working tree)はクリーン(履歴の最後の状態と同じ)です。

参考リンク

最後にGitの参考ページのリンクを付けておきます。