Freshで記事集約ブログを作った
なにしたか
DenoのFreshで記事を集約するタイプのブログサイトを今日作ってみました。
やっぱりDenoとFreshって開発体験が最高ですね。
名前はflu(インフルエンザ)っていう(!?)プロダクトですが、ネット上の様々な場所に拡散された記事たちをウイルスに例えて、それを集約できるブログということでこの名前にしました。(ちょっと不謹慎かも)
技術的な話
フレームワークにはFreshを利用しました。
サイトの集約の仕方としては、サイトのAPIやRSSをうまく活用しました。
また、サイトを集約する機構はプラグインとして独立しているため、簡単に自分でも作れます。
ちなみにファーストパーティのプラグインはpluginHello
(テスト用)と、pluginNote
(note.comの記事集約)とpluginZenn
(zenn.devの記事集約)を用意しているので、作らなくてもある程度集約できます。
インストールやデプロイの仕方はREADMEに書いている通り、gitで落としてflu.config.ts
を自分用に編集してdeno deployにデプロイするだけです。
flu.config.ts
について
このファイルはfluの設定ファイルです。自分のプロフィールやプラグインを設定できます。
初期設定は
import { pluginNote, pluginZenn } from './core/plugins.js'
import { defineConfig } from './core/config.js'
export default defineConfig({
title: 'My Hub',
description:
'I have uploaded the repository of this web application to GitHub.',
username: 'kstdx',
icon: 'https://avatars.githubusercontent.com/u/104671361?v=4',
links: {
twitter: 'https://twitter.com/kstdx',
github: 'https://github.com/kstdx',
others: [
'https://note.com/kstdx',
'https://zenn.dev/kstdx',
'https://scratch.mit.edu/users/kst_dx'
]
},
plugins: [
[pluginNote, 'kstdx'],
[pluginZenn, 'kstdx']
]
})
となっています。
最初にやってるインポートはファーストパーティのプラグインと、設定関数ですね。
title
その名の通りサイトのタイトルです。
(ユーザー名とは違います)
description
自分のプロフィール、説明です。
自分の仕事とか書いてもいいんじゃないでしょうか(適当)
username
ユーザー名(自分の名前)です。
ここもなんでもいいと思います。
icon
じぶんのアイコンのURLです。基本的には多分svgもできると思います。
imgタグのsrcにそのまま入ります。
links
自分の外部リンクです。
今の所Twitter(twitter
)とGitHub(github
)が独自アイコンに対応しており、それ以外(others
)はリンクアイコンが表示されます。
基本的には上のソースコードのように記述すればOKです。
plugins
集約するサイトを定義するプラグイン関数を置く設定です。
Arrayのように定義します。
plugins: [
[プラグイン関数, ...引数],
[プラグイン関数, ...引数],
[プラグイン関数, ...引数],
...
]
みたいに定義します。
ファーストパーティのプラグインのpluginHello
は引数なしで動きます。pluginNote
とpluginZenn
は引数にユーザー名を入れればいいです。
プラグイン関数について
プラグイン関数の作り方です。
{
where: 'サイト名(note.comとか)',
color: 'ラベル色(twindの対応してる色で)',
title: '記事タイトル',
description: '記事の説明とか本文(長いと省略されます)',
href: '記事のURL'
}
みたいな連想配列をリストにして、
[
{ where: '', color: '', ... },
{ where: '', color: '', ... },
{ where: '', color: '', ... },
...
]
みたいにしたものをreturn
してくれれば処理できます。
おわりに
作れば作るほどDenoとかFreshがスキになります。
もうすぐバレンタインなのに、サイトを作ってしまう...
まあいいか(!?)
Discussion