
前の記事では、Markdownコードブロックの構文ハイライトを追加しました。
しかし、main.pyのルーティング関数("page_title": "Hello, Markdown!")のドキュメントページタイトル({{ page_title }})がまだハードコーディングされていることに気づいたかもしれません。これは非常に柔軟性がありません。新しいドキュメントを追加するたびにコードを変更する必要があるということでしょうか?
ドキュメンテーションサイトは柔軟である必要があり、記事をいつでも追加または削除できる必要があります。記事のメタデータ(タイトル、著者、日付など)は、コンテンツと同じように、Markdownファイル自体で定義する必要があります。
この記事では、Frontmatter(Markdownファイルの先頭にメタデータを定義するための一般的な仕様)を紹介し、FastAPIがそれを解析できるようにすることで、メタデータを動的にロードできるようにします。
ステップ1:Frontmatter解析ライブラリのインストール
python-frontmatterを使用して、ファイルからFrontmatterとMarkdownコンテンツを分離および解析します。
以下のコマンドでインストールします:
ステップ2:MarkdownドキュメントにFrontmatterを追加する
次に、docs/hello.mdファイルを変更して、先頭にFrontmatterを追加しましょう。
Frontmatterブロックは3つのダッシュ(---)で囲まれます。
docs/hello.mdを更新する:
ここでは、title、author、dateの3つのメタデータフィールドを定義しました。必要に応じてさらにフィールドを追加できます。titleフィールドは最終的に記事のpage_titleとして使用されます。
ステップ3:Frontmatterを解析するようにmain.pyを変更する
単純なopen().read()の代わりに、frontmatterライブラリを使用してファイルをロードするようにget_hello_docルーティング関数を変更します。
frontmatter.load()関数は、ファイルを2つの部分に解析します:
post.metadata:すべてのFrontmatterデータを含む辞書(例:{'title': 'Hello, Frontmatter!', ...})。post.content:Markdownコンテンツの本体のみを含む文字列。
main.pyを開き、次のように変更します:
ステップ4:実行してテストする
uvicorn main:app --reloadを実行してサーバーを起動します。
http://127.0.0.1:8000/docs/helloにアクセスします。
ブラウザのタブタイトルとページ上の<h1>タグが、「Hello, Markdown!」ではなく、「Hello, Frontmatter!」(hello.mdファイルのFrontmatterで定義したもの)に置き換わっていることがわかります。
結論と次のステップ
Frontmatterとその解析ロジックを導入することで、記事はサイトから完全に分離されました。
Markdown以外にも、Webサイトには画像などの静的ファイルが含まれます。FastAPIがこれらの静的ファイルを正しくデプロイし、オンラインでアクセスできるようにするにはどうすればよいでしょうか?
次の記事では、この問題を解決します。Markdownファイルで参照される静的アセット(画像など)を処理し、FastAPIによって正しくデプロイされ、最終的なWebページに表示されるようにします。
その他
サイトを構築した後、オンラインで他の人に見てもらえるようにデプロイしたいと思うかもしれません。しかし、ほとんどのクラウドプラットフォームは高価であり、このような練習プロジェクトのために高額を支払う価値はありません。
もっと経済的なデプロイ方法はありませんか?Leapcellを試してみてください。Python、Node.js、Go、Rustなどの複数の言語のデプロイをサポートしており、毎月寛大な無料枠を提供しているため、費用をかけずに最大20個のプロジェクトをデプロイできます。
Xでフォローする:@LeapcellJapan
関連記事:
