Vue.js+Vuetify.jsを使って、レコードの一覧と詳細をシングルページで作成しよう!
はじめに
Cybozu CDNにも公開されているようにVue.jsのJavaScriptライブラリが近年シングルページアプリケーション(SPA)の開発環境として人気を博しているようです。
AngularJSやReactよりも比較的に覚えやすく、フロントエンド初心者でもとっつき易いプラットフォームだと思います。
今回は、このVue.jsのライブラリーとVue.js用のUIライブラリーのVuetify.jsを使って、カスタマイズビュー上でレコード一覧と詳細をシングルページ上で実現します。
リアクティブな検索機能も作成します。
開発の流れ
STEP1:kintoneアプリの設定・変更
アプリの追加
kintoneアプリストアにて、検索テキストボックスに「顧客リスト」と入力し検索します。
そして、検索結果の「顧客リスト」アプリをサンプルデータを含めて追加します。
フィールドコードの変更
「顧客リスト」アプリを開き、「アプリの設定」画面の「フォーム」タブで次の表を参考にフィールドの設定を確認・変更します。
| フィールドの種類 | フィールド名 | フィールドコード |
|---|---|---|
| 文字列(1行) | 会社名 | Company_name |
| 文字列(1行) | 部署名 | Department |
| 文字列(1行) | 担当者名 | Representative |
| 文字列(1行) | 郵便番号(数字のみ) | Zip_code |
| 文字列(1行) | TEL(数字のみ) | Phone |
| 文字列(1行) | FAX(数字のみ) | Fax |
| 文字列(1行) | 住所 | Address |
| ドロップダウン | 顧客ランク | Rank |
| 文字列(1行) | メールアドレス | |
| 文字列(複数行) | 備考 | Note |
| レコード番号 | レコード番号 | record_no |
| 数値 | 緯度 | lat |
| 数値 | 経度 | lng |
ライブラリの追加
次に「設定」タブを開き、「JavaScript / CSSでカスタマイズ」をクリックして、以下のJavaScriptファイル、CSSファイルのURLを指定し、設定を保存します。
JavaScriptファイル
- https://js.cybozu.com/vuejs/v3.5.17/vue.global.prod.js
- https://cdn.jsdelivr.net/npm/vuetify@3.8.12/dist/vuetify.min.js
CSSファイル
- https://cdn.jsdelivr.net/npm/@mdi/font@7.4.47/css/materialdesignicons.min.css
- https://cdn.jsdelivr.net/npm/vuetify@3.8.12/dist/vuetify.min.css
STEP2:カスタムビューでのVue.jsのテンプレート開発
今度は、「一覧」タブで、「+」サインをクリックして、一覧を追加します。
一覧設定画面で、以下を設定します。
- 一覧名:Vuetifyテーブル
- 表示形式:「カスタマイズ」を選択
- HTML:後述のVueテンプレート
- ページネーションを表示する:未選択
また、「一覧ID」をメモしておいてください。
以下のようにVuetify.jsでテンプレートを作成します。
|
|
以上の設定後、変更を保存します。
また、以下のようにcssをカスタマイズすることで、一覧の行表示の色分けが可能です。
「vuetify_sample.css」のように適当なファイル名をつけて保存し、「JavaScript / CSSでカスタマイズ」の設定画面で、アップロードします。
|
|
解説
一覧表示と詳細表示をdetailViewのフラグで切り替えています。
|
|
|
|
|
|
ページのタイトルと検索フィールドを表示します。
searchプロパティーでテーブルのフィルター機能と連携しています。
v-modelで指定することにより、双方向のデータバインディングを実現しています。
|
|
一覧テーブルを表示します。
フッター部分にページ切り替え表示を加えます。
headers items searchのデータをバインディングしています。
|
|
詳細表示のトップにボタンを配置します。
今回は、「一覧に戻る」と「変更を保存」のボタンを作成しました。
|
|
顧客の詳細情報を表示します。
ここで変更したフィールドのデータは即座に一覧のデータにも反映されていますが、「変更を保存」しない限り、kintoneのデータベースへは変更が反映されていません。
|
|
|
|
STEP3:Vue.jsによるプログラムの開発
以下のサンプルコードを参考にVue.jsのプログラムを作成します。
|
|
プログラム作成後、「sample_vue.js」等のファイル名を指定して保存し、kintoneの「JavaScript / CSSでカスタマイズ」の設定画面にて、アップロードします。
解説
上記でメモしておいた一覧IDが一致した場合のみ、一覧表示のイベントで処理を続行します。
また、「ページネーションを表示する」を外したため、イベントの発生時にレコードが取得されていません。
よって、kintone APIより、レコードの一括取得を行います。
最大取得数は500件ですが、何も指定しない場合、初期値は100件までです。
|
|
createApp()でVue.jsのインスタンスを生成し、テンプレートのDOMにマウントします。
また、このときVuetifyを利用するためにuse()でVuetifyを読み込みます。
|
|
|
|
setupフックでは、以下の変数を定義しています。
detailsView:画面切り替えフラグcustomers:kintoneから取得した顧客レコード一覧情報customer:一覧から選択した顧客の詳細情報、search:検索フィールドで入力した文字列rankList:顧客ランクのドロップダウンの値headers:一覧のヘッダーのデータオブジェクト
|
|
以下は、ボタンがクリックされたときに実行される関数を定義しています。
showDetailメソッド:顧客一覧で詳細表示のアイコンがクリックされたときbackメソッド:「一覧に戻る」ボタンがクリックされたときsaveメソッド:「変更を保存」ボタンがクリックされたとき
|
|
STEP4:動作確認
一覧表示選択ドロップダウンより、作成したカスタマイズビューを選択します。
「検索」フィールドに検索したい文字列を入力すると、一覧の絞り込みが即座に行われます。
次に詳細表示のアイコンをクリックします。
詳細画面が表示されるので、「会社名」を適当に変更し、「変更を保存」します。
保存が成功した後「一覧に戻る」をクリックします。
一覧で「会社名」の変更が即座に反映されています。
注意事項
このサンプルでは、取得した100件までのレコードに対するレコードの検索絞り込みやページネーションのみ有効になります。
また、検索フィールドで絞り込みできるフィールドは、一覧に表示したフィールドのみです。
まとめ
カスタマイズビューをVue.jsとVuetify.jsを使って作成すると一覧と詳細ページがシングルページで比較的簡単に作成できます。
一覧の検索も入力に応じて絞り込みできたり、デバイスの画面の大きさに対して表示を切り替えできたりする機能を実現できます。
Vue.jsは、シングルページアプリケーションや携帯端末のアプリケーションの開発に適していますので、ぜひ、試してみてはいかがでしょうか?
参考サイト
このTipsは、2025年7月版kintoneで動作を確認しています。
