CREATE

ブログサイト"Stroll at Dawn"の制作日誌

2023.08.06
ブログサイト"Stroll at Dawn"の制作日誌

このブログはNuxt3NuxtConentで開発しています。 本来の目的も忘れ、思うさま時間をかけて作り込んでしまいました。

※近日中に清書予定!

制作の経緯

ポートフォリオと自分のお城

  • よそさまに見せられるものが欲しかった
  • ブログが書きたかったけど、なぜかQiitaやNoteに投稿する気は起きなかった

決め手はネイティブキャンプ

  • オンライン英会話のアフィリエイト(稼ぐというよりは単におトクに受講を続けたい)

開発環境

  • 言語:JavaScript/TypeScript
  • ライブラリ:Nuxt3
  • コンテンツ管理システム(CMS):NuxtContent(V2)
  • ホスティング:Netlify

Nuxtがデプロイできて、アフィリエイトOKのホスティングサービス

  1. Markdownで記事を書く
  2. GitHubにpush
  3. Netlifyでビルド&デプロイが走る
  4. リリースまでめっちゃ速い!机で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で属性を変えたり、さまざまな用途に使えます。書き方やディレクトリ構成もシンプルかつ直感的。

例えば、ブログでよく見るこんなパーツ...

JavaScript
JavaScript
わぁっ、これこれ!!
このフキダシでしゃべるやつがやりたかったんです〜!
PHP
PHP
Markdownの中でVueコンポーネントが使えるとか超便利だなMDC SyntaxSpanにカスタムクラスを当てる当てるのも簡単じゃねーか。 もうWordPressいらねーな…(複雑)
JavaScript
JavaScript
開発環境でウィンドウ2つ並べればほぼリアルタイムでプレビューできて、Qiitaみたいな投稿体験ですよ〜! VSCodeで完結するしあわせ…。見てくださいよPHPさん、私たちの会話のソースコード!
/post/dev-diary.md
::baloon{chara="JavaScript"}  めっちゃシンプルじゃないですか!?::::baloon{chara="PHP" opp}  はあ!?マジでこれだけかよ!?すげぇな… っていうか::
PHP
PHP
これもうほとんどティラノスクリプトじゃね?
JavaScript
JavaScript
そういえばゲーム制作ぜんぜん進んでない...

コードはこんなふうに表示される

/post/dev-diary.md
// コメントasync fetchData () => {  const res = await client.get('', {    apiKey: 'xxxxxx'  })  console.log(res)  return res.contents}

かっこいい目次

zennのもくじがすごくカッコいいので、あれを目指しました。

/pages/post/[...slug].vue
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日からやってる。記事が全然書けない。