refactor(style): 非推奨の Sass @import を @use へ置き換える - #70
Merged
Conversation
Dart Sass 3.0 で @import は削除される。unitrad 系は _default.sass の変数を サイト側の config.sass が上書きする形で、@import のグローバルスコープに 依存していた。 @use では他のモジュールの変数を default.$name: value の形で書き換える。 app.sass が default -> config -> main... の順に @use するので、config での 上書きは main 以降の評価に反映される。 rem() は _main.sass にあり _top / _side / _result / _bottom から使われていた。 @use では読み込んだ側からしか見えないので、CSS を出さない _functions.sass に 分けて使う側から @use した。あわせて ceil() を math.ceil() にした (Dart Sass 3.0 で削除されるため。17個の値で旧実装と一致することを確認済み)。 conf/ の1サイトでコンパイルした CSS は移行前と SHA256 まで一致。 DEPRECATION WARNING も0件になった。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ryuuji
added a commit
that referenced
this pull request
Aug 5, 2026
unitrad-view側のモダン化(PR #79)で実証済みの構成に合わせ、gulp-sass/browserify/ babelify/Flow/mochaを撤去し、Node製ビルドスクリプト(tools/build.mjs)+esbuild+ TypeScript+node:testへ全面移行した。React本体のロジックは変更していない (型注釈の追加とesbuildのCJS/ESM interop対応のみ)。 - ビルド: tools/lib/*.mjs(esbuild + sass-embedded + postcss + ejs)。confが 1件のみのため、view側の--list一括ビルドやtools/ci/verify配下は移植しない - 型: flow/declare.js相当をsrc/types.d.tsへ。tsconfigはstrict:false/ noImplicitAny:falseの現実的な設定 - superagent依存をfetchベースの自作request.tsへ置き換え、core-jsを撤去 - react-paginateのCJS/ESM interop起因のReact error #130を予防的に修正 - テストはnode:test + 自作tsx-loaderへ移行し、view側同様history/request/ view描画のテストも追加してカバレッジを揃えた - ESLint/Babel/Flow設定一式を削除し、tsc --noEmitの型チェックのみに一本化 - CIにtypecheckステップを追加 新旧ビルドの出力比較: app.css/index.htmlはSHA256まで完全一致、app.jsは 193643 bytes(旧280880 bytes。core-js等の撤去による削減)。型チェック0エラー、 node:testスイート185件全件パス。 view側で見つかった砺波市・白河市・山口・横浜市向けの顧客固有ハードコードは view固有のカスタマイズのため移植していない。Sassの@import→@use移行は このリポジトリで既に完了済み(PR #70)のため対象外。 Claude-Session: https://claude.ai/code/session_01TBuCdY1AzZrVnRHRXUkLyG Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
ryuuji
added a commit
that referenced
this pull request
Aug 5, 2026
unitrad-view側のモダン化(PR #79)で実証済みの構成に合わせ、gulp-sass/browserify/ babelify/Flow/mochaを撤去し、Node製ビルドスクリプト(tools/build.mjs)+esbuild+ TypeScript+node:testへ全面移行した。React本体のロジックは変更していない (型注釈の追加とesbuildのCJS/ESM interop対応のみ)。 - ビルド: tools/lib/*.mjs(esbuild + sass-embedded + postcss + ejs)。confが 1件のみのため、view側の--list一括ビルドやtools/ci/verify配下は移植しない - 型: flow/declare.js相当をsrc/types.d.tsへ。tsconfigはstrict:false/ noImplicitAny:falseの現実的な設定 - superagent依存をfetchベースの自作request.tsへ置き換え、core-jsを撤去 - react-paginateのCJS/ESM interop起因のReact error #130を予防的に修正 - テストはnode:test + 自作tsx-loaderへ移行し、view側同様history/request/ view描画のテストも追加してカバレッジを揃えた - ESLint/Babel/Flow設定一式を削除し、tsc --noEmitの型チェックのみに一本化 - CIにtypecheckステップを追加 新旧ビルドの出力比較: app.css/index.htmlはSHA256まで完全一致、app.jsは 193643 bytes(旧280880 bytes。core-js等の撤去による削減)。型チェック0エラー、 node:testスイート185件全件パス。 view側で見つかった特定顧客サイト向けの顧客固有ハードコードは view固有のカスタマイズのため移植していない。Sassの@import→@use移行は このリポジトリで既に完了済み(PR #70)のため対象外。 Claude-Session: https://claude.ai/code/session_01TBuCdY1AzZrVnRHRXUkLyG Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
なぜ
Dart Sass は
@importを非推奨にしており、Dart Sass 3.0 で削除される。CALIL org 全体では31リポジトリ・247行が該当し、うち active は17リポジトリ・193行。
このPRはその一部。
unitrad 系がやっていること
src/sass/app.sassを、サイトごとのconf/<site>/を include path に足してコンパイルする構成。
configとindexはサイト側から解決される。_default.sassの変数をサイトのconfig.sassが上書きしてテーマを差し替えている。この「後から読み込んだファイルが変数を上書きする」形は
@importのグローバルスコープに依存しているので、単純に
@useへ置き換えると壊れる。どう直したか
変数の上書きは
default.$name: valueにした。@useでは他のモジュールの変数をこの形で書き換えられる。app.sassがdefault→config→main… の順に@useするので、configでの上書きはmain以降の評価に反映される。rem()は_functions.sassに分けた。_main.sassで定義され_top/_side/_result/_bottomなどから使われていた。
@useでは読み込んだ側からしか見えないので、CSS を出さないモジュールに分けて使う側が
@use 'functions' as *する。CSS を出さないので
@useの位置は出力順に影響しない。$standard-remは関数の呼び出し時に評価されるため、config.sassの上書きも効く。app.sassは@importを@useに置き換えるだけ。app.sassは@charsetしか持たず自分の規則が無いので、読み込み順は変わらない。このリポジトリでの結果
conf/の1サイト。コンパイルした CSS は移行前と SHA256 まで一致あわせて
rem()のceil()をmath.ceil()にした(Dart Sass 3.0 で削除されるため)。17個の値(負数・小数含む)で旧実装と一致することを確認している。
🤖 Generated with Claude Code