Kintoneでの値変更をJavaScriptでどう検知すべきか調査した結果を示した。
編集後の値で処理を施す場合
以下の change.js の作りで、console.log している箇所で newValue を使って処理すれば良い。
(function() {
	'use strict';
	// レコードの変更イベント
	kintone.events.on(['app.record.create.change.建物名', 'app.record.edit.change.建物名', 'mobile.app.record.create.change.建物名', 'mobile.app.record.edit.change.建物名'], function(event) {
		// 変更後の値を取得
		const newValue = event.changes.field.value;
		// 変更前と変更後の値を比較
		console.log('値が変更されました:', '変更後:', newValue);
		
		return event;
	});
})();※『建物名』列の変更を検知したい場合の例。任意のフィールドコード名に書き換えること。
変更前の値を使いたい場合
変更前の値を使いたい場合は工夫が要る。
オンライン検索すると『event.changes.field.value』で比較が出来るという情報もあったが、嘘だった。『event.changes.field.value』には変更後の値しか入らないので注意して欲しい。
2025年3月9日現在では change のイベントで変更前の値は取得出来ない。ではどうするか。2種類の方式が考えられる。
1.変更前の値を保存しておき変更時に比較
レコードの作成/編集画面を表示した時に変更前の値を oldValue 変数に取得しておき、変更時に利用する方法。
(function() {
	'use strict';
	
	// グローバル変数で変更前の値を保存
	let oldValue = null;
	// レコード作成・編集画面を開いたときに変更前の値を記録
	kintone.events.on(['app.record.create.show', 'app.record.edit.show', 'mobile.app.record.create.show', 'mobile.app.record.edit.show'], function(event) {
		oldValue = event.record.建物名.value;
		console.log('変更前:', oldValue);
		return event;
	});
	// レコードの変更イベント
	kintone.events.on(['app.record.create.change.建物名', 'app.record.edit.change.建物名', 'mobile.app.record.create.change.建物名', 'mobile.app.record.edit.change.建物名'], function(event) {
		// 変更後の値を取得
		const newValue = event.changes.field.value;
		// 変更前と変更後の値を比較
		console.log('値が変更されました:', '変更前:', oldValue, '変更後:', newValue);
		
		return event;
	});
})();これは無駄な列を追加しない分データ構造を美しく保てるメリットがあるものの、別画面での情報を使うことになるのがコードの独立性上美しくない。
2.変更前の値保存用の列を用意し比較
ユーザーが変更出来ない列『建物名変更前』を設けておき、編集時に値を退避しておく方法。
(function() {
	'use strict';
	// レコードの変更イベント
	kintone.events.on(['app.record.create.change.建物名', 'app.record.edit.change.建物名', 'mobile.app.record.create.change.建物名', 'mobile.app.record.edit.change.建物名'], function(event) {
		// 変更前の値を取得
		const oldValue = event.record.建物名変更前.value;
		// 変更後の値を取得
		const newValue = event.changes.field.value;
		
		// 変更後の値で変更前の値を上書き
		event.record.建物名変更前.value = newValue;
		// 変更前と変更後の値を比較
		console.log('値が変更されました:', '変更前:', oldValue, '変更後:', newValue);
		
		return event;
	});
})();これは「1」の方法とは対照的で、無駄な列を追加するためデータ構造は汚くなるデメリットがあるが、処理は編集画面のみで完結するためコードの独立性上美しい。
所感
方法「1」も「2」も甲乙つけがたいメリデメがあるが、Kintoneがユーザー部門向けのサービスであることを考えると、分かりやすく御しやすい「2」の方式をオススメする。
ただ、使う側にとって嬉しいのはBefore-Afterの変更前・変更後情報両方を event 変数が持ちイベントの性質上求められ易い措置がとれるKintoneの仕様変更な気がする。処理速度に響きそうなため現実的でないかな。