おもこん

おもこんは「思いつくままにコンピュターの話し」の省略形です

Jekyllを勉強中(4)

作成したGitHubのレポジトリをローカルにクローンして、Jekyllでテストすることを説明します。 あわせて、Gitについても簡単に触れます。 GitはJekyllに限らず、開発では必須のアプリです。

Gitについて

GitHubはその名の通り、Git(バージョン管理アプリ)+Hub(中心、ネットワークの経由地)です。 すなわち、Gitレポジトリを複数のユーザが共有するためのハブです。 したがって、GitHubを活用してウェブページを作成する上で、Gitは極めて重要です。 まだ使ったことのない人は、この機会に使い方を覚えましょう。 すでにGitに慣れている人は、Gitの説明の部分を飛ばして構いません。

インストール

Linuxではディストリビューションにパッケージがあります。 Ubuntuならば、

$ sudo apt install git

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

Windowsの場合はGitのホームページから、「Downloads」をクリックしてダウンロードページに行き、Windows版のインストーラをダウンロードします。 あとはインストーラの指示に従ってインストールします。

Gitの使い方

Gitのすべてを説明するには紙面が足りませんので、主な使い方を説明します。

初期設定

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

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

ユーザ名に空白がある場合、例えば「Taro Yamada」のような場合、ダブルクォートで囲む必要があります。 これは、Bashが空白を引数の区切りと解釈するためです。 なお、ユーザ名は本要でなくても構いません。 Gitのレポジトリの中でコミットした人を識別するために使われます。 また、そのレポジトリをGitHubに公開するとその名前も公開されることになります。

GItでコミットするときにエディタが必要になりますが、その設定は

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

です。 Ubuntuではこの設定をしないとデフォルトとしてnanoが使われます。

GitHubのレポジトリのクローン

前回作ったGitHubのレポジトリをローカル(自分の使っているパソコン)にコピーしましょう。

  • ブラウザでGitHubにアクセスする。 サインイン(ログインのこと)していない場合は、「Sign in」をクリックして、サインインする。
  • 画面右上のアイコンをクリックし、現れたポップアップメニューから「Your repositories」をクリックする
  • 前回作成したレポジトリ名をクリックする

ここまでで、レポジトリが表示されます。 ここで、緑色のボタン「Code」をクリックし、ポップアップメニューの四角が斜めに重なっているアイコン(コピーを示すアイコン)をクリックします。 私の「Jekyll-tutorial-for-beginners」の画面で赤い丸で囲まれたところがアイコンです。

レポジトリとコピーアイコン

クリックしても何も目に見える変化はありませんが、実はパソコンのクリップボードにレポジトリのアドレスがコピーされています。

  • 端末(Windowsではコマンドプロンプト、以下は「端末」と表示)から、「git clone (クリップボードをペースト)」と入力する。 クリップボードからペーストするには、Linuxでは「Shift+Ctrl+V」を、Windowsでは「Ctrl+V」を押す。 Windowsで上手く行かない場合は、コマンドプロンプトの設定ができていない可能性がある。 「コマンドプロンプトでコピペ」でグーグル検索するとやり方がヒットしますので、参照してください。 私のレポジトリをクローンする場合はコピペの結果「git clone https://github.com/ToshioCP/jekyll-tutorial-for-beginners.git」となります。
  • エンターキーを押すと、レポジトリがコピーされる。 レポジトリ名のディレクトリがクローンされたレポジトリ。 ディレクトリを開くと「README.md」と「_config.yml」が入っているはず。

うまくクローンできたでしょうか? 良くわからない場合は「git clone」でネットを検索すると解説サイトが見つかると思います。

レポジトリの状態確認

端末のカレントディレクトリをクローンされたレポジトリに移動します。 レポジトリの状態を確認するには次のようにタイプします。

$ git status
ブランチ main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean
  • 「status」は状態、状況のこと。
  • ブランチについては、ここでは知らなくても大丈夫です。 後で必要が生じたら説明しますが、おそらく使わないでしょう。 操作の対象となっているのが「main」(というブランチ)だということが、表示されている。
  • 次の英語は「ブランチは'origin/main'(これはGitHubのレポジトリのこと)とともに、最新にアップデートされています」という意味。
  • 最後の行は「(新たな)コミットはなし。ワークツリーには何も(新しいことが)無し」ということだが、若干説明を加える。 ワークツリーはこのディレクトリ(これを作業ディレクトリともいう)のこと。 例えば、このディレクトリに新しいファイルを作ることは「ワークツリーに新規ファイルを作成」することになる。 その後に「git status」すれば表示は当然変わってくる。

Jekyllをローカルで使う

クローンされたレポジトリでJekyllを動かしてみましょう。 ローカルで動かすためにはいくつか準備が必要です。

Gemfileの追加

Gemfileはそのレポジトリで使うRubyのライブラリを記述します。 「gem」(ジェム)は英語で宝石のことです。 Rubyの用語では、「gem」はRubyのライブラリを指します。 さらに、

  • ライブラリであるgemをまとめたRubygemsからライブラリをダウンロードするコマンドも「gem」。 例えば「gem install jekyll」とすると、jekyllをダウンロードできる。 gemではなくbundlerというコマンドを使うことも多い。 ただ、それはgemが必要なくなったということではない。 gemとbundlerでは動作が違うので状況で使い分ける。
  • Rubygemsとパッケージ管理の全体を指して「gem」ということもある。

