新しいブログサイトを作った

作成日: 2024-10-01 作成者: Morix

生成AIによる要約

ブログサイトをフルスクラッチで作成した経験について、クリーンアーキテクチャの実践、Golangライブラリの学習、生成AI組み込みの目的があったことを説明しています。DDDとクリーンアーキテクチャの実装、echoとsqlcの使用感、今後の機能追加計画などを詳しく述べており、技術的な挑戦と学びを重視した取り組みだったことがわかります。

ブログサイトをフルスクラッチで作った。
ブログプラットフォームや静的サイトジェネレータなど簡単にブログサイトを作る選択肢はあったけど、あえてゴリゴリにコーディングしてVPSをレンタルしそこにデプロイして運用してる。
なぜそういう選択をしたのか、作ってみてどうだったか感想を書いてみる。
どう実装したとかって話はおいおい記事にしていきたいと思うよ。

なぜフルスクラッチ?

簡単に言うと試したいことがいろいろあったから!

  • クリーンアーキテクチャを試したかった
  • Golangのいくつかのライブラリの勉強をしたかった
  • 生成AIを組み込んだアプリを作りたかった

それぞれ詳しく書いてみる。

クリーンアーキテクチャを試したかった

自分のキャリアはサーバーサイドとクラウドインフラどちらもあるんだけど、クラウドインフラいわゆるSREとしてキャリアのほうが長いし強い。
特に現職は4年以上SREとして働いているのでサーバーサイドのこと、特にソフトウェアアーキテクチャに弱い認識があった。
DDDの本もいくつか読んだりしててその実装方法としてセットで語られることの多いクリーンアーキテクチャを自分で作ってどういうものか確かめてみたかった。
ブログサイトというものをDDDの考えで設計・実装していくというのはおもしろいんじゃないかなーと思ったというのでやってみたというわけ。

Golangのいくつかのライブラリの勉強をしたかった

実は転職するんだけど、次の会社ではGoでサーバーサイドの実装をしており、フレームワークはechoを使っている。
SREとしてサーバーサイドの実装にも精通しておきたい気持ちがあったので、echoを使ってなにか作りたかった。
あとsqlcも以前から興味があったのでそれも使った。

自分が好きにいじれるアプリを作りたかった

生成AIというかLLMというかそのあたりを使う技術を持っていないと今後生き残れないと思うのでそれを試す環境が欲しかった。
ブログサイトであれば記事の要約とか添削とかいろんなことで試せそうだなと。
この記事の執筆段階ではまだ実装できてないんだけど・・・w
それは今後のお楽しみということでひとつ・・・

作った機能

  • 記事の作成・編集・削除するための管理画面
  • ブログサイトのトップ・About・記事一覧・記事詳細・タグ検索
  • 記事本文のMarkdownをHTMLに変換機能
  • 記事本文に画像添付
  • 記事のサムネイル画像自動生成
  • RSSページ

子どもを寝かしつけた後、毎日1時間ずつかけて実装した。
大体1ヶ月半くらいかかった。

作ってみた感想

DDD・クリーンアーキテクチャ

このサイトを作る前に 現場で役立つシステム設計の原則 を読んだんだけど、この本に書かれたことを忠実にやってみた。
値オブジェクトを作ってそれをまとめるドメインクラスを作る。そのドメインクラスを組立ててドメインロジックに仕立てるというやり方。
このやり方と Go言語で構築するクリーンアーキテクチャ設計 の設計・実装方法を参考にさせてもらった。
あと参考にした本は ドメイン駆動設計をはじめよう だなー。業務領域の章は最高だった。今回はそこ活かせてないけど・・・でも集約の考え方は勉強になったし取り入れさせてもらった!

で、どうだったのかというと、実装をするべき箇所がはっきりするのでどこになにを書けばいいのかわかりやすいのがよかった。
今回は記事をドメインモデルに、記事タイトルや記事本文などのそれぞれのパーツは値オブジェクトにしたんだけど、
本文でやるべきビジネスロジックは本文オブジェクトで書けばいいし、そのロジックを組み立てるのはサービス層でやればいいし、依存関係のルールもはっきりしてるので迷うことがない。
チーム開発する上でやりやすいんじゃないかなと思った。とはいえ簡単な処理書くのにも偉い仰々しい書き方をしないといけないのでそれがダルいっていうのはわかる。
あとDDDの知識なくクリーンアーキテクチャの手法だけ真似て実装するのは危険だなというのも感じた。ドメインモデルを正しく定義できないとドメインロジックを書くときに無理が出そうというか。
そうなるとただ単に仰々しい書き方を強いられるだけになってしまうんじゃないかな、たぶん。

echo・sqlc

echoはRailsと違って実装の道筋を立ててくれないので自由に実装できるので今回やったクリーンアーキテクチャとは相性はよかったと思う。
このフレームワークはAPIサーバーとして使われるのをメインで想定してると思ってて、今回自分がやったようなサーバーサイドレンダリングに関する知見がネット上でもあんまりなくてちょっと苦労した。この辺は今後記事にしたいな。

sqlcはSQL好きな自分にとってはすごい合ってた。
生のSQLには価値があると思ってて、それは障害時に原因となったクエリーの発生箇所の特定が簡単だからだ。あとはDBのバージョンアップの影響調査も簡単。
運用面を考えがちな自分にはこのツールはとてもよかった。
ただ複雑なクエリーは書くの辛いなと思った。動的なWHERE句書いたり。あれをどう運用してるのか活用してる人に聞いてみたいな。

今後作る機能

今後はこういうの作っていくぞー

  • Markdownエディタのリッチ化
    • いまこの記事を書いてて死ぬほどつらいので入力補完機能が必須だと思った・・・
  • 記事の要約を生成AIにやらせる
    • いまは先頭100文字を切り取ってMetaタグのdescriptionに入れてるだけなのでそれを生成AIで要約させて置き換えたい。
  • XのポストやAmazonのリンクをリッチ化
    • XのポストのURLを貼り付けたら自動変換するようにしたい
  • 記事の文章検索機能
  • おすすめ記事機能
    • いままで投稿した記事をAIに食わせ、それでおすすめ記事を考えさせるようにしたい