自分の名を冠したドメインを持ちたい。そう思ったことがある人は少なくないと思いますし、かく言う私もそのうちの一人でした。
長きにわたって抱えていた想いを形にし生まれたのがこのブログ「ardririyの足跡」です。技術的な記事もそうでない記事も、ゆるゆると積み重ねていく予定です。あとCSS何もわからんのでデザインをなんとかだな...。ともあれ、どうぞよろしくお願いします。
さて、このページではどのようにしてこのブログが動いているかを紹介します。
「ardririyの足跡」は大きく2つのパートに分かれて構成されています。1つはmarkdownをパースしてHTMLを生成するパートで、これは
arMP
が担います。もう一方、HTMLなどの配信はGo言語を使ったサーバが担います。パース済みのHTMLを配信するだけならもっと簡単にできるんじゃない?というところではあるのですが、これにはそれなりに深いわけがあります。以下がシステム全体の俯瞰図です。
多くの人が同じ記法を用いているだけで、markdownには「定められた規格」というものが存在しません。例えば、GitHubで用いられているmarkdownには
アラート
という独自の記法が存在したり、Obsidianではmarkdownファイル同士の関連付けを表す内部リンクの記法が存在しています。
つまり、「このパーサではこういうmarkdownの記法なんですよ」というように言い張れば、それはマークダウンになるわけです。極端な話、入力として文字列を受け取ってそのまま出力するコードは、マークダウンパーサと言っても過言ではないわけです。
s = input()
print(s)
ここから始めて
、Obisidianで利用可能な記法を中心にしつつ自分好みな記法に変えながら作られたのがardririy flavoredなパーサであるarMPというわけです。
まぁ、そうは言ってもObsidian上で執筆されたものをパースするという前提で作っているので、特別に取り上げるような大きな文法の変更を加えたりなどはしていないです。唯一あまり見ない文法としてObisidianの内部リンクを解決してHTMLに変換する機能を持っているぐらいです。公開中の記事数が増えていけば内部リンクにであることもあるかもしれません
。
こちらは非公開にしているので特に名前はついていませんが、ブログという静的なファイルをわざわざGo言語で配信をしているのには理由があります。実は、ブログサーバにはHTMLは
一切配置されておらず
、ただマークダウンの状態のファイルのみが存在します。これをユーザからのリクエストに対してオンラインにパースを行います。
このような設計にしているのは、ブログに記事を書くという負荷をできるだけ軽くするためにObisidianで普段メモとして書いているものをそのまま公開できるようにと考えているからです
この話を説明しましょう。公開中の記事Aと非公開の記事Bがあり、記事A内で記事Bに対する内部リンクが貼ってあるとします。この時、arMPは記事Bは非公開なので記事Bに対するリンクは作成せず、Plainなテキストとして処理を行います。問題はこの後で、記事Bを清書したので公開状態に変更することが考えられます。この時に記事Aから記事Bへのリンクを反映したいと考えるのは自然なことですが、「記事Bが内部リンクとして貼られている記事のリスト」を常に更新して持っておくのはかなり辛いです。
この問題をブログサーバでは次のような手段で解決を図っています。まず、初めに述べたようにユーザからのリクエストを受け取った時にマークダウンをパースして返答します。この時に、パースしたマークダウンはキャッシュしておくことで次のアクセスを受けた際には再度パースしなくて良いようにしておきます。次に、マークダウンが更新されたことをGithub Webhookで検知したら、今までのキャッシュを全てクリアします。これだけでユーザ目線では全ての記事が更新されることとなります。便利ですね。
おおまかにこのブログが持つ機能はこんな感じになっています。ゆるゆると、盆栽する気持ちでやっていこうと持っておりますので、たまには見にきてね。