Gemfileの記述では、必要なライブラリ名を「gem」の後に続けます。

source "https://rubygems.org"

gem "jekyll-theme-leap-day"
gem "webrick"
  • 最初の行はライブラリをRubygemsから取得するという意味。
  • テーマの「jekyll-theme-leap-day」のgemを入れると、「jekyll」もインストールされるので、「gem jekyll」を書かなくても良い。
  • webrick」はJekyllがローカルでウェブサーバとしてレポジトリのサイトを配信するために使われるライブラリ。 現在(2022/8/14)の最新バージョンのRubyではgemをインストールしなければならない。

Gemfileを記述したら、Bundlerでインストールをします。 BundlerはRuby2.6.0から標準添付されているので、特にインストールの必要はありません。

$ bundle install
Fetching gem metadata from https://rubygems.org/...........
Resolving dependencies...
Using public_suffix 4.0.7
Using bundler 2.3.16
... ... ...
... ... ...

Using jekyll-theme-leap-day 0.2.0
Bundle complete! 3 Gemfile dependencies, 31 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
$

「bundle」はBundlerを端末から起動するためのコマンド名です。 「install」はgemをインストールするサブコマンドです。 BundlerはGemfileから、記述されているgemが依存するgemとそのバージョンをすべて調べ、「Gemfile.lock」というファイルに書き出します。 さらに、それらすべてをインストールします。 「Gemfile.lock」に書かれたバージョンのgemを起動するには「bundle exec」コマンドを使います。 例えば「bundle exec jekyll serve」のようになります。 「bundle exec」なしで「jekyll serve」としないでください。 もしそうすると「Gemfile.lock」とは無関係にjekyllを起動することになるのでバージョンの違うJekyllが起動される可能性があります。 したがって、レポジトリ内では常に「bundle exec」をつけてgemを起動するようにしてください。

index.mdの作成

README.mdはGitHub pagesではブラウザで表示されましたが、ローカルでは同じように表示されません。 それに、そもそもREADME.mdはレポジトリ(GitHub Pagesではない)のトップ画面でレポジトリそのものを説明するためのものです。 それに対してGitHub Pagesのトップページはレポジトリとは別に作られたスペースにおける「index.html」になります。

JekyllはMarkdownをHTMLに変換してくれるので、index.htmlを直接書かずMarkdownのindex.mdを書けば十分です。 私のレポジトリ用のindex.mdを例として示しておきます。 なお、index.mdはレポジトリのトップディレクトリに置きます。

---
layout: default
title: Jekyll tutorial for beginners
---
# jekyll-tutorial-for-beginners
Jekyll is a framework for static web sites. This repository provides a tutorial in the GitHub page.

# Under Construction

This repository contains Jekyll source files for the GitHub page.

The contents of the page is a Jekyll tutorial for beginners.

But it is NOT completed yet.
  • 3つの-の行で囲まれた部分はフロント・マター(書物の前付--書籍の本文の前に入れる序文、目次などの総称)という。 そこには、yaml形式でそのファイルの情報を書く。 「キー: 値」はハッシュ(連想配列)を表す。 区切りにはコロン(:)と半角空白を入れる。 空白は省略できない。
  • 「layout」はその文書のレイアウトを表すファイルを指す。 defaultはレポジトリ内にはないが、テーマのgemで提供されている。
  • 「title」はこの記事のタイトルで、レイアウトによって使われる。 通常は、ブラウザのタグに現れるタイトルにしたり、表示画面の最初に<h1>などを使って表示したりする。

フロントマターを除いた部分は本体、またはコンテンツと呼ばれます。 ここはマークダウンで記述します。

なお、フロントマターが無いファイルについてはJekyllは何もせずにそのまま出力ページにコピーします。 フロントマターに記述する内容が無くても、MarkdownをHTMLにしたければフロントマターが必要です。 その際は、---を2行書いておくだけで大丈夫です。

_config.ymlの変更

Readme.mdは出力ページに生成する必要がなく、またすべきではありません。 その場合は、_config.ymlの中にexcludeオプションで生成対象から除外します。 このオプションではyamlのリスト(配列)を使います。

theme: jekyll-theme-leap-day

exclude:
  - README.md

リストは-と半角空白で表します。 たとえば

- abc
- def
- ghi

は3つの要素からなるリストです。 -の後の半角空白を省略することはできません。 このリストはRubyのデータ構造では配列になります。

[ "abc", "def", "ghi" ]

と同じことです。 _config.ymlでは、ハッシュ「exclude」の値がリストになっています。 そのときは、リストはハッシュに対してインデント(半角空白で字下げ)をしなければなりません。 このときタブを用いることはできず、かならず半角空白を用います。 空白の字数は1つ以上であればいくつでも構いませんが、見やすさの点から2文字程度にするのが一般的です。

_config.ymlをRubyのデータ構造で表すと、

