Skip to main content

Jekyll:アーカイブページを作る

· 4 min read
mebiusbox
engineer

こちらの記事 では jekyll-archives を使った方法を紹介しました。 ですが、GitHub Pages では動作しません。 ここでは GitHub Pages で使える機能でアーカイブページを作成します。

年月日

全記事から年月日を参照して、列挙します。 記事の列挙は次のようになります。

{% for post in site.posts %}
{{ post.title }}
{% endfor %}

記事の日付は post.date です。 年月ごとに列挙する場合は次のようになります。

{% for post in site.posts %}
{% unless post.next %}
{% capture year %}{{ post.date | date: '%Y' }}{% endcapture %}
{% capture month %}{{ post.date | date: '%m' }}{% endcapture %}
<h2 id="{{year}}{{nmonth}}">{{ month }}/{{ year }}</h2>
<ul class="posts">
<li>
<span class="post-date">{{ post.date | date_to_string }} &raquo;</span>
<a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
</li>
{% else %}
{% capture month %}{{ post.date | date: '%m' }}{% endcapture %}
{% capture nmonth %}{{ post.next.date | date: '%m' }}{% endcapture %}
{% capture year %}{{ post.date | date: '%Y' }}{% endcapture %}
{% if month != nmonth %}
</ul>
<h2 id="{{year}}{{nmonth}}">{{ month }}/{{ year }}</h2>
<ul class="posts">
{% else %}
{% capture nyear %}{{ post.next.date | date: '%Y' }}{% endcapture %}
{% if year != nyear %}
</ul>
<h2 id="{{year}}{{nmonth}}">{{ month }}/{{ year }}</h2>
<ul class="posts">
{% endif %}
{% endif %}
<li>
<span class="post-date">{{ post.date | date_to_string }} &raquo;</span>
<a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
</li>
{% endunless %}
{% endfor %}
</ul>

post.date はそのまま出力すると 2016-06-18 00:00:00 +0900 となってしまいます。 {{ post.date | date_to_string }} とすると 18 Jun 2016 というように変換されます。 date_to_string 以外にも細かく指定するオプションがあります。ここでは詳しく解説しません。

post.next は次の記事ですが、最後の記事の場合 nil になります。そのため unless を使って処理を分岐しています。

{% capture year %}{% capture year %}{% endcapture %} で囲んだ内容を year に代入します。

カテゴリ

カテゴリの列挙は次のようになります。

{% for category in site.categories %}
{% capture name %}{{ category[0] }}{% endcapture %}
<h2>{{ name }} ({{ site.categories[name] | size }})</h2>
<ul class="posts">
{% for post in site.categories[name] %}
<li>
<a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
<span class="post-date">{{ post.date | date_to_string }}</span>
</li>
{% endfor %}
</ul>
{% endfor %}

例えば hoge というカテゴリ名の場合 site.categories.hoge で記事を列挙できます。 変数を使って参照する場合は site.categories[variable] というようになります。

site.categories.hoge | size を指定すると記事数を取得できます。

タグ

カテゴリとやり方は同じです。タグの場合、site.tags になります。

{% for tag in site.tags %}
{% capture name %}{{ tag[0] }}{% endcapture %}
<h2>{{ name }} ({{ site.tags[name] | size }})</h2>
<ul class="posts">
{% for post in site.tags[name] %}
<li>
<a class="post-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
<span class="post-date">{{ post.date | date_to_string }}</span>
</li>
{% endfor %}
</ul>
{% endfor %}

これで、カテゴリ一覧やタグ一覧などが作れます。あとは好きなようにレイアウトしてあげればいいです。

Atom:キーバインドの変更

· 3 min read
mebiusbox
engineer

git-control, advanced-open-file, symbols-tree-view パッケージを入れたところ ctrl-alt-o のキーバインドが重複してしまったので、これを何とかしたい。

まず、現在のキーバインドを確認するには File > Settings から Keybindings を選びます。 ctrl-alt-o で検索をかけると、キーバインドの一覧が表示されます。

keybindings

また、Keybinding Resolver を使うと詳しい情報がわかります。ctrl-. を押して Keybinding Resolver を有効にし ctrl-alt-o を押すと最終的にどのコマンドが実行されたかがわかります。

resolver

どうやら下から順番に上書きされているようです。この場合ですと advanced-open-file:toggle が実行されます。 ctrl-alt-o では git-control:toggle を実行してほしいのでカスタマイズします。 カスタマイズは keymap.cson ファイルを編集します。このファイルは keybindings にある your keymap file をクリックすると開くことができます。 記述の仕方は keymap.cson ファイルにあるコメントで記載されています。

実行するコマンドを変更する場合は、現在実行されているコマンドのセレクタに対して設定します。 Keybindings Resolver で実行されているコマンドを確認し、Keybindings の一覧から対象のコマンドを見つけたら、Keystroke の左側にあるアイコンを押すとクリップボードにコピーされます。 それを keymap.cson ファイルの最後に貼りつけます。

'.platform-win32 atom-workspace, .platform-linux atom-workspace': 'ctrl-alt-o': 'advanced-open-file:toggle'

そして、advanced-open-file:togglegit-control:toggle に変更します。 Keybindings Resolver で正しく設定されていることを確認してみます。

resolved

keymap.cson によって変更されていることがわかります。

あとは advanced-open-file:togglectrl-o に、symbols-tree-view:togglectrl-' に変更します。

'atom-workspace': 'ctrl-o': 'advanced-open-file:toggle' 'ctrl-'': 'symbols-tree-view:toggle'

ctrl-' はキーボード上だと Ctrl キーと ^ キーになります。ctrl-^ ではないんですよね。 Keybindings Resolver で押したキーのキーストロークがわかります。

Jekyll:site.url をローカル環境と本番環境とで切り替える方法

· One min read
mebiusbox
engineer

site.url_config.yml で設定されています。ローカル環境で確認しているときは site.urllocalhost:4000 だと便利です。 _config.yml を複製し _config-dev.yml という名前にします。この名前は適当で構いません。 下記のコマンドを実行することで _config-dev.yml を参照するようになります。

jekyll serve -w --config _config-dev.yml

WordPress から Jekyll へのエクスポート

· 2 min read
mebiusbox
engineer

GitHub Pages + Jekyll の環境を構築したので、現在のブログ(随分更新していない)から Jekyll へのインポートを試してみました。 使ったのは Jekyll Exporter です。 WorldPress のプラグイン管理からインストールしました。

インストールしたときはエラーが出ていたので、WorldPress を最新にアップデート。 そしたら WordPress 自体が動かなくなったので PHP のバージョンを最新に。 それでも動かなかったので、Jekyll Exporter が動作する PHP 5.3 に。これで WorldPress、Jekyll Exporter ともに有効に。

WordPress の管理画面から Export To Jekyll を選択して出力。 zip ファイルなので適当な場所に解凍して、_posts に入っているファイルをコピー。 Jekyll でビルドするもエラー。Windows だと、rb_sysopen で失敗。CentOS7 だと Protocol Error で失敗。
とりあえず、CentOS 側で原因調査したところ、エラーの内容を見るにパーマリンクが怪しかった。
なので、WordPress のパーマリンク設定でカスタム構造にし、/%category%/%postname% に変更。 カテゴリのスラッグをすべて設定して、英文字で出力できるように。 これで、もう一度 Export To Jekyll をしてビルドをすると、CentOS7 では成功。でも、Windows では変わらずエラー。 Windows のエラーはよくわからんです。

参考