ぱろすけ's website

ウェブサイトのシステムを markdown ベースに刷新しました

このたび、このウェブサイトのシステムを、従来の flask ベースのものから markdown + pandoc ベースのものへと書き換えました。読者の皆様にはまったく関係のない内部の仕組みの話なのですが、もしかしたら誰かの役に立つかもしれないので簡単にまとめておきます。

動機

2世代前、自分のウェブサイトは wordpress を使って構築していました。wordpress は重いです。ちょっと記事がヒットすると簡単にサーバが落ちました。たとえばはてなブックマークのホットエントリに載ることによる多量のアクセスを捌くためには、負荷軽減策をかなり丁寧にやらないと裁けません。wordpress それ自体も複雑怪奇ですし、apache や mysql の設定も厄介でした。そこで諦めて自力でウェブサイトを構築することにしました。

1世代前、自分のウェブサイトは flask を使って構築していました。flask は python の web フレームワークで、小さめのウェブサイトが簡単に構築できます。しかし flask それ自体は重いです。そこで、まず手元の PC に flask でウェブサイトを構築し、それを自動でクロールしてすべて html 化していました。システムとしては複雑怪奇ですが、出来上がるものは html なので非常に軽いです。

1世代前のシステムはなかなかうまく動いていましたが、新しい記事を書くのは面倒でした。自分で html をきちんと記述しなければならず、また記事中に flask のコマンドを埋める必要がありました。もちろん wordpress や多くのブログサービスではそのような必要はなく、ふつうに日本語を記述するだけです。

テキストを簡単な記法で記述するといえば markdown です。そこで、ここでは markdown を用いてページを記述し、それを pandoc を持ちいて html に変換することによってウェブサイトを構築する方針を採ることにしました。

実装

GitHub に上がっていますのでご興味がある方はご確認ください。まだ初歩的な機能しか実装していないせいもありますが、コードは非常に簡単です。

書き方の違いの具体例

以下は、自己紹介ページを旧システムで記述したものです。冒頭30行だけを掲載しています。flask のコマンド ({% block %} など) と HTML (<p> など) が混在していてやや読みにくいです。

{% extends "base.html" %}

{% block title %}自己紹介 - ぱろすけ's website{% endblock %}

{% block content %}
<h2>挨拶</h2>
<p>はじめまして。ぱろすけといいます。「誰だよ」と言われることが多いので自己紹介をします。</p>

<h2>趣味</h2>
<p>プログラミングをします。実力は趣味程度です。プログラミングコンテストみたいなことはやりません。一応中学くらいからプログラミング言語を触っていました。当時は Delphi でした。高校で C# を使って、最近はもっぱら Python です。ウェブも少しだけできます。</p>
<p>クラシック音楽を聴きます。シベリウスが好きです。北欧系と英国系が性に合います。ピアノが少しだけできます。高校から大学までチェロを少し触りました。最近は聴き専です。老後はチェロとギリシャ語を習って過ごしたいです。</p>
<p>少し本を読みます。村上春樹と森見登美彦のほぼ全作品を揃えています。『風の歌を聴け』『世界の終りとハードボイルド・ワンダーランド』が好きです。現在は太宰治の読破に取り組んでいて、だいたい半分くらいです。小川洋子とか川上弘美とかも少し読みます。</p>
<p>インターネットを使います。</p>

<h2>スキル</h2>

<h3>プログラミング</h3>
<dl>
<dt>Python</dt>
<dd>わりと使えるほうだと思います。numpy, scipy あたりも触ります。</dd>
<dt>JavaScript</dt>
<dd>クールなコードでなくて良いならばある程度できます。最近のイケてるライブラリ事情はよくわかりません。</dd>
<dt>C#, Java, Delphi, PHP, VB, VBA</dt>
<dd>以前触ったことがありますがほぼすべて忘れました。</dd>
</dl>

<h3>専門知識</h3>
<dl>
<dt>機械学習</dt>
<dd>一応勉強しましたがあまりよくわかっていません。ブログの記事にしている程度のことはできます。</dd>

一方で、以下は同じ内容を新システムで記述したものです。直感的でわかりやすく、記述する心理的ハードルが低くなっていることがご理解いただけるかと思います。

---
title: 自己紹介
---

# 挨拶
はじめまして。ぱろすけといいます。「誰だよ」と言われることが多いので自己紹介をします。

# 趣味
プログラミングをします。実力は趣味程度です。プログラミングコンテストみたいなことはやりません。一応中学くらいからプログラミング言語を触っていました。当時は Delphi でした。高校で C# を使って、最近はもっぱら Python です。ウェブも少しだけできます。

クラシック音楽を聴きます。シベリウスが好きです。北欧系と英国系が性に合います。ピアノが少しだけできます。高校から大学までチェロを少し触りました。最近は聴き専です。老後はチェロとギリシャ語を習って過ごしたいです。

少し本を読みます。村上春樹と森見登美彦のほぼ全作品を揃えています。『風の歌を聴け』『世界の終りとハードボイルド・ワンダーランド』が好きです。現在は太宰治の読破に取り組んでいて、だいたい半分くらいです。小川洋子とか川上弘美とかも少し読みます。

インターネットを使います。

# スキル
## プログラミング
Python
:   わりと使えるほうだと思います。numpy, scipy あたりも触ります。
JavaScript
:   クールなコードでなくて良いならばある程度できます。最近のイケてるライブラリ事情はよくわかりません。
C#, Java, Delphi, PHP, VB, VBA
:   以前触ったことがありますがほぼすべて忘れました。

## 専門知識
機械学習
:   一応勉強しましたがあまりよくわかっていません。ブログの記事にしている程度のことはできます。
コンピュータビジョン
:   一応勉強しましたがあまりよくわかっていません。ブログの記事にしている程度のことはできます。

難点

pandoc のテンプレートの編集と markdown の記事を追加だけで済めばシンプルで良いのですが、これだけでは類似記事へリンクを貼ることや RSS を生成することなどは困難です。そこで他のプログラミング言語によるいろいろな処理を導入する必要があります。これまでのシステムもそうしていたのですが、適度にそういう処理を加えることで徐々に複雑になってゆきます。適度なところで抑えられると良いのですが。

それと、過去の記事を新しいスタイルに書き換えるのが面倒です。今のところ、プロジェクトページや過去の雑記はリンク切れのまま放置しています。


Copyright (C) 2014-2016 ぱろすけ. All Rights Reserved.