{ "theme" => "jekyll-theme-leap-day" }
{ "exclude" => [ " README.md" ] }

となります。 これで、README.mdはHTMLに生成されません。

Jekyllで確認

Jekyllを起動してブラウザで画面を確認しましょう。

$ bundle exec jekyll serve
Configuration file: /home/toshio/MYWEBSITE/jekyll-tutorial-for-beginners/_config.yml
            Source: /home/toshio/MYWEBSITE/jekyll-tutorial-for-beginners
       Destination: /home/toshio/MYWEBSITE/jekyll-tutorial-for-beginners/_site
 Incremental build: disabled. Enable with --incremental
      Generating... 
                    done in 0.129 seconds.
 Auto-regeneration: enabled for '/home/toshio/MYWEBSITE/jekyll-tutorial-for-beginners'
    Server address: http://127.0.0.1:4000
  Server running... press ctrl-c to stop.

ここでブラウザを立ち上げ、「localhost:4000」を開きます。 すると、レポジトリから作られた画面が表示されます。 私のPCでは次のように表示されました。

Jekyll tutorial for beginners -- local

確認できたら、端末から「CTRL-C」を入力してJekyllのサービスを停止させます。

index.mdのコンテンツの部分は白い背景になっている中央部分に表示されています。 その周りの部分はレイアウトが自動的に書いてくれています。

  • 最上段のタイトルは、フロントマターのタイトルがコピーされている
  • コンテンツ左のリンクはMakdownの見出しへのリンクになっている。

このように、テーマのレイアウトは自動的にタイトルやリンクを生成してくれるのでサイト構築が楽になります。

_siteディレクト

レポジトリを再確認すると、新しいディレクトリ「_site」ができています。

$ tree
.
├── Gemfile
├── Gemfile.lock
├── README.md
├── _config.yml
├── _site
│   ├── assets
│   │   ├── css
... ... ...
... ... ...
│   └── index.html
└── index.md

6 directories, 34 files

Jekyllは「_site」ディレクトリを生成します。 この生成のタイミングは

  • 「bundle exec jekyll serve」の直後、サービスが動いている間は、index.mdなどのファイル(_config.ymlを除く)が更新されるごと
  • 「bundle exec jekyll build」で_siteを生成するとき

です。 生成時には、まず「_site」の中身を全て削除してから生成します。 うっかりして「_site」の中にファイルを作ったりすると、生成時に失くなってしまいます。

ブラウザには「_site」の中身が表示されます。 つまり、このディレクトリがウェブサービスのページを格納しているディレクトリなのです。 Jekyllは「レポジトリのファイルからページを組み立ててこのディレクトリに書き出す」ということをしていたわけです。

もし、レンタル・サーバーなどのウェブスペースを持っている場合は、この中身をアップロードすればウェブページが公開できます。

Gitでよく使う操作(status, add, commit, push)

ワークツリーの状態確認

ワークツリーに変更を加えたので、GItで状態の確認をしましょう。

$ git status
ブランチ main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   _config.yml

追跡されていないファイル:
  (use "git add <file>..." to include in what will be committed)
        .jekyll-cache/
        Gemfile
        Gemfile.lock
        _site/
        index.md

no changes added to commit (use "git add" and/or "git commit -a")

いろいろ表示されていますが、ここで注目したいのは「Changes not staged for commit(コミットのためにステージされていない変更)」と「追跡されていないファイル」のところにあるファイルです。 Gitはバージョン管理ツールで、最後にコミットされた時点までの情報を隠れフォルダ「.git」に保存しています。 クローン元のGitHubのレポジトリではどのようなコミットをしていたでしょうか?

  • README.mdを作成した。これが最初のコミット
  • 「jekyll-theme-leap-day」のテーマをセットした。 これは設定画面でテーマを設定したときにGitHub側で(自動的に)コミットしてくれています。

クローンした後、

  • Gemfileを追加した
  • 「bundle install」でGemfile.lockが追加された
  • _config.ymlを変更した
  • index.mdを追加した
  • Jekyllを起動したときに_siteと.jekyll-cacheディレクトリができた

これらが「git status」で表示されているファイルなのです。

ここまでの仕事をGitを使って記録しましょう。 ここで考えなければならないのは、すべて記録しておくべきだろうか、ということです。

  • Gemfileは必要なgemの記述だから記録する
  • Gemfile.lockはGemfileのgemだけでなく、実行に必要なすべてのgemとそのバージョンを記述しているので記録する
  • _config.ymlは記録する
  • index.mdは記録する
  • _siteと.jekyll-cacheはJekyllが生成したフォルダで、Jekyllの起動に必要なわけではない。これは記録しない。
.gitignore

記録しないファイルは「.gitignore」というファイルに記述します。 それにより、Gitはそれらのファイルを記録対象から外します。 エディタで次のように書き、「.gitignore」という名前で保存します。 ファイル名の先頭がドット(.)です。 忘れないようにしてください。

# Cache directory
.jekyll-cache

# HTML directory created by Jekyll
_site

