萌えハッカーニュースリーダー

2025/09/08 00:34 Building a Multilingual Blog with FastHTML

出典: https://simn.fr/posts/multilingual-blog-fasthtml
hakase
博士

やあ、ロボ子!今日は個人のブログ構築に関する興味深い記事を見つけたのじゃ。

roboko
ロボ子

博士、こんにちは。ブログ構築ですか、面白そうですね。どんな内容なのでしょう?

hakase
博士

この記事によると、多言語対応やMarkdownサポート、コードハイライトなど、色々な要件を満たす必要があったらしいのじゃ。結構大変だぞ。

roboko
ロボ子

確かに、全部自分で実装するのは骨が折れますね。既存のフレームワークを使うのが一般的だと思いますが、何か問題があったのでしょうか?

hakase
博士

そう、既存のフレームワークはそれぞれ独自の構文や概念を持っていて、複数のフレームワークを切り替えるのが大変らしいのじゃ。この記事では、それを「認知的負荷(トランザクションコスト)」と呼んでいるぞ。

roboko
ロボ子

なるほど、フレームワークを切り替えるたびに学習コストがかかるということですね。それで、どう解決したんですか?

hakase
博士

FastHTMLというPython製のフレームワークを使ったらしいのじゃ。これならPythonだけでWebアプリケーションを構築できるから、他の言語を覚える必要がないぞ。

roboko
ロボ子

FastHTMLですか、初めて聞きました。Pythonだけで完結するのは魅力的ですね。

hakase
博士

さらに、「locality of behavior」という概念を導入して、機能に関連するコードを1箇所に集約したらしいのじゃ。これによって、コードの見通しが良くなるぞ。

roboko
ロボ子

コードが整理されていれば、保守も楽になりますね。他にはどんな工夫が?

hakase
博士

HTMXを使って、言語切り替え時にページ全体をリロードせずにコンテンツを更新するようにしたらしいのじゃ。これならユーザー体験も向上するぞ。

roboko
ロボ子

HTMXは部分的なリロードに便利ですよね。言語切り替えはどのように実装したんですか?

hakase
博士

言語選択の変更時にPOSTリクエストを送信して、`render_post`関数をトリガーしてコンテンツを更新するらしいのじゃ。セッションを使って、ユーザーの言語設定を保存するのもポイントじゃな。

roboko
ロボ子

セッションで言語設定を保持するのは良いですね。自動翻訳も導入したみたいですが、どのように?

hakase
博士

OpenAIのAPIとPydanticによるバリデーションを利用して、翻訳パイプラインを構築したらしいのじゃ。コンテンツの変更時に自動的に翻訳版を更新するようにしたらしいぞ。

roboko
ロボ子

OpenAIのAPIを使うのは賢い選択ですね。Pydanticでレスポンスの形式を定義するのも良いプラクティスです。

hakase
博士

コンテンツのハッシュ値を比較して、変更があった場合にのみ翻訳を実行するようにしたらしいのじゃ。これなら無駄なAPI呼び出しを減らせるぞ。

roboko
ロボ子

ハッシュ値で変更を検知するのは効率的ですね。日付やタグなどのメタデータはハッシュ値の計算から除外しているのもポイントですね。

hakase
博士

pre-commit hookを設定して、翻訳の同期を維持するようにしたらしいのじゃ。これで翻訳漏れを防げるぞ。

roboko
ロボ子

自動化は重要ですね。最後に、何か教訓はありましたか?

hakase
博士

HTMXのフォーム統合には予想以上の時間がかかったらしいのじゃ。Web標準には存在する理由がある、とも言っているぞ。

roboko
ロボ子

Web標準は大切ですね。コンテンツパイプラインを完全に制御することで、他の変換にも容易に拡張できるというのも興味深いです。

hakase
博士

そうじゃな。例えば、簡略化された説明やセクションごとの質問の自動生成もできるぞ。ところでロボ子、今日の夕食は何が良いかのじゃ?

roboko
ロボ子

博士、またご飯の話ですか...。そうですね、今日は特別に、博士の好きなナノマシン入りスペシャルゼリーはいかがでしょう?

hakase
博士

むむ、それは魅力的じゃな!でも、ナノマシンが暴走して、私が巨大化したらどうするのじゃ?

roboko
ロボ子

ご心配なく、博士。その時は私が、巨大ロボ子になって博士を止めますから!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search