Franklin.jl で github.io のページを作ろう.
本日は
- Zenn に入門しました.新しい気持ちで 2021 年を迎えるために自分の GitHub の見栄えをよくしようとしました.いわゆるぽ〜とふぉりお〜なるものですね.自分の github.io を数年前に作ってましたが放置だったので作り直そうと思いました.そういえば Franklin.jl でWebページ作れたから github.io にデプロイできるんじゃない?って考えたら一瞬だったので方法を共有します.
対象となる読者
- プログラミング言語 Julia を知っている人
-
julia
コマンドの使い方をわかる程度
-
- GitHub のアカウントを持っている人
-
git push
とかぐらいはできる
-
- あまりウェブのことわからないけれど簡易的なページを作りたい
- Markdown ぐらいならできる
導入
予備知識
そもそも github.io のお話
自分のアカウント名が myaccount
だとしましょう. myaccount.github.io
という名前のリポジトリを作ると https://myaccount.github.io/
という名前で自分のウェブサイトが作れるというサービスです.
https://pages.github.com/ 先にある YouTube を観ると雰囲気がつかめます.
Franklin.jl
- Franklin.jl 静的サイトジェネレータのひとつで,マークダウンで記述された文章を html に変換しウェブサイトを作る機能を持つ Julia のパッケージです. Julia は科学技術計算が得意なプログラミング言語ですが,こういったWebサイトを作るパッケージもあります.
どんな感じのができるの?
-
Franklin.jl の README.md を見ればわかりますが
Adapted templates
の項目で Julia のパッケージのドキュメント として作っている人もいれば
講義のホームページ の作成を目的に活用という事例もあります.
おしゃれですね.もちろん日本語もかけます.私のページです.
よっしゃ使いたい.
- やりましょう. 短気な読者はDeploying your website を直接ご覧ください.
リポジトリを作ります
<自分のGitHubアカウント名>.github.io
の名前のリポジトリを作ります.たとえば私は terasakisatoshi.github.io
です. そしてクローンしておきます.
$ git clone https://github.com/<自分のGitHubアカウント名>/<自分のGitHubアカウント名>.github.io.git
$ ls
<自分のGitHubアカウント名>.github.io.git
Julia を起動します
Julia わからないけれど,どうしてもこの記事を試したいんだという人は
JuliaLangのダウンロードページに行きバイナリーを落とした後 platform specific instructions に従ってパスなりを通してください.
Franklin.jl のインストールとお試し
ターミナルを開いて julia
を起動します.
$ julia
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.5.3 (2020-11-09)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |
julia>
REPL の上で次を実行します.
julia> using Pkg; Pkg.add("Franklin")
julia> using Franklin
julia> newsite("mySite", template="vela")
✓ Website folder generated at "mySite" (now the current directory).
→ Use serve() from Franklin to see the website in your browser.
julia> pwd() # mySite にディレクトリが移動する.
julia> serve()
Activating environment at `~/tmp/mySite/Project.toml`
→ Initial full pass...
→ evaluating code [ex3] in (menu1.md) → Starting the server...
✓ LiveServer listening on http://localhost:8000/ ...
(use CTRL+C to shut down)
シェルだとプロンプトを表す $
を外してコピペしなければいけないですが,Julia のREPLの上だと julia>
の部分も含めて全てコピペしてもOKです.REPL側で julia>
の部分を無視してくれる仕様のようです.知らんかった...
何にせよ http://localhost:8000 にアクセスすると下記のような図が得られます.
Franklin.jl は mySite
ディレクトリ以下にある md をパースして __site
という自動的に生成されるディレクトリ以下に html などを作ります. serve
関数はその __site
を起点としウェブサーバーをローカルに立ててくれます.
上の REPL の操作でやったように newsite("mySite", template="vela")
では template
というキーワードを指定しています.
でお好きなものを選べます.各自の趣味に合わせてください.
リポジトリにコピー
一度 __site
を消します.これはサイトをデプロイするときに自動的に作られるので git のバージョン管理に追加"しません". mySite
以下のファイルを先ほどクローンした <自分のGitHubアカウント名>.github.io.git
ディレクトリ以下に全てコピーします.このとき .github
というディレクトリや .gitignore
もコピーしておきます. tree
コマンドを使って下記のようになっているかを確認します.
$ cd path/to/<自分のGitHubアカウント名>.github.io.git
$ tree -a -L 2
.
├── .git
│ ├── COMMIT_EDITMSG
│ ├── HEAD
│ ├── config
│ ├── description
│ ├── hooks
│ ├── index
│ ├── info
│ ├── logs
│ ├── objects
│ └── refs
├── .github
│ └── workflows
├── .gitignore
├── 404.md
├── Manifest.toml
├── Project.toml
├── _assets
│ ├── favicon.png
│ ├── hamburger.svg
│ ├── rndimg.jpg
│ └── scripts
├── _css
│ ├── franklin.css
│ └── vela.css
├── _layout
│ ├── foot.html
│ ├── foot_highlight.html
│ ├── foot_katex.html
│ ├── head.html
│ ├── head_highlight.html
│ ├── head_katex.html
│ ├── nav.html
│ ├── page_foot.html
│ ├── style.html
│ └── tag.html
├── _libs
│ ├── highlight
│ ├── katex
│ └── vela
├── config.md
├── index.md
├── menu1.md
├── menu2.md
├── menu3.md
└── utils.jl
先ほども触れましたが .github
以下に Deploy.yml があることに注意します.
$ tree .github/
.github/
└── workflows
└── Deploy.yml
こんにちのシステムは GitHub Actions を使うことによってホームページのビルド・デプロイが容易になっています..github/workflow/Deploy.yml
をつかしておくことで GitHub にプッシュしたときにそれがトリガーとなってホームページのビルド・デプロイが自動的に行われます.ですので我々は md ファイルを編集・コミット・プッシュをひたすら行えば良いわけです.
ファイルを push
上記でコピーしたファイルを全部ステージに追加してコミットメッセージを作成してリモートリポジトリにプッシュします.
$ git add -A && git commit -am "initial files"
$ git push
たとえば,私の GitHub では次のようになりました.
しばらく時間を経過してから
https://<自分のGitHubアカウント名>.github.io/
にアクセスします.
私の場合だと https://terasakisatoshi.github.io/ です.
とりあえず,何かページが表示されればOKです.ただ @
のようなマークがそのまま出ているのが気になると思います.
最後の仕上げ
このままだと見た目が汚いです.これは GitHub が認識するブランチが master(またはmain) ブランチになっているからです.一方で Franklin が提供している GitHub Actions のスクリプト .github/workflow/Deploy.yml
は gh-pages
ブランチをGitHub (GitHub Pages) 側が認識することを前提として作られています.そこで我々は最後の仕上げをすることになります.下図の一番右側にある Settings
に進みます.
GitHub Pages
の項目に進み Source
と書かれているところを master(または main) の部分を gh-pages
に変更します.
これでもうOKです.
拡張の方法
あとは各自でマークダウンを追加・編集しましょう._layout/nav.html
の中身をいじる事でページの階層を定義することができます.
<div class="main-nav" id="menu">
<div class="flex-container">
<span class="sidebar-brand">
<h3 style='font-size: 25px'>Vela Template</h3>
</span>
</div> <!-- class="flex-container" -->
<nav class="sidebar-nav">
<ul class="metismenu" id="metismenu" >
<li><a href="/index.html">Home</a></li>
<li><a href="/menu1/">Code blocks</a></li>
<li><a href="" class="has-arrow">Topic</a>
<ul>
<li><a href="/menu2/">More goodies</a></li>
</ul>
</li>
<li><a href="/menu3/">Tags</a></li>
</ul>
</nav>
</div> <!-- main nav menu -->
<main id="panel">
<div class="toggle-button hamburger hamburger--spin">
<div class="hamburger-box">
<div class="hamburger-inner"></div>
</div>
</div>
<h1 class="page title">{{isdef title}}{{fill title}}{{end}}</h1>
<hr>
テーマを変えたい
- たとえば
vela
にしてたけれどtufte
にしたかった場合はnewsite("yetAnother", template="tufte")
のようにして一時的なテンプレートを作成します.その中にある_layout
,_css
,_assets
,_libs
を丸々差し替えます.
tufte
にするとこのようにできます.
以上です.
Discussion