Skip to content

refactor(style): 非推奨の Sass @import を @use へ置き換える - #70

Merged
ryuuji merged 1 commit into
masterfrom
chore/sass-import-to-use
Aug 5, 2026
Merged

refactor(style): 非推奨の Sass @import を @use へ置き換える#70
ryuuji merged 1 commit into
masterfrom
chore/sass-import-to-use

Conversation

@ryuuji

@ryuuji ryuuji commented Aug 5, 2026

Copy link
Copy Markdown
Member

なぜ

Dart Sass は @import を非推奨にしており、Dart Sass 3.0 で削除される。
CALIL org 全体では31リポジトリ・247行が該当し、うち active は17リポジトリ・193行。
このPRはその一部。

unitrad 系がやっていること

src/sass/app.sass を、サイトごとの conf/<site>/ を include path に足して
コンパイルする構成。configindex はサイト側から解決される。
_default.sass の変数をサイトの config.sass が上書きしてテーマを差し替えている。

この「後から読み込んだファイルが変数を上書きする」形は @import
グローバルスコープに依存しているので、単純に @use へ置き換えると壊れる。

どう直したか

変数の上書きは default.$name: value にした。
@use では他のモジュールの変数をこの形で書き換えられる。app.sass
defaultconfigmain … の順に @use するので、config での上書きは
main 以降の評価に反映される。

# conf/<site>/config.sass
@use 'default'
default.$themeColor: #689B8C

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 まで一致
  • DEPRECATION WARNING は 0件

あわせて rem()ceil()math.ceil() にした(Dart Sass 3.0 で削除されるため)。
17個の値(負数・小数含む)で旧実装と一致することを確認している。
🤖 Generated with Claude Code

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
ryuuji merged commit 104d80e into master Aug 5, 2026
2 checks passed
@ryuuji
ryuuji deleted the chore/sass-import-to-use branch August 5, 2026 03:49
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant