「フィールドに値を自動でセットしたいけど、後から書き換えられると困る…」 そんな悩みはありませんか?
以下の記事では、JavaScriptによるカスタマイズ事例としてログインユーザー名を文字列フィールドに自動入力する方法を紹介しています。
【kintone】ログインユーザー名を自動入力する方法(JavaScriptサンプル) - shikumika’s diary
今回はこの記事を参考に、「自動入力した値を編集不可にする」 仕組みを加えた改善版を紹介します。
編集不可にしたい場合は、コードに record[フィールドコード].disabled = true を1行追加するだけで実現できます。
レコードの再利用やアプリアクションでコピーした特定のフィールドを編集不可にしたい場合にも参考になる方法です。
内容:
動作確認は、2026年4月時点のkintone(スタンダードコース)です。
なぜJavaScriptカスタマイズが必要か
レコードの再利用・アプリアクションでコピーしたフィールドを編集不可にできない
kintoneには、登録済みレコードの内容をコピーして新規登録できるレコードの再利用機能や、アプリアクション機能があります。 ただし、いずれの方法もコピー後に編集が可能な状態になります。
コピーしたフィールドを編集不可にしようとして、フィールドのアクセス権で「編集不可」に設定すると、コピーされるはずの値が空欄になってしまいます。
「[フィールドのアクセス権]の設定で編集のチェックを外すと、レコードを再利用する際にも、そのフィールドは編集できずに空欄で保存されます。」
つまり標準機能では、「値をコピーしてきて編集不可にする」ことができません。 この課題を解決するために、JavaScriptカスタマイズが必要になります。
アクセス権とJavaScriptの disabled は動作が異なる
「アクセス権で編集不可」と「JavaScriptで disabled = true」は、一見似ていますが動作が異なります。
「フィールドの編集を不可に設定しても、値を書き換えることができます。編集権限のないフィールドの値を書き換えた場合、フィールドの値を変更できません。」
つまり、JavaScriptの disabled = true はフォーム上の手入力を制限するものです。
JavaScriptコードからの値のセットは引き続き有効なため、自動入力と編集ロックを組み合わせて使うことができます。
一方、アクセス権で「編集不可」に設定すると、JavaScriptからの値の書き換えも反映されません。
| 方法 | 再利用・コピー時の値 | JavaScriptからの書き換え |
|---|---|---|
| アクセス権で編集不可 | 空欄になる | 反映されない |
disabled = true(今回) |
値が保持される | 可能 |
JavaScriptカスタマイズのポイント解説
編集不可の基本は .disabled = true を追加するだけ
record[targetField].disabled = true;
この1行は、値のセット処理より後に書くことを推奨します。 動作上の違いはありませんが、「自動入力してからロック」という処理の意図が コードから読み取りやすくなります。
一覧画面のインライン編集にも対応
kintoneでは[レコードの一覧]画面でレコードを直接編集できるインライン編集機能があります。
標準機能でインライン編集自体を無効にすることもできます(参考:[レコードの一覧]でのレコードの直接編集と削除を無効にする | kintoneヘルプ)。
次のサンプルコードではインライン編集を有効にしたまま、指定したフィールドのみ編集不可にする方法を示しています。
一覧画面のビューに対象フィールドが含まれていない場合も考慮し、フィールドの存在確認を行っています。
その他の注意点
- ライトコースではJavaScriptカスタマイズを利用できません
- 次のコードの
作成者名はフィールドコードです。フィールド名と異なる場合があるため、アプリの設定画面で確認してください .disabledはフォーム表示中のみ有効です。API経由の更新を制限するには、アクセス権やプロセス管理を併用してください
サンプルコード
【kintone】ログインユーザー名を自動入力する方法(JavaScriptサンプル) - shikumika’s diary を参考に、「自動入力した値を編集不可にする」 仕組みを加えたサンプルです。
(function() { 'use strict'; const events = [ 'app.record.create.show', 'app.record.edit.show', 'mobile.app.record.create.show', 'mobile.app.record.edit.show', 'app.record.index.edit.show' // 追加:一覧画面でのインライン編集開始時、モバイルは機能なし ]; kintone.events.on(events, function(event) { const record = event.record; // ▼ 設定1:フィールドコード(アプリに合わせて変更してください) const targetField = '作成者名'; // ▼ 設定2:自動入力したいテキスト(例:ログインユーザー名) const autoText = kintone.getLoginUser().name; // 一覧画面(インライン編集)では対象フィールドが現在のビューに含まれていない場合があるため確認 if (!record[targetField]) { return event; } // 空欄のときだけセット(編集画面での上書きを防ぐ) if (!record[targetField].value) { record[targetField].value = autoText; } // フィールドを編集不可にする record[targetField].disabled = true; return event; }); })();
autoText の値を変えることで、次の用途にも対応できます。
| 用途の例 | autoText に設定する値 |
|---|---|
| ログインユーザー名 | kintone.getLoginUser().name |
| ログインユーザーのメールアドレス | kintone.getLoginUser().email |
| 固定テキスト | '営業部' |
設定手順
1.アプリの準備
文字列(1行)フィールドを追加し、フィールドコードを 作成者名 に設定します。
2.JavaScriptファイルを登録
上記のコードをテキストエディタ(「メモ帳」など)にコピーし、
| 項目 | 内容 |
|---|---|
| 文字コード | UTF-8(BOMなし)※Windows「メモ帳」の場合は「UTF-8」を選択 |
| ファイル名 | set_field_locked.js(任意) |
として保存後、「JavaScript / CSSでカスタマイズ」の設定画面でアップロードしてください。 アップロード手順の詳細はJavaScriptやCSSでアプリをカスタマイズする | kintoneヘルプをご参照ください。
まとめ
- 標準機能のアクセス権では「値をコピーしてきて編集不可にする」ことができないため、JavaScriptカスタマイズが必要になる
record[フィールドコード].disabled = trueを1行追加するだけで編集ロックを実現できるautoTextの値を変えることで、ユーザー名以外の任意のテキストにも応用できる.disabledはフォーム表示中のみ有効。完全な保護にはアクセス権・プロセス管理の併用が必要
以上、文字列フィールドにテキストを自動入力して編集不可にする方法でした。