ディレクトリ名やファイル名の取得部分をリファクタリングしている
前に contents のディレクトリ構造を変更したときに「もっといい書き方ないかな〜」という話をしていたら、miyaoka さんにリプライをもらった。
とりあえず先にパス一覧だけ再帰で取得してから処理するかなあ。こんな感じのhttps://t.co/BCxYK5Se7O
— miyaoka (@miyaoka) July 26, 2021
gist:32588131da0264e3699a4fa2e2c5f9d6
ディレクトリを掘っていき、ディレクトリだったら再帰的に関数を呼び出してファイルだったらそれを返す、みたいな感じでやると良さそう!とのことなのでやってみてる。
結果まだ悩んでいるところがあるので終わってないんだけど、それがファイル名を ID として返す部分。
各記事ページの URL の[id]となる部分はファイル名をそのまま取っている。なので、パスじゃなくてファイル名がほしいんだけど、そこをどうするかが悩みポイント。
パスは簡単に取得できて、my/repository/path/contents/2021-08/2021-08-08.md
みたいなのが取れるんだけど、それの最後の2021-08-08.md
のところだけほしい。ここから.md
の部分を抜き取って ID にしているので。
あらかじめ/contents
以下の全ファイル名を持った配列を用意することはできるんだけど、ファイルパスの配列を map で処理している最中に「今のファイルパスで処理すべきファイル名はこの配列の中のどれ?」というのを探さなくてはならないので、なんだかコスパが悪いというか、別々に保持する意味がないという感じがする。
なので、ファイルパスからファイル名だけを取得する正規表現を頑張って書くか別の方法にするかという感じになっている。
別の方法とは何?というのをこの記事を書きながら考えていたんだけど、そもそも各記事の URL は日付だけで、日付ならマークダウンファイルのメタ情報としてdate
というキーで持っているので、もしかしてそれを使えばいいのでは……?という気持ちになった。
これをやるとファイルパスを日付以外の別のものにしたい場合にまた一工夫必要になるけど、現状これで良さそうな気もする。