Nimでサイトを作るメモ
最近Nimで自分のサイトを作っているのだけれど、ある程度知見が溜まってきたのでアウトプットしていく。
ここのスクラップがある程度の量になったら記事にしたいところ。
開発で使っているツールとか
- Nim
- nimlsp(Nim公式のLSP。コレがあれば大抵事足りる。)
- Vim(Coc.nvimでnimlspを動かしてる。)
- Karax(NimのSPAフレームワーク)
- UIkit(CSSフレームワーク)
- live-server(サイトのプレビュー。便利。)
- watchmedo(Pythonのライブラリwatchdogに付属しているコマンドツール。ファイルの変更に応じてコマンドを実行したり出来る。便利。)
まずプレビューとかをまとめる。
-
live-server
該当のディレクトリでコマンドを実行すると勝手にページが開く。 -
watchmedo
Nimを自動でコンパイルするのに使っている。
詳しい解説は他の記事に譲るとして、ここでは実行しているコマンドだけ書く。aliasを設定すると良いかもしれない。
watchmedo shell-command --recursive --patterns '*.nim' --command 'nim js ${watch_src_path}' ./.
実際に動かすとこんな感じになる。
まだ作りかけだけどテストがてらGithub Pagesに上げてみた。
表示速度が謎に速い。
NimでHTMLを生成できる事は分かったけど、ブログ的なサービスを作るにはKaraxは向いてないと感じた。(SPAフレームワークだし)
でもKaraxのHTMLとNimを織り交ぜて書ける分かりやすさは他には変えられなさそうだなぁと思ってる。
そこで考えたのが、MarkDownを解析してNimのオブジェクトにして、その値を使ってKaraxのコードを動的に生成しようというもの。ただこれ僕の力量不足でMarkDownをうまくNimのオブジェクトに変えられそうになかった。(Nimのオブジェクトにする時に構造体の宣言が必要なので動的生成がしんどい)
悩んでるときにAsciidocというフォーマットを偶然見つけて、それをMarkDownで出来ないものかと探しているときに見つけたのがこちら。
僕がやろうと思っていた、Nimでブログを構築すると言う事を実現していた。 しかしこれにも一つ気になる事があって、Asciidocの機能でブログを作成しているのでKaraxに流用するのは厳しいと言う事。
う〜ん、どうしたものか。
(進捗状況)
Next.jsとかでブログを開発されている方の殆どはMarkDownをHTMLに変換して、SPAとSSGを組み合わせている例が多かった。
Nimでのコンテンツの埋め込み処理は組み込みのSCF(Source Code Formatter)で実装できるので実現しやすいのでは、と考えて実装している。
今はFrontMatterからタグの情報を読み取って、それぞれのタグのページを生成するコードを書こうと思っているけど、まぁ後からでも良いのかもしれない
まだサイトが完成してないけど、Netrifyを使ったデプロイをしてみたくて試してみた。
Netrifyは初めてでもサクッとサイトを公開出来たのでオススメ。
また、今回はOGPの設定もしてみた。