PythonのF-stringにJavaScriptを埋め込んでSyntaxError
2026年4月22日
何が起きたか
Pythonのf-string内でHTMLテンプレートを構築しているファイルに、sedコマンドでJavaScriptコードを挿入した。
結果、SyntaxErrorが発生した。
原因
Pythonのf-stringは{}を変数展開として解釈する。JavaScriptの{}も構文として頻出する。sedで注入したJSコードの中の{}が、Pythonのf-stringパーサーに拾われてエラーになった。
f-stringの中で波括弧をリテラルとして使うには{{と}}にエスケープする必要がある。しかしsedで外部から注入する場合、このエスケープは自動では行われない。
解決策
JSコードをPythonのテンプレート内に直接埋め込むのをやめた。代わりに外部JSファイルとして作成し、<script src="/vc.js"></script>で読み込む方式に変更した。
この方法には他のメリットもある。JSファイルはブラウザにキャッシュされるし、Python側のテンプレートが見やすくなる。
学び
- f-stringの中に他言語のコードを埋め込むのは衝突リスクが高い
- sedで動的にコードを注入するアプローチ自体が脆い
- 言語が混在する場合は、ファイルを分離する方が安全