最初に懺悔しておくとこれを書いているのは 8/16 の 25 時前、つまり日付的には 8/17 です。さすがに 8/15 の投稿というには無理があります。でも許して、雑メモ置き場なので管理も投稿時間も雑です。
path.parse を使ってファイルの読み込みをリファクタリングする
8/8や8/9に書いたけど途中になっていた、path.parse
を使ったリファクタリングをした。したのは 8/15 です。
filePathList を共通化して path.parse を有効活用する · tagucch/random.tagucch.dev@0b3a0ba
コミットは 1 つだしプルリクエストにしなくてもいいかなと思って main ブランチに直接 push した。
ファイルパスを読み込むタイミングは基本的にビルド時のみで、ビルド時に動的にファイルやディレクトリを生成したりすることは(少なくとも記事のためのマークダウンファイルを置いている/contents
では)ないため、ファイルパスを一気に取得してそれを他の関数で使いまわそうという感じです。
dirents(DirectoryEntries)と dirNames(DirectoryNames)を使って map の中で map を呼んでいたときに比べて、map を一度呼ぶだけで済むようになった。
getPostData
という、id を引数にとりその id に紐づく投稿の中身を取得する関数があり、そこの実装は少し悩んだ。
id というのはこの記事でいうところの2021-08-15
の部分なのだが、これはファイル名でありファイルパスではないので、id からは対象のマークダウンファイルを特定できない。
引数をファイルパス(/path/to/repo/contents/2021-08/2021-08-15.md
)のような値に変えようかと思ったが、[id].tsx
でも呼んでいて、コンポーネントにはそのようなファイルパスを持たせていないのでなしになった。
で、解決策としては(コミットの通りなんだけど)すべてのファイルパスをpath.parse
に通してファイル名だけにしてから id と一致しているものを探すというやり方。
これはファイル名が id として機能していることが保証されているのでこのやり方でいいけど、もっといいやり方があるような気もする。
ひとまずコードの記述量が減ったので良い感じになった。