次世代フロントエンドツール「Vite」を a-blog cms で利用するためのコツ
この記事は Advent Calendar 2023 の24日目の記事となります。a-blog cms にまつわる25日分の記事が公開されていますので、是非ご覧ください。 https://adventar.org/calendars/8651
a-blog cms の テーマのビルド環境
a-blog cms 標準テーマのビルド環境は、これまで「webpack」を利用してビルドされていました。パッケージに入っている「omake」ディレクトリ内にある、ビルド系ファイルを自分のテーマに持ってくることで、webpack環境を利用できるようになっておりまます。ただ近年は「webpack」以外にもモダンなビルドツールが出てきましたので、今回は「Vite」というツールについてa-blog cmsで使用するためのコツを紹介したいと思います。
Viteとは?
公式サイト(https://ja.vitejs.dev/)
詳しくは公式サイトをご覧ください。従来のビルドツールに比べ、パフォーマンスに特化しているツールになっています。
この記事では、Viteの使い方や設定方法にはフォーカスせず、a-blog cms で利用する場合の設定方法やコツをご紹介します。
バックエンドとの統合
a-blog cmsのようにバックエンドがHTMLを配信するシステムの場合、少し工夫が必要です。 WordPressや、Rails、Laravelのような有名CMS・ライブラリの場合、プラグインが用意されておりプラグインを導入することにより、Viteとの統合が出来るようになっております。
a-blog cms で Viteを利用できるようにする
a-blog cms で Viteを利用できるようにします。まずは「vite.config.js」を調整します。
「build」オプションで、「manifest」を「true」に設定し、「input」でエントリーポイントとなるjs(themes/xxxx/src/js/main.js)を指定します。
build: {
manifest: true, // dist に manifest.json を出力
rollupOptions: {
input: {
bundle: resolve(__dirname, 'src/js/main.js'),
},
},
},
この設定をすることで、manifest.jsonにビルドされたアセットのパスが出力されるようになります。
manifest.jsonの例
{
"main.js": {
"file": "assets/main.4889e940.js",
"src": "main.js",
"isEntry": true,
"dynamicImports": ["views/foo.js"],
"css": ["assets/main.b82dbe22.css"],
"assets": ["assets/asset.0ab0f9cd.png"]
},
"views/foo.js": {
"file": "assets/foo.869aea0d.js",
"src": "views/foo.js",
"isDynamicEntry": true,
"imports": ["_shared.83069a53.js"]
},
"_shared.83069a53.js": {
"file": "assets/shared.83069a53.js"
}
}
この書き出された「manifest.json」の情報を使って、JSをHTMLに読み込みます。
専用モジュールの用意
上記で出力された「manifest.json」の情報をHTMLに出力するためのモジュールを作成します。
「extension/acms/GET/Vite.php」を作成して、以下コードを貼り付けてください。
<?php namespace Acms\Custom\GET; use ACMS_GET_Json_2Tpl; use Template; use ACMS_Corrector; class Vite extends ACMS_GET_Json_2Tpl { public function get() { $tpl = new Template($this->tpl, new ACMS_Corrector()); try { if (isset($_ENV['VITE_MODE']) && $_ENV['VITE_MODE'] === 'develop') { $vars['localhost'] = isset($_ENV['VITE_LOCALHOST']) ? $_ENV['VITE_LOCALHOST'] : 'http://localhost:5173'; } else { $json = $this->getManifest('themes/'.$_ENV['VITE_BUILD_THEME'].'/dist/manifest.json'); $vars = json_decode($json, true); if (is_array($vars) && $this->is_vector($vars)) { $vars = [ 'root' => $vars, ]; } } if (is_array($vars)) { return $tpl->render($vars); } } catch (\Exception $e) { if (DEBUG_MODE) { throw $e; } } return ''; } protected function env($key, $default = '') { return isset($_ENV[$key]) ? $_ENV[$key] : $default; } protected function getManifest($path) { try { $manifest = @file_get_contents($path); if (empty($manifest)) { throw new \RuntimeException('Empty Manifest.'); } } catch ( \Exception $e ) { return ''; } return $manifest; } }
HTMLテンプレートの修正
モジュールが作成できたら、JSを読み込むインクルードファイルを修正します。以下のように作成したモジュールを使って読み込んでください。
ポイントは、 で、ここは vite.config.js で指定したエントリポイントに合わせて変更ください。
<!-- BEGIN_MODULE Vite --> <!-- BEGIN src/js/main.js --> <script type="module" src="/dist/{file}" async></script> <!-- END src/js/main.js --> <!-- BEGIN develop --> <script type="module" src="{localhost}/@vite/client"></script> <script type="module" src="{localhost}/src/js/main.js"></script> <!-- END develop --> <!-- END_MODULE Vite -->
.envファイルの修正
.envファイルに以下を追記してください。
VITE_MODE=develop # develop | production
VITE_LOCALHOST=http://localhost:5173 # http://localhost:5173
VITE_BUILD_THEME=hoge # ビルド対象テーマを指定します
使用方法
ここまでで下準備は完了です。使い方ですが本番用ビルドをする場合と、開発ビルドを行う場合の2通りがあります。 普段開発するときは開発ビルドを行いファイル保存と同時にビルドが走らせてスムーズな開発を行います。本番環境にアップロードする場合は本番用のビルドを行います。
開発ビルド
「vite」コマンドを実行すると開発サーバーが立ち上がり、カーカルURLが表示されます。このURLを覚えていてください。
VITE v4.4.7 ready in 523 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
➜ press h to show help
次に、「.env」ファイルを修正します。
VITE_MODE=develop # developを指定
VITE_LOCALHOST=http://localhost:5173 # 先ほど覚えたURLを指定
VITE_BUILD_THEME=yomeruba-v2 # ビルド対象テーマを指定します
以上で、a-blog cms と Vite によるアセット配信が統合されるようになります。
本番用ビルド
「vite build --mode=production」コマンドを実行するとプロダクションビルドを行えます。 プロダクションビルドされたファイルを反映する本番環境の「.env」ファイルを以下のように修正します。
VITE_MODE=production # productionを指定
VITE_LOCALHOST=http://localhost:5173 # 適当な値で大丈夫です
VITE_BUILD_THEME=hoge # ビルド対象テーマを指定します
以上で、a-blog cms と Vite によるアセット配信が統合されるようになります。
以上となります。
フロントエンドツールを使っている方はぜひ試してみてください。
a-blog cms Advent Calendar 2023 が無事終了しました
今年も12月は Advent Calendar 企画で多くのサイトで a-blog cms のことを書いていただくことができました。ありがとうございます。あと、Advent Calendar に載ってないが、同時期に公開されたいくつかの記事も合わせて紹介しておきます。
a-blog cms Advent Calendar 2023 の記事
- 12/1 フォームのチェックボックスやラジオボタンの項目を編集可能にする | akasaya.com
- 12/2 ファイルを添付できるフォームのハマりどころ6選 | a-blog cms | Sugar Web Cloud
- 12/3 エントリー新規投稿画面で次のエントリーコードっぽいものを placeholder に表示させるカスタマイズ | kazumich.log
- 12/4 a-blog cms ブログ or カテゴリー 2023 | akasaya.com
- 12/5 a-blog cms で WebP画像対応している場合に元画像を表示する方法
- 12/6 a-blog cmsでエラーが出たときに、慌てないために | a-blog cms | ブログ | 株式会社データファーム
- 12/7 【前編】a-blog cmsのトライアル「ablogcms.io」を試してみた | BLOGS | nami-design.net
- 12/8 管理画面のカスタマイズの例 ― エントリーのカスタムフィールドを詳細設定の中に入れるカスタマイズ | akasaya.com
- 12/9 a-blog cms★のんびりラジオ 3 | すずきカレーのa-blog cmsメモ
- 12/10 カスタムユニットをテーマ継承で子ブログでもつかう方法 | a-blog cms | ishikawa note
- 12/11 [a-blog cms]Formモジュールとバリデーションのあれこれ
- 12/12 a-blog cmsで、エントリーにパスワードを設定する #a-blogcms - Qiita
- 12/13 決まった日時に公開したい時に!a-blog cms の公開予約機能 | a-blog cms | Asai Yurika
- 12/14 【後編】a-blog cmsのトライアル「ablogcms.io」を試してみた | BLOGS | nami-design.net
- 12/15 初心者向け Lite Editorで絵文字を使い、a-blog cmsをアメブロ風にする方法! #a-blogcms - Qiita
- 12/16 a-blog cmsのメルマガ配信で気をつけること|水越 佑介
- 12/17 NGワードで送信させないフォームのカスタマイズ | a-blog cms | ブログ | フォルトゥナ
- 12/18 今後、a-blog cmsを使ったWeb制作で意識したいこと | a-blog cms | SHINNOSUKE ARAI'S BLOG
- 12/19 a-blog cms をヘッドレスCMSとして Next.js でサイト制作するときのポイント | ブログ | UiDev
- 12/20 お問い合わせフォームの上の内容をユニットで編集できるようにする | スタッフブログ | ましじめ株式会社
- 12/21 ユニットデザイン制作のタイミングとユニット作成について | 保坂 スキルブログ | ZANMAI公式サイト 技術ブログ | 新潟 ホームページ制作 ZANMAI (ザンマイ)| Webプモーション会社
- 12/22 /user-friendly-dashboard.htmla-blog cmsの管理画面を使いやすくするtips | a-blog cms | MR. GRADATION
- 12/23 a-blog cmsとnotionでブログ時短投稿 | AOGIRI.net
- 12/24 次世代フロントエンドツール「Vite」を a-blog cms で利用するためのコツ | カスタマイズ | ブログ | a-blog cms developer
- 12/25 2023年の a-blog cms を振り返って | kazumich.log
その他の 2023年12月 a-blog cm 関連記事
![]()
[a-blog cms/多言語サイト] ローカライズされたページをGoogleへ伝える方法 | ウェブ制作 | 雑多制作 - Web/動画/紙媒体などの制作所
雑多制作
多言語サイトのように言語または地域ごとにローカライズされたページがある場合に、HTMLリンクタグを利用して、Googleに正しく情報を伝える方法をご紹介します。
![]()
Webサイトに必要な機能を網羅したローコードCMS「a-blog cms」
徹底的にSEO・コンテンツマーケティングするならランクエスト
a-blog cmsはWebサイトの制作や運用に必要な機能を取り揃えたCMSです。ローコード開発に対応しているため、最低限の制作知識があれば誰でも簡単にWebサイトの構築を内製化できます。
![]()
note(ノート)
a blog cms について、今日は、まとめていきたいと思います。a blog cmsは、国産CMSで、有限会社 アップルップルが運営しているCMSです。販売実績が約5,000本!という驚異的な数の販売がされ...