Blog: Post "Level" Introduced

本ブログに、記事ごとの難易度を示す Level の概念を追加しました。

課題

最近、同僚や友人に Graph Database について説明する機会が増えてきました。

Graph Database に対する理解度は様々で、「実は以前研究で使ったことがある」という方もいれば、「Graph Database について初めて聞いた」という方もいます。「前の会社でプロダクションで使ったことがある」という方もいました。

日本での Graph Database の知見を広げるために本ブログを始めたわけですが、読者の方の最初の理解度は上記のように様々です。

今までは、新しい読者の方がブログに来た時に、自分が興味のある記事を探しやすいようにタグ一覧関連タグの機能を実装してきました。

ただし、全く初めての人が Graph Database について知りたいとなった場合、タグだけでは不十分です。タグに書かれたキーワードがそもそも初見のため、特に入門者の方にとっても、より良い取っ掛かりとなる読者体験が必要でした。

解決策

Level は、introductory / intermediate / advanced の三段階に分かれています。ブログ一覧ページなどで、記事ごとにレベルを表示させています。

Post Level Introduced Screenshot

各 Level ごとにページを用意してあり、Level 別ページではそのレベリングがされた記事一覧を閲覧できます。

例えば、「新しく Graph Database について学んでみたい」という方には、introductory ページを紹介することができます。

実装

各 Post に一対一の関係で Level ノードを追加しています。

執筆時点で、ブログ周りのスキーマは以下のようになっています。

Post Level Schema

例えば、本記事のメタデータを追加する Cypher は以下の通りです。

MERGE (p:Post {slug: '/2021-10-08-blog-post-level-introduced/', date: '2021-10-08', title: 'Blog: Post "Level" Introduced'})
MERGE (level:Level {value: 'introductory'})
MERGE (p)-[:LEVELED_WITH]->(level);

例えば、「Level ごとの記事数」をテーブルで表示させる Cypher クエリは以下のようになります。

MATCH (l:Level)
WITH DISTINCT l as levels
UNWIND levels as l
MATCH (l)<-[:LEVELED_WITH]-(p:Post)
RETURN l.value, count(p)

最後に

以上、本ブログに実装した Level について紹介しました。

2021-10-08