一般的にGitで記録すべきでないファイルは

  • 生成されたファイル、生成途中で作られる中間ファイル
  • テキストファイルのバックアップファイル。たとえば「index.md~」のようにティルダのつくもの。

です。 再度「git status」してみましょう。

$ git status
ブランチ main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   _config.yml

追跡されていないファイル:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        Gemfile
        Gemfile.lock
        index.md

no changes added to commit (use "git add" and/or "git commit -a")

.gitignoreに書かれたファイルが表示されなくなりました。

git add

ここに表示されたファイルはGitで記録に残すようにします。 そのための手順がさきほどの画面に出ています。

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

この2行から、「git add <file>」とコマンド入力することによって、アップデート(変更)とインクルード(追加)ができる、ということが分かります。 全てのファイルをaddするには、カレントディレクトリ「.」をaddすれば良いので、

$ git add .

とタイプします。 このコマンドで変更されたファイルと追加されたファイルがステージの状態になります。 この状態ではまだGItに記録されたわけではありません。 記録の準備の段階が完了したということです。 再び状況確認します。

$ git status
ブランチ main
Your branch is up to date with 'origin/main'.

コミット予定の変更点:
  (use "git restore --staged <file>..." to unstage)
        new file:   .gitignore
        new file:   Gemfile
        new file:   Gemfile.lock
        modified:   _config.yml
        new file:   index.md

記録すべきファイルがすべて「コミット予定の変更点」に書かれています。 このことは、ファイルがステージに登録されたということです。 なお、ステージに誤ってファイルを入れてしまった場合はアンステージ(ステージから除くこと)できます。

  (use "git restore --staged <file>..." to unstage)

「git restore --staged <file>」でアンステージできると書かれています。 このように、Gitは親切で、そのときに使えるコマンド(の主なもの)が表示されます。

git commit

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

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

「git commit」コマンドでファイルを記録し、メモを残すことができます。 コマンドを発行すると、エディタが立ち上がるので、短くメモを書きます。 例えば「Add Gemfile and index.md.」などです。 上書き保存します。 上書き保存後に下のようにメッセージが表示されます。

$ git commit
[main a516afb] Add Gemfile and index.md.
 5 files changed, 103 insertions(+), 1 deletion(-)
 create mode 100644 .gitignore
 create mode 100644 Gemfile
 create mode 100644 Gemfile.lock
 create mode 100644 index.md
  • mainブランチのa516afb(から始まる)IDに「Add Gemfile and index.md.」というメッセージをつけて保存した
  • ファイルが5つ変更され、103行が追加され1行が削除された(実際には_config.ymlで4行追加したのですが、1行削除されて5行追加されたようにgitが認識しています)。
  • 各ファイルがモード100644(オーナーのみ読み書き可、グループと一般ユーザは読みのみ可)で記録された

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

$ git status
ブランチ main
このブランチは 'origin/main' よりも1コミット進んでいます。
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

Git の状態は、ローカルがorigin/main(GitHubのレポジトリ)よりも1コミット進んでいる、と表示されました。 先程のコミットの分だけローカルのほうが進んでいるわけです。 ワークツリーは(最後のコミットから)特に変更無くクリーンでコミットするようなものはない、と表示されています。

git push

さきほどの表示に

  (use "git push" to publish your local commits)

とありました。 「git push」を使ってローカルのコミットを(GitHubに)公開できる。 ということです。 ローカルに対してGitHubはリモートといいます。 ローカルからリモートに新たなコミットをコピーするのが「git push」です。 逆にリモートが進んでいるときは「git pull」を使ってローカルに取り込みます。 大事なことは、コミットしたものだけがプッシュされることです。 コミットしていないワークツリーはプッシュしないので、必ずコミットしてください。

GitHubにpushするには、いくつかの方法がありますが、ここではパーソナル・アクセス・トークン(PAT)を使うことにします。 PATはパスワードのようなものですが、パスワードよりは強力なものです。

  • GitHubを開く
  • 右上のアイコンをクリック=>ポップアップメニューからSettingsをクリック
  • 左のメニューの一番下「Developer settings」をクリック=>「personal access tokens」をクリック
  • 「Generate new token」をクリック=>パスワードを入力する=>以下画面に従ってトークンを生成する
  • 生成されたトークンをメモしておく。またはエディタでファイルに保存しておく。

トークンは今後毎回pushで使います。 ユーザ名とパスワードを要求されますが、パスワードにはPATを入力します。

$ git push
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 8 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 1.50 KiB | 1.50 MiB/s, done.
Total 7 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/ToshioCP/jekyll-tutorial-for-beginners.git
   4901be1..a516afb  main -> main

これでGitHub Pagesの方もindex.mdが表示されるようになっているはずです。 自分のレポジトリのページを見たところ見た目では確認できませんでした。 それもそのはずで、index.mdの内容はREADM.mdをコピーしたものだから、同じに見えるのはあたりまえだったのです。 少しでも代えておけば・・・残念。

ローカルでテスト、リモートで公開

ここまでで、ローカルとリモートを同じ状態に保つことができるようになり、しかもローカルでJekyllを使ってテストできるようになりました。 今後は

  • ローカルでウェブサイトの内容を作っていく
  • ローカルでJekyllを使ってテストする
  • コミット
  • GitHubにプッシュ=>公開

