ブログ「ardririyの足跡」を始めます

Getting Started!
Date: 2024/11/17

自分の名を冠したドメインを持ちたい。そう思ったことがある人は少なくないと思いますし、かく言う私もそのうちの一人でした。
長きにわたって抱えていた想いを形にし生まれたのがこのブログ「ardririyの足跡」です。技術的な記事もそうでない記事も、ゆるゆると積み重ねていく予定です。あとCSS何もわからんのでデザインをなんとかだな...。ともあれ、どうぞよろしくお願いします。
さて、このページではどのようにしてこのブログが動いているかを紹介します。

ブログの裏側

「ardririyの足跡」は大きく2つのパートに分かれて構成されています。1つはmarkdownをパースしてHTMLを生成するパートで、これは arMP が担います。もう一方、HTMLなどの配信はGo言語を使ったサーバが担います。パース済みのHTMLを配信するだけならもっと簡単にできるんじゃない?というところではあるのですが、これにはそれなりに深いわけがあります。以下がシステム全体の俯瞰図です。


「アンプ」と呼んでいますが無理がある(自分で言う?)

arMP: ardririy's Markdown Parser

多くの人が同じ記法を用いているだけで、markdownには「定められた規格」というものが存在しません。例えば、GitHubで用いられているmarkdownには アラート という独自の記法が存在したり、Obsidianではmarkdownファイル同士の関連付けを表す内部リンクの記法が存在しています。
つまり、「このパーサではこういうmarkdownの記法なんですよ」というように言い張れば、それはマークダウンになるわけです。極端な話、入力として文字列を受け取ってそのまま出力するコードは、マークダウンパーサと言っても過言ではないわけです。

s = input()
print(s)

ここから始めて 、Obisidianで利用可能な記法を中心にしつつ自分好みな記法に変えながら作られたのがardririy flavoredなパーサであるarMPというわけです。
まぁ、そうは言ってもObsidian上で執筆されたものをパースするという前提で作っているので、特別に取り上げるような大きな文法の変更を加えたりなどはしていないです。唯一あまり見ない文法としてObisidianの内部リンクを解決してHTMLに変換する機能を持っているぐらいです。公開中の記事数が増えていけば内部リンクにであることもあるかもしれません

実はarMPも本当に入力を受け取って(pタグで囲って)返すだけのところから始まっていたりします(initial commit) 製作者以外の目線だとまったく気にされないであろう機能で悲しい顔に

ブログサーバ(Go言語製)

こちらは非公開にしているので特に名前はついていませんが、ブログという静的なファイルをわざわざGo言語で配信をしているのには理由があります。実は、ブログサーバにはHTMLは 一切配置されておらず 、ただマークダウンの状態のファイルのみが存在します。これをユーザからのリクエストに対してオンラインにパースを行います。
このような設計にしているのは、ブログに記事を書くという負荷をできるだけ軽くするためにObisidianで普段メモとして書いているものをそのまま公開できるようにと考えているからです
この話を説明しましょう。公開中の記事Aと非公開の記事Bがあり、記事A内で記事Bに対する内部リンクが貼ってあるとします。この時、arMPは記事Bは非公開なので記事Bに対するリンクは作成せず、Plainなテキストとして処理を行います。問題はこの後で、記事Bを清書したので公開状態に変更することが考えられます。この時に記事Aから記事Bへのリンクを反映したいと考えるのは自然なことですが、「記事Bが内部リンクとして貼られている記事のリスト」を常に更新して持っておくのはかなり辛いです。
この問題をブログサーバでは次のような手段で解決を図っています。まず、初めに述べたようにユーザからのリクエストを受け取った時にマークダウンをパースして返答します。この時に、パースしたマークダウンはキャッシュしておくことで次のアクセスを受けた際には再度パースしなくて良いようにしておきます。次に、マークダウンが更新されたことをGithub Webhookで検知したら、今までのキャッシュを全てクリアします。これだけでユーザ目線では全ての記事が更新されることとなります。便利ですね。


おおまかにこのブログが持つ機能はこんな感じになっています。ゆるゆると、盆栽する気持ちでやっていこうと持っておりますので、たまには見にきてね。


テンプレート部分はGoでおいているので厳密には一切ではないかもしれないが、テンプレート部分をarMPに直で書くなりなんなりすれば完全に配置しないことも可能なので一切配置していないと言って過言ではない(過言)