2017-04-12 12:01 [青葉台旭が作った/プログラム] ## 自作の静的サイト・ジェネレータに階層ディレクトリ読み取り機能を付けた。 たとえば記事の原稿をnotebook_md ディレクトリに入れるとして、 将来何万もの記事ファイルを一つのディレクトリに入れておくのは現実的ではない。 そこで、サブディレクトリを作って、その中に記事を入れ込むことにした。 つまり、 「notebook_md/year2017/month04/entry.txt」 などという感じでMarkdown原稿を置けるようにした。 ### 生成されたHTML記事ファイルの保存場所は、相変わらず階層化されていない。 生成された記事HTMLファイルの保存場所は、元のMarkdownファイルの階層がどこであれ、 「notebook/」 という1つのディレクトリに保存される。 最終形態であるHTMLファイルは、整理・分類のしやすさよりも、リンクの永続性の方が 大事だと思ったからだ。 たとえば、何かの間違いで、5月の記事を「notebook_md/month04/entry.txt」として保存したとする。 当然、これを正しいディレクトリである「notebook_md/month05/」に移動したくなる。 このとき、元のMarkdown原稿と同じディレクトリ構造でHTML最終出力を行ってしまうと、 次回ビルドした時にentry.htmlのurlが変わってしまう。これは頂けない。 元のディレクトリ構造がどうであれ、最終的なHTMLファイルの置き場所を「notebook/」ディレクトリ1つに 絞ってしまえば、元記事のディレクトリはどこにでも自由に変更できる(元記事がどこにあろうとHTMLファイルの 永続性が保証される) ### HTMLファイルの置き場所を固定したため、元記事サブディレクトリに同じファイル名は使えない たとえば 「notebook_md/month2017/month04/entry.txt」 「notebook_md/month2017/month05/entry.txt」 という二つの記事があったとする。 この二つは、当然、別のファイルである。 しかし、これをHTML生成時に1つのHTML保存用ディレクトリに保存しようとすると、これも当然の話だが、 ベースネームが同じ「entry.txt」→「entry.html」になってしまって、競合する。 そこで、ベースネームが同じファイルを(別々のサブディレクトリで)見つけた場合、HTML生成時にエラーを出力して 生成が停止するようにした。 ### とにかく、URLの永続性(パーマネント)こそが大事だ。 リンク切れは、よろしくない。 上のような仕様にしたので元のMarkdown記事の置き場所を自由に変更しても良くなった。 どのように元記事を分類しようともHTMLのリンクには影響しない。 ### 将来何千何万ものHTMLファイルが1つのディレクトリ格納されることになる このサイトを末永く管理し続ければ、いずれ何千何万ものHTML記事が1つのディレクトリの中に生成されるだろう。 その巨大なディレクトリには、index.htmlや、タグ別のリンク・リストHTMLファイルで管理する。 つまり元記事のMarkdownはディレクトリ構造で分類し、出力先のHTMLディレクトリはインデックスファイルなど HTMLのリンクで分類・管理するという事だ。