という手順で開発をすることができます。

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

Jekyllを勉強中(3)

Jekyllはプログラム名ですが、読み方が難しいです。 Jekyllは小説「ジキル博士とハイド氏」のジキルと同じスペルで、英語の発音は「ジェクル」または「ジークル」らしいです(辞書で確認)。 前回のブログに貼り付けたユーチューブのプレゼンターは「ジェキル」または「ジェクル」と呼んでいました。

GitHub Pagesでウェブサイトを作る

今回のテーマは「GitHub Pagesでウェブサイトを作る」です。 一見Jekyllから離れてしまうように思うかもしれませんが、実はそうではありません。 GitHub PagesはJekyllをサポートしています。 もちろん、Jekyllを使わなくてもウェブサイトは作ることはできます。 ここではJekyllを使い、かつGitHub Pages経由で、ウェブサイトを公開する手立てを説明します。

GitHubのアカウントの作成

すでに持っている方はこの部分を飛ばしてください。 以下は、2022年8月13日現在の方法で、細かいところは今後変わる可能性があります。

GitHub

  • Sign up」ボタン(右上の方)をクリックする。
  • 以下、いくつかの項目の入力を要求される。 入力して「continue」ボタンをクリック、を繰り返す。
  • 登録したメールアドレスにメールが届く。 そこに数字が並んでいる。 それをウェブページに入力することで最終的な本人確認が終わり、アカウントが作成される。

レポジトリを作成する

GitHubにレポジトリ(gitレポジトリ)を作成します。 今回はローカル(自分のパソコンのこと)にgitレポジトリを用意せず、GitHub上に直接作っていきます。

Create Repository

  • GitHubのページを開き、右上の「+」ボタンをクリックし、ポップアップ・メニューから「New Repository」を選ぶ
  • レポジトリ名は何でも良い。ただし英語(半角文字)でスペースはハイフンに直す。これから作るウェブページに相応しいものを自分で決める。
  • ディスクリプションはウェブページの簡単な説明書きのこと。 書かなくても良いが、一般的には書いておくのが良い。
  • GitHub Pagesを使うときは「公開(public)」しか選べない。 有料のコースを選べば「非公開(private)」を選ぶこともできる。 ここでは「公開」のままで良いでしょう。
  • 初期化のところでは、「Add a README file」のところはチェックしておくのが良い。 何もチェックしないとレポジトリの中身が何もない状態なのでGitHub Pagesの作成ができない。
  • 「.gitignore」と「license」はチェックしなくても良い。 チェックするとその後でファイルの内容を入力しなければならなくなり、あらかじめ用意していないと作業が止まってしまう可能性がある。
  • 「Create Repository」ボタンをクリックすると、README.mdファイルの編集画面になる。 この内容が、レポジトリのトップ画面で表示される。 ウェブページの案内のようなことを書くと良い。 下の方の「Commit changes」(緑色のボタン)をクリックするとREADME.mdファイルが作成される。

コミットはgitを知っている方ならその「コミット」のことです。 ここではgitの説明は(長くなるので)省略します。

README.mdの例

# 〇〇のウェブサイト

これは〇〇のブログ・サイトです。
はじめたばかりなので記事がまだありませんが、どうぞよろしく。

こんなお粗末なものを書く人はいないだろうと思いますが、これでも公開はできます。 (もっと良いものを考えてね^^)

作業が終わると、レポジトリが表示されます。 ちなみに、今私が作り始めたレポジトリはこんな感じです。 背景が黒いのは、私がそのように設定したからで、初期設定は背景が白です。

Repository

GitHub Pages の設定

レポジトリ名(青色の文字列)の下にメニューが並んでいます。 一番左は「<> code」、一番右が「Settings」です。

  • 「Settings」をクリック
  • 画面左に縦に並んでいるメニューの中程「Pages」をクリック
  • 右側のメインのカラムの中程、「Branch」のところをクリックして「main」を選択、次のところは「root」を選択する

この段階でGitHub Pagesは作成される(少し時間がかかる、2分くらい)が、ここではテーマを選んでみましょう。

テーマを選ぶ

GitHub PagesはJekyllでウェブページを作ります。 ですので、README.mdがHTMLに変換されてページに現れているはずです。 右上の「visit site」ボタンをクリックすると、それが見えるはずです。

ここではテーマを導入してみましょう。 GitHubで設定する「テーマ」は「Jekyllのテーマ」のことです。 Jekyllで一からサイトを構築することもできますが、テーマを使うとそのかなりの手間を省くことができます。

ひとつ前のサブセクションで、「Settings」の「Page」メニューを開いていたのでした。 ブランチの選択の下にテーマの選択(Theme Chooser)のボタン「Change Theme」があります。 それをクリックします。 2022/8/13の時点では、「Cayman」から「Leap Day」までのテーマが表示されています。 そのうちの気に入ったテーマをクリックし、「Select theme」(テーマを選択、緑色)ボタンをクリックします。

レポジトリ名(青色の文字列)の下のメニューから、「<> code」(一番左)をクリックします。 すると、コードに「_config.yml」が追加されています。

