kinkozi ルックアップ拡張プラグインをご利用中に、ルックアップした値が正しく反映されず、保存もできないエラーに悩まされたことはありませんか?この現象は、ルックアップのキーとなる値で検索した際、対象のレコードが「1件(ユニーク)」に定まらない場合に発生します。特に「文字列(1行)」フィールドを指定している場合、kintoneの検索仕様により意図せず複数のデータがヒットしてしまい、この事象が頻発するため注意が必要です。
「文字列」でのルックアップは、システム内部で「次のキーワードを含む」条件の検索(以下、like検索と表記)が行われるため、マスターデータ内に「似た値(山田太郎と山田太郎次郎など)」が存在すると重複とみなされ、エラーになることがあります。一方、「数値」をキーにしている場合でも同一の内容のレコードが存在する場合は一意に絞り込まれずこの問題が発生します。「値の重複を禁止する」と「必須項目にする」に設定されていれば一意に絞り込めます。
今回は、文字列フィールド特有の「like検索」によるトラブルの仕組みと、この問題を解決するための2つの対処法をご紹介します。
原因:文字列フィールド特有の「like検索」¶
本プラグインの「独自ダイアログ」や「絞り込み」機能を使った場合は、kintoneカスタマイズのルックアップの機能を利用しております。kintoneカスタマイズのルックアップの機能は、ルックアップ元の値をキーにしてマスターデータを検索し、「検索結果が1件のみ(ユニーク)」である場合に限り当該レコードのデータをコピーします。
※技術的な参考情報
kintone APIの仕様については、cybozu developer networkのドキュメントもご参照ください。
レコード追加画面のイベント > ルックアップの取得を自動で行う
この際、kintoneの仕様としてフィールドタイプにより検索挙動が異なります。
- ルックアップ元が「数値」「レコード番号」「計算」の場合:
値が完全に一致するかどうかで判断されるため、「値の重複を禁止する」と「必須項目にする」に設定されていれば一意に絞り込めます(安全)。 - ルックアップ元が「文字列(1行)」の場合:
「like検索(キーワードを含む検索)」が行われるため、「値の重複を禁止する」と「必須項目にする」に設定されていても、フィールドの値を人間が「別物」だと思っていても、システム側が「重複(類似)」と判断してしまうケースがございます。
発生している事象リスト(文字列ルックアップの壁)¶
以下は、実際に「文字列(1行)」フィールドで検証を行って「重複(エラー)」と判定されたケースの一覧です。
これらは検索キーワードを内包する別のレコードがあり一意に定まらないためエラーとなります。
以下のようにマスターデータがあったとします。

上記データの商品コードをルックアップした時、以下の例ですと正しく入力補完されません。
- 「A-1」と「モデルA-1」
「A-1」で検索すると「モデルA-1」も like 検索によりヒットしてしまいNG。 - 「モデルA」と「モデルA-1」
「モデルA」で検索すると「モデルA-1」もlike検索によりヒットしてしまいNG。 - 「山田太郎」と「山田太郎次郎」
「山田太郎」で検索すると「山田太郎次郎」も like 検索によりヒットしてしまいNG。

取得ボタンを押しダイアログが開いて「選択」ボタンを押しても、ダイアログが上がる前のフォームにある値を基に検索するため、事象は変わりません。

なぜこれらが重複とみなされるのか?¶
これは、kintoneのカスタマイズに提供されているルックアップ用のAPIにおいて、文字列フィールドに対しては強制的にlike検索が行われる仕様だからです。現状の kintone で提供されている API を使う際の制限となるため、キーとなる文字列をユニークにするだけでは解決しない場合があります。
また、以下のように「スマホX」は「スマホXY」があるにもかかわらず like検索で一意に定まりルックアップにより入力補完されます。これは、kintoneの検索エンジンの単語区切りがかかわっていると考えます。

このように、kintoneの検索仕様(どこで区切られるか)を完全に予測して制御するのはリスクが高いため、後述の対処法にて回避していただくことが出来るかと考えます。
参考:kintoneの検索仕様と単語区切りについて
単語区切りや、詳細な検索仕様については、以下の外部記事やヘルプが非常に参考になります。
対処法1:内包関係を回避するようにデータを修正する(一番簡単)¶
もし、マスターデータのコード体系を変更できるのであれば、「あるデータが別のデータのキーワードを含まない(内包しない)」形に修正するのが最も手軽な解決策です。
具体的には、「桁数を揃える(ゼロ埋め)」などの対応が有効です。
- NG例:「A-1」と「モデルA-1」(A-1が含まれてしまう)
- OK例:「__A-001」と「モデルA-001」
このように、検索したいキーワード(__A-001)が、他のデータ(モデルA-001)の中に文字列として存在しない状態を作れれば、like検索であっても正しく1件に特定できます。
まずは、このデータの書き換えが可能かどうかをご検討ください。これで対応できるのであれば、この方法が一番簡単です。
対処法2:「レコード番号」をキーにする(確実な回避策)¶
データの書き換えが難しい場合や、どうしても内包関係を解消できない場合は、最も確実なワークアラウンド(回避策)は、ルックアップの紐づけ(コピー元のフィールド)を、文字列の「商品コード」などではなく「レコード番号」に変更することです。
なぜ「レコード番号」なのか?
- 絶対的な一意性:
レコード番号はkintoneが自動採番するシステムIDであり、絶対に重複しません。 - 検索仕様の違い:
レコード番号(数値等のタイプ)に対するルックアップでは、文字列のような「like検索」が行われません。「包含判定」や「単語区切り」の影響を受けず、ピンポイントで1件に特定できます。
「レコード番号なんて覚えていないから検索できないのでは?」と思われるかもしれませんが、ご安心ください。
本プラグインの「独自ダイアログ」機能を使えば、検索自体は「商品名」や「コード」で行い、裏側で「レコード番号」をセットすることが可能です。
設定変更の手順(対処法2の場合)¶
「レコード番号」を利用する場合の設定変更は以下の通りです。
- ルックアップ設定の変更(アプリ設定画面)
「関連付けるアプリ」の「コピー元のフィールド」を、これまでの「商品コード(文字列)」を指定しているルックアップフィールドとは別に、「レコード番号」をコピー元とするルックアップフィールドを新規作成してください。
※「ほかのフィールドのコピー」の設定はそのままで構いません(商品名や単価などをコピー)。既存のルックアップの「コピー元のフィールド」は変更できないため別途作成し直しとなります。 - プラグイン設定の確認
「独自ダイアログ」の設定で、検索・絞り込みを行いたいフィールド(商品名やコードなど)が表示されるように設定します。
これにより、ユーザーの操作感としては「ダイアログで名前を検索して選択」という便利な使い勝手を維持したまま、システム内部では「ユニークなレコード番号」で紐づくため、重複エラーが一切発生しなくなります。
まとめ¶
ルックアップフィールドが「文字列(1行)」の場合、「A-1」や「モデルA」といったデータの重複(like検索によるヒット)が発生しやすくなります。
お困りの場合は、まずは「対処法1(データの書き換え)」が可能かご検討ください。
もしデータの修正が難しい場合は、無理に解決しようとせず「対処法2(レコード番号への紐づけ変更)」を実施してください。kinkozi ルックアップ拡張プラグインの検索機能を活用すれば、レコード番号を意識することなく、安全かつ確実にデータをルックアップできるようになります。