2025-06-13
Chakra UIのバージョンが上がって大分立ちましたが、今回自分のこのブログのChakraのバージョンを3に上げることにしました。
過去にChakra UI v3の変更点について書いたこともあるので具体的な変更点が気になる方はそちらもご覧ください。 TODO: リンクを張る
https://www.chakra-ui.com/docs/get-started/migration
上記のマイグレーションガイドを参考にしながら、変更を行いました。
npx @chakra-ui/cli snippet add
によってtooltip
やcolor-mode
などのスニペットが生成されました。
ここは結構違いが大きかったです。 特にcomponentsはここでカスタムしないようになったのは大きな変更点でした。
snipet
で生成されたProvider
を使うように変更しました。
ChakraProvider
のtheme
がvalue
にリネームされていました。
npx @chakra-ui/cli typegen ./src/theme.ts
を実行することで、theme
の型定義が生成されます。
ここからは具体的に変更のあったコンポーネントを紹介します。
ToastはuseToast
がなくなり、useToast
の代わりにtoast
を直接インポートして使うようになりました。
Chakra UI v3ではHide
コンポーネントが削除されたので、レスポンシブスタイルを使うように変更します。
多くのhooksがChakra UIから削除されてしまったため、変更する必要があります。
Chakra UI v3では、useBreakpointValue
, useCallbackRef
, useDisclosure
, useControllableState
, useMediaQuery
しかhooksは提供されていません。
自分の場合はuseBoolean
とuseThemeColor
しか使ってなくて、簡単なhooksだったので、プロジェクト内にhooksを作成して対応しました。
sx
プロパティも削除されてしまい、css
に変わりました。
isExternal
propsがなくなってしまったので、target="_blank" rel="noopener noreferrer"
に変更しました。
このブログは小さなプロダクトのためあまり時間がかからなかったですが、大きなプロジェクトだとかなり以降は大変だろうなと思いました。 自動で更新できることろが少なく、hooksなどはどう移行するかを考慮しないといけないのでAIを使っても時間がかかりそうに思いました。 Chakra UIは依然としてサーバーコンポーネントを使うことができないので、これを気にPanda CSS を使ってサーバーコンポーネントを使えるようにするのも良さそうに思いました。 Panda CSSだとChakraが開発しているのもありスタイルの指定方法などは変わらずにサーバーコンポーネントを使えるので、次回はPanda CSSに移行してみる記事を書いてみようと思います。