橋本 Hashimoto   Baku

橋本 Hashimoto   Baku

Gardenの設計 (Scratchpad)

This page is a personal scratchpad.

ページの識別子について

Morionでは、ページの識別子に3つの概念を用いている

  • path: ローカルにMarkdownとして保存する際のパス
    • %\:|?<>"といった、Windowsでは不正とみなされる文字列、やURLとしての制御文字は使えない
    • スペースは使える
    • /はそのままディレクトリ階層として認識される
      • e.g., up/down/100% User Supported
    • page唯一構造体に保存される
  • uri: URIとしてエスケープされたパス。pathから変換可能。
    • 1つ以上の空白文字は_ に、?#/%といったURIとしてinvalidな文字はエスケープされる
  • slug: ページの名前の同一性を検証するためのユニークキー。uri.toLowerCase()で小文字に変換される

slugが重複するページを作成することはできない
(slugは重複していないがuriが重複しているページは存在しないので、slugの重複だけで重複を検知できる)

ローカルのファイルシステム上で、ファイル名としては区別できるものの、slugが重複する場合は、後続して検知された方をリネームしない限りリモートに同期されないシステムにする

実装

  • 新規ファイルを作る時は、ページタイトルを入力すると、sanitizeTitleToPath でパスに変換される。
  • URI → ページの名前解決をする際は、normalizeUriToSlugでslugに変換した後、内部的にはslugを使って検索を行う。
  • DBでやAPIでは常に slug によって検索や更新、削除がなされる。
  • pathurislug の順に変換が可能。
  • uriからpathを一度だけ逆算する際は、_を半角スペースに変換するというルール
  • path, urislugはそれぞれユニークである必要がある