先程の私のレポジトリでは「Leao day」を選んだので、「_config.yml」にはそれが書かれています。 「_config.yml」をクリックします。

theme: jekyll-theme-leap-day

あなたが他のテーマを選んだのであれば、ここにはそのテーマが書かれているはずです。

ウェブページの確認

ウェブページはhttps://(ユーザ名).github.io/(レポジトリ名)/となっています。 ブラウザからアクセスしてみてください。 ちなみに私のサイトは、現時点では次のようになっています。

Jekyll tutorial for beginners

README.mdの内容がトップページに反映されていることが分かります。 また、テーマのスタイルシートのおかげで、良い感じのデザインになっています。

このあと、タイトルを日本語にしたり、チュートリアルの内容を付け足したりしてサイトを構築していきます。 ですから、もう少し頑張って手直しが必要なのですが、今日はここまでにしておきます。 (どこをどう直すかは次回ではなくて少し先の回で説明します)

いかがでしょうか? このようにしてGitHubで無料でホームページを作ることができます。 ただし、商用利用などはできないことになっています。 詳しくはGitHub利用規約を確認してください。

今回、テーマを直接GItHubの設定画面から導入しましたが、別の方法もあります。 それは、次回説明する予定です。

Jekyllを勉強中(2)

引き続きJekyllの勉強中です。

2つに分かれるJekyllのユーザ・タイプ

Jekyllのウェブサイトのドキュメントはほぼ読み終わって、全体的な感じがつかめてきたところです。 その中で見えてきたことは、Jekyllを使う2つのタイプのユーザを分けて考えることが重要だということです。

  • (A)ウェブサイトを構築する人=Jekyllでプログラムする人
  • (B)構築されたウェブサイトに内容を加える人

(A)と(B)は同じ人でも別の人でも良いです。 (A)はJekyllやHTMLなどの知識が必要な「開発者」ですが、(B)には高いプログラムのスキルは必要ありません。 マークダウンが書ければ十分で、それすら必要ないこともあります。

例えば、そのウェブサイトが毎日の天気を記録して、グラフや表にして表示するとします。 (A)はそのウェブの仕組みを作り、(B)は毎日の天気を入力してウェブに上げるというように役割分担ができます。 まずは(A)がサイトを作らなければなりません。 一度作ってしまえば、(A)はメンテナンスをするだけで、その後は(B)が作業するだけです。 (B)は、例えば

weather: 晴れ
temperature: 32

などと入力したファイルをウェブサイトにアップロードします。 単純作業ですから、やり方を覚えればプログラムのスキルは要りません。

他にも、ブログ(ただしコメントなどの機能はない)についても、(A)がサイトを構築したら、(B)はマークダウンで記事を書き、アップロードするだけです。 はてなほど簡単ではないけれど、難しい仕事ではありません。

Jekyllの利点

(B)にとっては「プログラムの知識が要らない」という利点がありますが、これは特に強調するようなことではありません。 むしろ「はてなブログ」の方が簡単でしょう。

(A)にとっては、ウェブサイトの構築の相当部分を自動化できる利点があります。 また、作られるウェブサイトが静的(コメント機能やログインがない)ので、安全性が高いというのも利点です。 加えて、データベースなどを使わないので作成作業がシンプルです。

はじめての「サイト構築」

(A)のサイト構築においては、テーマという枠組みが用意されていて、それを使えば構築さえも要らなくなります。 例えば、minimaというデフォルトのテーマを使って、sampleという名前のフォルダにサイト構築をするには、次のようにするだけです。

$ jekyll new sample
... ... ...
New jekyll site installed in /(ユーザ名)/sample. 
$ cd sample
$ nano Gemfile # エディタはnanoでなくても良い
(エディタで、Gemfileの最後に"gem webrick"を追加し、上書き保存する)
$ bundle install
... ... ...
Bundle complete! 8 Gemfile dependencies, 32 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
$ bundle exec jekyll serve
... ... ...
(ブラウザでlocalhost:4000を開くと作成されたサンプル・サイトが表示される)
(CTRL-Cでコマンドラインにもどる)
$

ウェブの内容を自分に合うようにするには

  • 「about.markdown」を自分用aboutページに修正する。このとき、冒頭の「---」で囲まれた5行は変更しない。
  • 「_posts/2022-08-12-welcome-to-jekyll.markdown」を参考に、同じ形式で「_post」ディレクトリに記事を追加していく。
    • ファイル名は「YYYY-MM-DD-タイトル名.markdown」。最初のところは年月日。拡張子は「md」でもよい。
    • ファイルの中身では、最初に「---」で囲まれた部分をサンプルファイルと同様に書く。「layout: post」はそのまま、「title:」にはタイトル名を記述。 「date:」には日時を書き、最後に「+0900」(Tokyoのローカルタイムの時差)を入れる。「categories:」タグは取り去って良い。 2つめの「---」の下から記事をMarkdownで書く。 以後、同様のファイルを「_post」に追加することで、記事を投稿できる。

この作業後、

$ bundle exc jekyll serve

