Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Drop Nunjucks (Use preact-render-to-string) #680

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

knokmki612
Copy link
Member

@knokmki612 knokmki612 commented May 24, 2024

resolve #669

  • Nunjucksテンプレートを廃止します
  • JSX(Preact)テンプレートを採用します
  • src/stylesディレクトリを廃止します

重要な変更なので利用上のご意見をください

@knokmki612 knokmki612 added the breaking-change This change doesn't have backward compatibility label May 24, 2024
@knokmki612 knokmki612 requested a review from Hidetaro7 May 27, 2024 15:39
@Hidetaro7
Copy link
Contributor

確かに Nunjucks の式、評価などの記述方法は毎回忘れてしまって手間がかかる一方、
Reactライクにしたほうが馴染みがあるのは確かだと思い、そういう意味で良さそうに思えます。

一方、JSXやTSXはJavaScriptに馴染みのある人にとって学習コストは低いと思うが、
一般的なWebデザインやHTMLコーダーからすると敷居の高いものになりつつある気がする。
これはよく、ReactとVue, Svelteの比較をされるときにさらっと出てくる意見と思います。

このボイラープレートを使う対象が変わってくるように思えます。
よりプログラマーよりなリポジトリと思われますが、そうでもないですか?
そのあたりが明確になっていれば私自身は問題ないかと思います。

@Hidetaro7
Copy link
Contributor

補足: 個人的にはJSXに慣れておきたい気持ちがあるので、賛成ではあります。

@knokmki612
Copy link
Member Author

コメントありがとうございます 🙏

一般的なWebデザインやHTMLコーダーからすると敷居の高いものになりつつある気がする。

反復や条件分岐、値のテキスト展開などは他のテンプレートエンジンでも取り扱う範疇なので、その点はJSXに変えても必要な学習コストは変わらないかと思っています

敷居の高さを感じた部分について詳しくききたいです。

React ライク

Preact の実装を今回使用していますが、以下についてはマークアップをする人にとっては大きな違いかなと思います。(AstroのJSX風シンタックスにも近い恩恵が得られるかと)

Preactは、すべての主要なブラウザでサポートされているDOMの仕様にReactより忠実です。 Reactとの主な違いの1つはclassName属性の代わりに標準のclass属性を使うことができることです。

// This:

// ...is the same as:

両方ともサポートされていますが、ほとんどのPreact開発者は短く書くことができるのでclassを使うことを好みます。

https://preactjs.com/guide/v10/differences-to-react/#raw-html-attributeproperty-names より引用

@knokmki612
Copy link
Member Author

敷居の高さを感じた部分について詳しくききたいです。

これは例えば関数の返値としてテンプレートを書く点ですかね?

x-transition:enter-start="opacity-0 -translate-y-[2.5%] scale-95"
x-transition:leave="transition ease-in duration-75"
x-transition:leave-end="opacity-0 -translate-y-[2.5%] scale-95"
{...{ "x-on:click.outside": "open = false" }}
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alpine.jsの書式の一部がJSXの書式では無効になるので、いくつか回避しなければならない箇所があった

  • @click のような x-on のショートハンドはJSXの書式としては無効なので使用不可
  • x-on:click.outside のようなディレクティブのモディファイアはJSXの書式としては無効なので使用不可(スプレッド展開で回避)

@Hidetaro7
Copy link
Contributor

Hidetaro7 commented May 28, 2024

これは例えば関数の返値としてテンプレートを書く点ですかね?

もっと初学者的な言葉を使うと「JSの中にHTMLが書かれている」という点でしょうね。
同様の見方をすると、NunjucksやVueの場合HTMLの中に処理が書かれているように見えると思う人がいると思います。(こういう言葉でいうとまたそれも語弊があるのは承知のうえです)

「一般的なWebデザインやHTMLコーダーからすると」と前提で書いたとおり、
敷居が高く感じたというのは、私がというよりどういうスキルセットをもった人が使うかによると思っただけです。
私自身、Astro でも経験があるしそんなに敷居を高く感じていないです。(といえば嘘になるかもしれないですが)
個人的には何度もいいますが、良い選択かもしれないな、と思います。

Hidetaro7
Hidetaro7 previously approved these changes May 28, 2024
Copy link
Contributor

@Hidetaro7 Hidetaro7 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

手元でも起動してみました。
個人的には使ってみたいと思いました。

@Hidetaro7 Hidetaro7 dismissed their stale review May 31, 2024 02:47

もうちょっと議論したいことができた

@knokmki612
Copy link
Member Author

knokmki612 commented Jun 11, 2024

JSの中にHTMLが書かれている

JSX は JS のシンタックスシュガーであり、等価な JS のコードに変換可能という意味では JS で HTML を書いていると言えると思います。

NunjucksやVueの場合HTMLの中に処理が書かれているように見える

Nunjucksはテンプレート言語として、実のところ HTML 構文を拡張しているわけではなく、{{}}{% %} の中の Nunjucks の構文が評価されてテンプレートに展開されるので、使おうと思えば HTML 以外(XMLなど)でも使えると思います。
そのうえで、HTML テンプレートとして使うということは HTML でかかれている部分は HTML 仕様を満たす形で書かなければいけないということではありますね。

Vue(のVueテンプレート)は HTML 構文を拡張し互換性があることを謳っていますので、純粋な HTML マークアップの知識が活かせるということはたしかに言えそうです。

すべての Vue テンプレートは、仕様に準拠しているブラウザーや HTML パーサーでパースできる、構文的に正規の HTML です。

テンプレート構文 | Vue.jsより引用

書き味への対応としては、

JSX ランタイムとしての Preact は、#680 (comment) に挙げたように HTML 属性に関しては HTML 標準をリスペクトしている点で React よりは抵抗なく使えるだろうというのが1点、

関数の戻り値ではなくCommonMark HTML blocks風にJSXが書けるMDXであればより純粋な HTML マークアップに近いだろうということで #693 に不完全ではありますがドラフトの実装を提出している状態です。

私がというよりどういうスキルセットをもった人が使うかによる

はい。本リポジトリのボイラープレートとして利用対象者をどう想定するかという話はあると思います。

tuqulore/website-boilerplate はツクロアが業務で静的なサイトを構築する際に適したボイラープレートを整備することを目指していると私は思ってますので、その目的を満たすために要求するスキルがなにかを挙げてみることは価値があるかなとは思います。

@Hidetaro7
Copy link
Contributor

tuqulore/website-boilerplate はツクロアが業務で静的なサイトを構築する際に適したボイラープレートを整備することを目指していると私は思ってますので、その目的を満たすために要求するスキルがなにかを挙げてみることは価値があるかなとは思います。

ツクロアが提供するサービスの手段に、デザインとエンジニアリングの専門分野とする以上、JSXやMDXをスキルセットとして理解しているのは必要だと考えますので、リクルート要件や研修プログラムにも反映すると良い気がします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
breaking-change This change doesn't have backward compatibility
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Nunjucks → JSX
2 participants