ブログサイト"Stroll at Dawn"の制作日誌
このブログはNuxt3とNuxtConentで開発しています。 本来の目的も忘れ、思うさま時間をかけて作り込んでしまいました。
※近日中に清書予定!
制作の経緯
ポートフォリオと自分のお城
- よそさまに見せられるものが欲しかった
- ブログが書きたかったけど、なぜかQiitaやNoteに投稿する気は起きなかった
決め手はネイティブキャンプ
- オンライン英会話のアフィリエイト(稼ぐというよりは単におトクに受講を続けたい)
開発環境
- 言語:JavaScript/TypeScript
- ライブラリ:Nuxt3
- コンテンツ管理システム(CMS):NuxtContent(V2)
- ホスティング:Netlify
Nuxtがデプロイできて、アフィリエイトOKのホスティングサービス
- Markdownで記事を書く
- GitHubにpush
- Netlifyでビルド&デプロイが走る
- リリースまでめっちゃ速い!机でpushしてすぐベッドにゴロンと寝転んでスマホ見たら更新されてる感じ。
ちなみに、デザインは行き当たりばったりです。もはやどうやって作り始めたのか思い出せない…(そりゃ難航するわ)
Nuxt3
Nuxt3にした理由:スキルアップのため、ブログのような静的サイトが超作りやすい。
ブログなので、記事ページはURLを払い出してmeta属性を設定したかった。だからSSRかSSGが必須。
Content
NuxtContentとは、マークダウン記法で記事を書くことができるNuxtのプラグインです。
- WordPressとはついぞ向き合えなかった
- ブログを始めようとウゴウゴするも何もできなかった半生
- 12,000円ぐらいの有料テーマを無駄に2つも買った。が、何もしなかった。
- HeadlessCMSもイマイチ気が乗らなかった
- 通信量を気にするのがいやだった
- APIを作り替えるのが結構めんどくさい
結局VSCodeが一番ハードル低い
Contentは投稿体験もカスタマイズ体験も最高
いわゆる PX - PosterExperienceと CX - CustomizerExperience ですね。
こういう言葉があるかは分かりませんけども。
後述するMDCSyntaxが決め手だった
こだわりポイント
MDCSyntax
MDCSyntaxに感動した
マークダウン記法(.mdファイル)の中でVueコンポーネントを利用できる機能です。
Markdownをslotで渡したり、propsで属性を変えたり、さまざまな用途に使えます。書き方やディレクトリ構成もシンプルかつ直感的。
例えば、ブログでよく見るこんなパーツ...
このフキダシでしゃべるやつがやりたかったんです〜!
::baloon{chara="JavaScript"} めっちゃシンプルじゃないですか!?::::baloon{chara="PHP" opp} はあ!?マジでこれだけかよ!?すげぇな… っていうか::
コードはこんなふうに表示される
// コメントasync fetchData () => { const res = await client.get('', { apiKey: 'xxxxxx' }) console.log(res) return res.contents}
かっこいい目次
zennのもくじがすごくカッコいいので、あれを目指しました。
const toc = post._value.body.toc.links .flatMap((h2) => h2.children ? [ h2, ...h2.children ] : [ h2 ])
- useState()を使った
二転三転した記事カード
To Be Continuedパロディ
回遊性の高さ
カテゴリーとトピックの二重検索、スムーズな遷移
詰まったポイント
時間を奪ったものたち
ページ構成とクエリ
当初は/category/:idと/topic/:idも作っていたが、一覧ページはCSRに統一
→
Contentのつらみ
queryContent()がクセつよ、ファイル名で拾えないのでこういう処理挟んだ
おわりに
はじめて開発日誌をつけてみて思ったこと
contentだとコードが常にそばにいるからついつい改修してしまう
開発自体はなんと昨年11月26日からやってる。記事が全然書けない。