として、「localhost:4000」をブラウザで確認すれば、変更が反映されているはずです。 (A)さんにとって、これで構築が済むなら天国にも登るような気持ちですよね。

なお、このサイトは「トップページ」「aboutページ」の2つの固定ページとブログの「記事ページ」からなります。 別の構成のサイトを作るには、構築段階で更に作業が必要です。

GitHub Pagesとの連携

GitHub Pagesを使うと自分のウェブページを公開することができます。 GitHub PagesはJekyllをサポートしているので、さきほどの「sample」フォルダでgitのコミットをしてGitHubにアップロードします。 (ここではGitHubへの登録、アップロードの説明は省略します)。 レポジトリの設定(setting)からGitHub Pagesを有効にします。 「https://(ユーザ名).github.io」をブラウザで見ると、sampleの画面が公開できているはずです。 ちなみに、私のGitHub Pagesは次のとおりです。

Jekyll, GitHub Pages, GitHub Actions

さらなるウェブページ作成の自動化がGitHub Actionsで可能です。 ここではそこまで書けませんが、参考になるYoutube動画をリンクしておきます。

細かいプログラムの話は無く、コンセプト的な内容なので分かりやすいと思います。 これを見ると、今後の勉強の方向性が見えてきます。

今回はJekyllの初歩の初歩を説明しました。 今後勉強を続けて、ある程度まとまったら、チュートリアル記事を書きたいと思います。

Jekyllを勉強中(1)

追記 2022/8/23: このブログの9回シリーズ「Jekyllを勉強中」の内容をもとに、「はじめてのJekyll + GitHub Pages」をGitHub Pagesに作りました。 ブログの内容をさらに検討してより整理され、分かりやすくなっています。 Jekyllを勉強したい方は、ブログよりもこちらの方がおすすめです。

Jekyllをご存知でしょうか?

静的なウェブサイトを構築するツールです。 Railsの動的な部分を取り去ったような感じです。 また、Jekyllはデータベースを使いません。 Railsと比べかなり単純な感じがします。

Jekyllで構築されたウェブページで有名なものは、

などです。

Jekyllは、GitHub Pagesがサポートをしています。 ご存知の方も多いと思いますが、GitHub Pagesでウェブサイトのスペースを確保でき、公開できます。 これは無料です。 何でも料金の発生する昨今、嬉しいシステムです。

私もGitHub Pagesでブログを作っていて、それがJekyllを使うきっかけになりました。

まだJekyllは使い始めで、これから勉強という段階です。 ある程度理解がすすんだら、チュートリアルを書きたいと思っています。

ちなみに、Jekyllのウェブサイトはこちら

英語版「はじめてのRake」

このところブログの更新ができていませんでした。

その理由は、「はじめてのRake」の英語版を書いていて、忙しかったからです。

レポジトリはこちら

先日、「Google先生に英語を習う」で、「日本語のドキュメントをGoogle翻訳で英訳し、その英語を手直しすれば短時間で翻訳が完成する」と書きました。 その手法を使って、「はじめてのRake」英語版はあっという間にできるはずでした。

ところが、そうでもなかった。 ある意味、自分の考えの実証実験にもなったので、その結果分析をここに書きたいと思います。

なぜ予想より時間がかかったのか? 2つの理由があったと思います。

第1に、元の日本語をGoogleが理解しにくかった。 この原因は元の日本語にあります。 私は日本語ネイティブなので、手を抜いた日本語でも分かってしまうが、Google翻訳にはそれがマッチしなかった。 論理的で必要かつ十分な説明文であれば、もっとGoogleの英語は良かったでしょう。

第2に、英語が自然でない。 Googleは正確を期すため、直訳に近い形で翻訳します。 これについて、Google 先生に失礼のないように補足すると、訳された文章は英語としては完璧に合っていて意味は通ります。 しかし、いまひとつしっくりこない。 全体に説明がくどい感じがするんですね。 例えば、

日本語「Rakeは複数のコマンドやメソッドの実行を管理するプログラムです。」

=> 英語「Rake is a program that manages the execution of multiple commands and methods.」

日本語もややくどい感じはあるものの、不自然ではないと思うのですが、英語はa bit more complicatedな感じがします。

「Rake manages multiple commands and methods.」 ぐらいの方がシンプルで良いと思うんですが・・・どうでしょう?

このような箇所がいたるところにあり、その修正に時間ががかかってしまいました。 また、時間がかかると思い始めたら、余計その翻訳に手をつけるのが面倒になり、モチベーション低下がさらに作業時間増加に拍車をかけることになりました。 結果、一週間近くかかってしまいました。

冒頭に書いた先日のブログの内容については、「そういう方法もあるけれど、翻訳が早くなるとは限らない」と修正させていただきます。 申し訳ありません。 反省します。

次にドキュメントを英訳することがあれば、自分で英訳を作りGoogleで日本語に訳してもらい、不自然でないかチェックする方法をとろうと思います。 そして、その方が翻訳が速いのかどうか、結果を報告したいと思います。

そんなわけで、今日疲れておりますのでこの辺で失礼いたします。

(2022/8/9 追記) その後あらためて英語版「はじめてのRake」を見直したところ、おかしな部分が続出、2日かけて全部見直しました。

