Migration

v7, v7-alpha.41~42 から v8 への移行方法を説明します。どのバージョンでも作業は同じです。

WARNING

v8 は見た目上の大きな変化はありませんが、内部の仕組みが大きく変わりました。v7 で高度な Sass カスタマイズ(クラス名変更・mixin を使ったスタイルの転用)を行なっている場合は移行できませんので、v8 は新たな制作からの導入をおすすめします。

Table of Contents

CDN

v8 で使えなくなったクラス名はありません。CDN を利用されている場合は読み込んでいるパスを変更するだけで移行完了です。

migrate.css を追加で読み込むことで色やサイズ感も v7 を再現できます。

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/musubii@8.1.2/dist/musubii.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/musubii@8.1.2/dist/migrate.css" />

npm

1. Sass to CSS

v8 は Sass に対応していないため、既存の SCSS ファイルは CSS に書き直す必要があります。

手っ取り早いのは Sass のビルド後ファイルを分割する方法です。ここで MUSUBii に行なっていたカスタマイズとプロジェクト固有の CSS を抽出しておきます。

/src/assets/css
├── musubii-override
│   ├── button.css
│   └── badge.css
├── project
│   ├── tab.css
│   └── slider.css
└── style.css

2. Support PostCSS

CSS ファイルを @import 文で結合させるために、ビルド環境を PostCSS に対応したものに切り替えます。ここでは gulp を esbuild へ置き換えたと仮定して進めます。

$ npm install --save-dev esbuild
$ touch ./build.assets.js

esbuild で実行するスクリプトは例えば以下のように書けます。

// ex. build.assets.js
import esbuild from "esbuild"
 
async function build({
  entryPoints,
  entryNames,
  outbase,
  outdir,
  minify,
  isWatch,
}) {
  const options = {
    entryPoints,
    entryNames,
    outbase,
    outdir,
    minify,
    bundle: true,
    logLevel: "info",
  }
 
  if (isWatch) {
    let ctx = await esbuild.context(options)
    await ctx.watch()
    console.log("watching...")
  } else {
    await esbuild.build(options).catch(() => {
      process.exit(1)
    })
  }
}
 
const isWatch = process.argv.includes("-w")
 
Promise.all([
  build({
    entryPoints: ["./src/assets/css/*.css"],
    entryNames: "[name]",
    outbase: "",
    outdir: "./dist/assets/css",
    minify: true,
    isWatch,
  }),
])

package.json でスクリプトを実行しやすくしておきます。

{
  "name": "example-project",
  "private": true,
  "type": "module",
  "scripts": {
    "build": "node build.assets.js",
    "watch": "node build.assets.js -w"
  }
}

3. Upgrade MUSUBii

MUSUBii を v8 にアップグレード。

$ npm install musubii@latest

4. Import MUSUBii with migrate

CSS ファイルで @import を設定します。MUSUBii 本体に加え migrate.css を読み込んでください。これにより色やサイズ感を v7 と同じにできます。

@import "musubii";
@import "musubii/dist/migrate.css";

部分的にインポートする場合は以下から必要なものを選択してください。

/* musubii.css */
@import "musubii/src/bases/theme/light.css";
@import "musubii/src/bases/theme/dark-attr.css";
@import "musubii/src/bases/typo/font.css";
@import "musubii/src/bases/base/reset.css";
@import "musubii/src/bases/base/html.css";
@import "musubii/src/layouts/section/main.css";
@import "musubii/src/layouts/box/main.css";
@import "musubii/src/layouts/card/main.css";
@import "musubii/src/layouts/grid/main.css";
@import "musubii/src/layouts/joint/main.css";
@import "musubii/src/elements/text/main.css";
@import "musubii/src/elements/text/fablet.css";
@import "musubii/src/elements/text/tablet.css";
@import "musubii/src/elements/text/desktop.css";
@import "musubii/src/elements/text/wide.css";
@import "musubii/src/elements/text/blockquote.css";
@import "musubii/src/elements/text/code.css";
@import "musubii/src/elements/icon/main.css";
@import "musubii/src/elements/button/main.css";
@import "musubii/src/elements/badge/main.css";
@import "musubii/src/elements/alert/main.css";
@import "musubii/src/elements/list/main.css";
@import "musubii/src/elements/table/main.css";
@import "musubii/src/elements/form/main.css";
@import "musubii/src/elements/form/select.css";
@import "musubii/src/elements/form/label.css";
@import "musubii/src/elements/form/radio.css";
@import "musubii/src/elements/form/checkbox.css";
@import "musubii/src/elements/iframe/main.css";
@import "musubii/src/elements/wysiwyg/main.css";
@import "musubii/src/utilities/display/main.css";
@import "musubii/src/utilities/display/fablet.css";
@import "musubii/src/utilities/display/tablet.css";
@import "musubii/src/utilities/display/desktop.css";
@import "musubii/src/utilities/display/wide.css";
@import "musubii/src/utilities/flex/main.css";
@import "musubii/src/utilities/flex/fablet.css";
@import "musubii/src/utilities/flex/tablet.css";
@import "musubii/src/utilities/flex/desktop.css";
@import "musubii/src/utilities/flex/wide.css";
@import "musubii/src/utilities/float/main.css";
@import "musubii/src/utilities/space/main.css";
@import "musubii/src/utilities/margin/main.css";
@import "musubii/src/utilities/negative/main.css";
@import "musubii/src/utilities/padding/main.css";
@import "musubii/src/utilities/radius/main.css";
@import "musubii/src/utilities/size/main.css";
@import "musubii/src/utilities/size/fablet.css";
@import "musubii/src/utilities/size/tablet.css";
@import "musubii/src/utilities/size/desktop.css";
@import "musubii/src/utilities/size/wide.css";
@import "musubii/src/utilities/overflow/main.css";
/* migrate.css */
@import "musubii/src/bases/theme/legacy.css";
@import "musubii/src/layouts/box/legacy.css";
@import "musubii/src/layouts/card/legacy.css";
@import "musubii/src/elements/text/legacy.css";
@import "musubii/src/elements/button/legacy.css";
@import "musubii/src/elements/badge/legacy.css";
@import "musubii/src/elements/alert/legacy.css";
@import "musubii/src/elements/list/legacy.css";
@import "musubii/src/elements/form/legacy.css";
@import "musubii/src/elements/wysiwyg/legacy.css";

5. Import override and project CSS

抽出しておいた MUSUBii のカスタマイズ CSS とプロジェクト固有の CSS をインポートします。ビルドを行い、サイトの CSS に問題があれば調整を行なってください。

/* ex. style.css */
@import "musubii";
@import "musubii/dist/migrate.css";
@import "./musubii-override/button.css";
@import "./musubii-override/badge.css";
@import "./project/tab.css";
@import "./project/slider.css";

6. Search and replace

※この作業は任意です。行わなずとも運用上の問題はありません。

v8 で追加された短縮版のクラス名を適応する場合は Optimize のページを参照してください。