bitrix-vue について
Bitrix 開発者向けの Vue 3 ガイドです。`ui.vue3` を使い、拡張機能や PHP ページでアプリを作成し、Bitrix のコンポーネントやサービスを利用する方法を説明します。Vue 2 からの移行、状態管理、デバッグも扱います。
主な機能
- 01`ui.vue3` による Vue 3 アプリ作成
- 02拡張機能と PHP ページでの読み込み
- 03Bitrix のローカライズとイベントサービス
- 04Pinia、Vuex、ルーティングの利用
- 05非同期・拡張可能なコンポーネント
- 06Vue 2 からの移行とデバッグ
活用シーン
- 01Bitrix 拡張機能での Vue UI 構築
- 02PHP ページへの Vue アプリのマウント
- 03旧 `ui.vue` コードの Vue 3 への移行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bxmaximum/ bitrix-framework-skills --skill bitrix-vueインストール後、Claude Code で/bitrix-vueを入力して読み込まれたか確認します。
詳細
BitrixVue 3
ベースライン:main 23.0+ · 検証済み:main 26.800.0、ui 26.687.0
ui.vue3 は Vue 3 と BitrixVue プラグイン($Bitrix)を使用し、ページ全体で 1 つの Vue を共有します。実行時にテンプレートをコンパイルします。SFC の .vue は使用せず、SSR にも対応していません。Vue 2(ui.vue、グローバルの BX.BitrixVue)はレガシーです。新しいコードには使用しないでください。
拡張機能内での使用(推奨)
import { BitrixVue, ref } from 'ui.vue3';
BitrixVue.createApp({
setup() {
return { items: ref([]) };
},
mounted() {
BX.ajax.runAction('vendor:module.item.list').then((r) => {
this.items = r.data.items;
});
},
template: `
<h2>{{ $Bitrix.Loc.getMessage('VENDOR_ITEMS_TITLE') }}</h2>
<div v-for="item in items" :key="item.id">{{ item.name }}</div>
`,
}).mount('#vendor-items');
BitrixVueと、すべての Vue API(ref、computed、markRaw、defineComponent…)はui.vue3からインポートします(カーネルの標準であり、ui.vue3.bitrixvueではありません)。rel: ['ui.vue3']で十分です。- 拡張機能のセットアップとフレーズについては、
bitrix-extensionsを参照してください。
PHP ページでの使用(ビルド不要)
\Bitrix\Main\UI\Extension::load('ui.vue3');
<div id="vendor-app"></div>
<script>
BX.Vue3.BitrixVue.createApp({ template: '<div>Hello</div>' }).mount('#vendor-app');
</script>
グローバルは BX.Vue3.BitrixVue です。BX.BitrixVue は Vue 2 用のため、ここでは未定義です。または、ページに ui.vue も読み込まれている場合は、気付かないうちに Vue 2 が使われます。
$Bitrix(すべてのコンポーネント)
| メンバー | 用途 |
|---|---|
$Bitrix.Loc.getMessage(code, {'#N#': n}) | フレーズ(BX.message 由来)。Vue の外部で JS から使用する場合は、main.core の Loc を使用します |
$Bitrix.eventEmitter | アプリケーションスコープの EventEmitter |
$Bitrix.Data.get/set | アプリケーションスコープの共有データ |
$Bitrix.RestClient.get() / $Bitrix.PullClient.get() | デフォルトの REST / Pull クライアント(bitrix-pull) |
BitrixVue.getFilteredPhrases(this, 'VENDOR_') の最初の引数は、Vue 3 ではコンポーネントインスタンスです(ドキュメントでは、引数を付けない Vue 2 形式で示されています)。
カーネルの構成要素
- コンポーネント:
ui.vue3.components.*(button、popup、hint、switcher…)。例:import { Counter } from 'ui.vue3.components.counter'(components: { Counter }→<Counter :value="5"/>。ui 26.200* 以降。代替策:ui.cntを自分でラップします)。ウィジェットのオプションについては、bitrix-uiを参照してください。 - 状態管理とルーティング:
ui.vue3.pinia、ui.vue3.vuex、ui.vue3.router。 - 遅延コンポーネント:
BitrixVue.defineAsyncComponent('vendor.module.heavy', 'HeavyForm')は、初回のレンダリング時に拡張機能を読み込みます。 - 拡張可能なコンポーネント:
BitrixVue.mutableComponent(name, def)。ほかのコードからはmutateComponent()/cloneComponent()で変更できます。
Vue 内でのカーネルウィジェット
Popup / Menu / Dialog / Popover / ActionPanel のインスタンスはリアクティブにしないでください。this.popup = markRaw(new Popup(...)) とするか、data() の外に保持します。ui 26.650 以降に再構築されたウィジェットはネイティブの #private フィールドを使用しています。リアクティブな Proxy 経由でアクセスすると、TypeError: Cannot read private member がスローされます。
デバッグ
/local/php_interface/init.php に define('VUEJS_DEBUG', true); を設定します(開発時のみ)。開発ビルドと開発者ツールが有効になります。この設定を有効にすると、VUEJS_LOCALIZATION_DEBUG により、テキストの代わりにフレーズコードが表示されます。
Vue 2(ui.vue)からの移行
BX.BitrixVue/import … from 'ui.vue'→ui.vue3。BitrixVue.component()/.directive()は Vue 3 では登録されません(コンソールエラー)。ローカルのcomponents: {}、app.component()、またはmutableComponent()を使用してください。getFilteredPhrases(prefix)→getFilteredPhrases(this, prefix)。destroyed→unmounted。フィルターはありません。$on/$offもありません。
チェックリスト
-
ui.vue3のみを使用し、すべてのインポート元をui.vue3にします。インラインスクリプトではBX.Vue3.BitrixVueを使用します。 - カーネルウィジェットのインスタンスは
markRaw()でラップします。 - フレーズは
$Bitrix.Loc/Loc経由で使用し、ハードコードしません。 - サーバー呼び出しには
BX.ajax.runAction(CSRF を含む)を使用し、生のfetchは使用しません。 -
unmountedで Pull のサブスクリプションを解除します。