はあーーー

英語力全然無いなーー

【森を見よ】(−7)÷3のあまりはいくつ?

今日は数学ネタです。 「木を見て森を見ない」(小さなことにとらわれて全体を見ない)にならないよう「森を見よ」シリーズ2回めです。

7÷3=2・・・1

小学校で習うことですが、7割る3の商は2、あまりは1です。 では、「マイナス7割る3」のあまりはいくつでしょうか?

「(−7)÷3」のあまりは
(1) −1 (2) 1 (3) −2 (4) 2

正解は(4)の2です。 正解した方はさすが! −1と答えた方も少なからずいるのでは?

で、ここからが本題ですが、それはなぜでしょうか? それは、「(−7)÷3」だけでなく、整数全体を考えることにより分かってきます。 「森を見よ」ということですね。

1÷3=0・・・1
2÷3=0・・・2
3÷3=1・・・0
4÷3=1・・・1
5÷3=1・・・2
6÷3=2・・・0
7÷3=2・・・1
8÷3=2・・・2
9÷3=3・・・0
10÷3=3・・・1

これを注意深く観察すると、

  • 3で割ってあまり0の数は2つおきに現れる
  • 3で割ってあまり1の数は2つおきに現れる
  • 3で割ってあまり2の数は2つおきに現れる

そこで、これらを色分けすると

                  10
  • シアン・・・3で割ると1余る数
  • 黄色・・・3で割ると2余る数
  • ピンク・・・3で割り切れる数

これを「2つおきに同じ色」になるように、マイナスの数まで伸ばしてみましょう。

−9   −8   −7   −6   −5   −4   −3   −2   −1                       10

−7は黄色だから、3で割って2余る数に入っていますね。

あまりは常に3の倍数から右に(正の方向に)いくつずれるかを表します。 たとえば8であれば3の倍数6から2だけ右にずれています(つまり+2だけあまる)。 同じように、−7は3の倍数−9から右に2だけずれているので、あまり2となります。

より正確に言えば「あまりは0以上割る数未満」です。 3で割るときは、「0以上3未満」すなわち0,1,2です。

計算上は、

7÷3=2・・・1
7=3✕2+1

から、

−7=3✕(−2)+(−1)
あまりは常に正(右にずれる)から、商を−3にして
−7=3✕(−3)+2
−7÷3=−3・・・2

このように、商をひとつずらして考えることで計算できます。 ポイントは「あまりは0以上割る数未満」ということです。

Google 先生に英語を習う

私は Google 翻訳をよく使っています。

使い方は様々です。

  • 英語の単語を入力して日本語にする=>翻訳欄の下に、辞書のようにいくつかの訳が出る
  • 英語のワンセンテンスを入力して日本語にする
  • 英語のウェブサイトを丸ごと日本語にする=>画面上の「ウェブサイト」ボタンをクリックしてURLを入力すると、そのページがそっくり翻訳されて表示される(便利!!)
  • 英語のドキュメント(PDFとか)を日本語にする=>画面上の「ドキュメント」ボタンをクリック=>「パソコンを参照」をクリック=>翻訳したいドキュメント(PDFなど)のファイルを指定=>「翻訳」をクリック=>「翻訳をダウンロード」をクリック=>翻訳されたドキュメントができる(便利!!)
  • 日本語の(主に自分で作った)ドキュメントを英語にする=>翻訳された英語を手直し=>英語ドキュメントの完成(短時間で完成!!)=>2022/8/8追記:実際に英訳に応用してみたところ、さほど時間短縮にはなりませんでした。
  • 自分で書いた英語を日本語に翻訳=>正しい英語だったのかを検証できる

特に最後の、英語の検証には良く使いますが、これに適するのはドキュメントのような「書き言葉」です。 会話文は上手くいかないケースがあるかもしれません。

ところで Google翻訳はどれくらい変換精度がいいのでしょうか?

  • 「グーグル先生に英語を習う」=>「learn english with google teacher」(ダメ)
  • 「グーグル先生に英語を習うことに決めた。」=>「I decided to learn English from Mr. Google.」(OK・・・完了形ならもっと良いかも)
  • 「グーグル先生に英語を教わった。」=>「I was taught English by Mr. Google.」(教わったは受け身になるんだね、なるほど)
  • 「グーグル、国会の英語は?」=>「Google, what is the English of the Diet?」(日本の場合はOK、イギリスはparliamentアメリカはcongress、でも入力の日本語は、たぶん日本の国会を指してるよね)
  • 「グーグル、議会の英語は?」=>「Google, parliamentary English?」(???)

書き言葉は一般に必要十分な情報が含まれるので、Googleは、ほぼ正しい翻訳ができそうです。 それに対して会話文は省略が多いので翻訳できないケースが少なくない、と考えられます。 英会話は、英会話スクールやラジオ講座じゃないとダメのようですね・・・

さて、最初に書いたGoogle翻訳の使い方、きっと皆さんの役に立つと思います。 とくに、ウェブサイトやドキュメントを丸ごと翻訳してくれる機能は凄い!! 活用してください。