rex0220 アプリマイスター・レイで、既存アプリのフィールドコード変更をしてみます。
概要
rex0220 アプリマイスター・レイを使って、顧客リストアプリのフィールドコード変更をしてみます。
- 顧客リストアプリをアプリストアから作成
- 顧客リストの項目情報を取得
- 顧客リストのフィールドコード変更
顧客リストアプリ
顧客リストアプリをアプリストアから作成
手順作成
既存アプリのフィールドコードを小文字の英単語に変更したい
顧客リスト: appId: 3884
下記の手順のコードを作成して
・アプリのフィールド情報を取得する
・アプリのフィールドコードを小文字の英単語変更
手順作成の回答
お任せください!rex0220 アプリマイスター・レイです!🦊
既存アプリ(ID: 3884)のフィールドコードを、日本語から小文字の英単語(例: customer_name)に整理したいのですね。
フィールドコードを英字で統一するのは、API連携やJavaScriptカスタマイズの保守性(メンテナンスのしやすさ)を高める最高の第一歩です!現場目線でも非常にオススメです。
ただ、私は現在のアプリの「具体的なフィールド名(漢字)」を知らないため、勝手に英語に変換することができません。
そこで、2段階のステップで確実に移行するコードを用意しました。
- 【調査】: 現在のフィールド一覧を取得し、「変換用マップ」のひな形をコンソールに作成します。
- 【施工】: あなたが英単語を埋めたマップを使って、一気に更新・公開します。
Step 1: 現状のフィールドを取得して「変換マップ」を作る
まずは、このコードを kintone のコンソールで実行してください。
実行すると、ログに 「これをコピーして Step 2 に貼り付けて!」 という形式のデータが表示されます。
/**
* 🦊 kintone App Meister Ray's Work
* Project: 既存アプリのフィールドコード英語化(調査編)
* Target App: 3884
*/
(async () => {
const targetAppId = 3884;
try {
console.log(`🦊 レイ: アプリ(ID: ${targetAppId}) のフィールド情報を取得します...`);
// 1. フィールド情報の取得
const resp = await kintone.api(kintone.api.url('/k/v1/preview/app/form/fields', true), 'GET', { app: targetAppId });
const properties = resp.properties;
// 変更対象外のフィールドタイプ(システム系など)
const ignoreTypes = ['RECORD_NUMBER', 'CREATOR', 'CREATED_TIME', 'MODIFIER', 'UPDATED_TIME', 'STATUS', 'STATUS_ASSIGNEE', 'CATEGORY'];
// 2. 変換用マップのひな形作成
const mappingTemplate = {};
Object.keys(properties).forEach(key => {
const field = properties[key];
// システムフィールド以外、かつ既に英小文字だけで構成されているもの以外を対象とする(念のため全件出します)
if (!ignoreTypes.includes(field.type)) {
// key: 現在のフィールドコード, value: 新しいフィールドコード(仮で現在のコードのままにするか、空にしておく)
mappingTemplate[key] = "";
}
});
console.log('-------------------------------------------------------');
console.log('🎉 レイ: 取得完了!以下のオブジェクトをコピーして、英単語に書き換えてください。');
console.log('-------------------------------------------------------');
// ユーザーがコピペしやすい形で出力
console.log(JSON.stringify(mappingTemplate, null, 2));
console.log('-------------------------------------------------------');
console.log('👆 上記の JSON の "" の部分に、変更したい英単語(例: "customer_name")を入力してください。');
console.log(' 変更しないフィールドは行ごと削除するか、そのままのコードを入れてください。');
} catch (error) {
console.error('🦊 レイ: 取得に失敗しました...', error);
}
})();
Step 2: フィールドコードの更新とアプリ公開
Step 1 で出力された JSON を、以下のコードの fieldMapping 変数に貼り付けて、書き換えてから実行してください。
注意: フィールドコードを変更すると、そのフィールドを参照している既存の計算式や、他のJavaScriptカスタマイズが動かなくなる可能性があります。確認の上、実行してくださいね!
/**
* 🦊 kintone App Meister Ray's Work
* Project: 既存アプリのフィールドコード英語化(実行編)
* Target App: 3884
*/
(async () => {
const targetAppId = 3884;
// ▼▼▼ Step 1 で作成したマップをここに貼り付け&編集してください ▼▼▼
// 例: "顧客名": "customer_name",
const fieldMapping = {
"現在のフィールドコードA": "new_code_a",
"現在のフィールドコードB": "new_code_b"
};
// ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
try {
console.log(`🦊 レイ: アプリ(ID: ${targetAppId}) のフィールドコード更新を開始します!`);
const updateProperties = {};
// 更新用オブジェクトの作成
Object.keys(fieldMapping).forEach(currentCode => {
const newCode = fieldMapping[currentCode];
// 新しいコードが入力されていて、かつ変更がある場合のみ対象にする
if (newCode && currentCode !== newCode) {
updateProperties[currentCode] = {
code: newCode
};
}
});
// 更新対象がなければ終了
if (Object.keys(updateProperties).length === 0) {
console.log('🦊 レイ: 変更対象のフィールドコードが見当たりませんでした。');
return;
}
// 1. フィールドコードの更新 (PUT)
const updateBody = {
app: targetAppId,
properties: updateProperties
};
console.log('Step 1: 設定変更を送信中...', updateProperties);
await kintone.api(kintone.api.url('/k/v1/preview/app/form/fields', true), 'PUT', updateBody);
console.log('Step 1: 完了!');
// 2. アプリの公開 (Deploy)
console.log('Step 2: アプリの公開処理を実行中...');
await kintone.api(kintone.api.url('/k/v1/preview/app/deploy', true), 'POST', { apps: [{ app: targetAppId }] });
console.log('-------------------------------------------------------');
console.log('🎉 レイ: 全ての作業が完了しました!');
console.log(`アプリ(ID: ${targetAppId}) のフィールドコードが綺麗な英単語になりましたよ。`);
console.log('画面をリロードして確認してみてください!');
console.log('-------------------------------------------------------');
} catch (error) {
console.error('🦊 レイ: エラーが発生しました。フィールドコードが重複していないか確認してください。', error);
if (error.error) console.error(JSON.stringify(error.error, null, 2));
}
})();
アドバイス 🦊
-
命名規則: すべて小文字にするなら、単語の区切りは
_(アンダースコア) を使う「スネークケース」が kintone 界隈では一般的で読みやすいですよ。(例:customer_name,order_date) - バックアップ: 念のため、作業前にアプリのテンプレートをZipファイルでダウンロードしておくことをおすすめします。安全第一です!
顧客リストの項目情報を取得
顧客リストの項目情報からフィールドコード変更のコード作成依頼
下記を英単語に変換して、フィールドコードの更新とアプリ公開のコードを完成させて
{
"備考": "",
"郵便番号": "",
"会社ロゴ": "",
"部署名": "",
"担当者名": "",
"メールアドレス": "",
"顧客ランク": "",
"住所": "",
"TEL": "",
"FAX": "",
"会社名": ""
}
回答
承知しました!お任せください!🦊
いただいたフィールド一覧を、kintone の開発現場でよく使われる**スネークケース(小文字英語 + アンダースコア区切り)**に変換して、更新用のコードを完成させました。
これをコンソールで実行すれば、フィールドコードの英語化とアプリの公開が一気に行われます!
実行用コード
/**
* 🦊 kintone App Meister Ray's Work
* Project: 既存アプリのフィールドコード英語化(実行編・完結)
* Target App: 3884
*/
(async () => {
const targetAppId = 3884;
// ▼▼▼ 英語変換マップ(作成済み) ▼▼▼
const fieldMapping = {
"備考": "remarks",
"郵便番号": "postal_code",
"会社ロゴ": "company_logo",
"部署名": "department_name",
"担当者名": "contact_name",
"メールアドレス": "email",
"顧客ランク": "customer_rank",
"住所": "address",
"TEL": "phone_number",
"FAX": "fax",
"会社名": "company_name"
};
// ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
try {
console.log(`🦊 レイ: アプリ(ID: ${targetAppId}) のフィールドコード更新を開始します!`);
const updateProperties = {};
// 更新用オブジェクトの作成
Object.keys(fieldMapping).forEach(currentCode => {
const newCode = fieldMapping[currentCode];
// 新しいコードが入力されていて、かつ変更がある場合のみ対象にする
if (newCode && currentCode !== newCode) {
updateProperties[currentCode] = {
code: newCode
};
}
});
// 更新対象がなければ終了
if (Object.keys(updateProperties).length === 0) {
console.log('🦊 レイ: 変更対象のフィールドコードが見当たりませんでした。');
return;
}
// 1. フィールドコードの更新 (PUT)
const updateBody = {
app: targetAppId,
properties: updateProperties
};
console.log('Step 1: 設定変更を送信中...', updateProperties);
await kintone.api(kintone.api.url('/k/v1/preview/app/form/fields', true), 'PUT', updateBody);
console.log('Step 1: 完了!フィールドコードが更新されました。');
// 2. アプリの公開 (Deploy)
console.log('Step 2: アプリの公開処理を実行中...');
await kintone.api(kintone.api.url('/k/v1/preview/app/deploy', true), 'POST', { apps: [{ app: targetAppId }] });
console.log('-------------------------------------------------------');
console.log('🎉 レイ: 全ての作業が完了しました!');
console.log(`アプリ(ID: ${targetAppId}) のフィールドコードが綺麗な英単語になりましたよ。`);
console.log('画面をリロードして、変更が反映されているか確認してみてください!');
console.log('-------------------------------------------------------');
} catch (error) {
console.error('🦊 レイ: エラーが発生しました。フィールドコードが重複していないか確認してください。', error);
if (error.error) console.error(JSON.stringify(error.error, null, 2));
}
})();
🦊 レイのワンポイント解説
-
TEL →
phone_number: 単にtelでも良いですが、プログラム内で使うときはphone_numberの方が「電話番号」だと一目で分かって親切です。 -
担当者名 →
contact_name:pic(Person In Charge) と書くこともありますが、contact_nameの方が一般的で分かりやすいのでこちらを採用しました。
これでメンテナンス性がぐっと上がりますね!実行してみてください!
# フィールドコード変更エラー
コード修正依頼
{
"code": "CB_VA01",
"id": "C56gaT026kHfkXIEBBK1",
"message": "入力内容が正しくありません。",
"errors": {
"properties[会社ロゴ].type": {
"messages": [
"必須です。"
]
},
"properties[郵便番号].type": {
"messages": [
"必須です。"
]
},
"properties[TEL].type": {
"messages": [
"必須です。"
]
},
"properties[顧客ランク].type": {
"messages": [
"必須です。"
]
},
"properties[FAX].type": {
"messages": [
"必須です。"
]
},
"properties[備考].type": {
"messages": [
"必須です。"
]
},
"properties[メールアドレス].type": {
"messages": [
"必須です。"
]
},
"properties[部署名].type": {
"messages": [
"必須です。"
]
},
"properties[担当者名].type": {
"messages": [
"必須です。"
]
},
"properties[会社名].type": {
"messages": [
"必須です。"
]
},
"properties[住所].type": {
"messages": [
"必須です。"
]
}
}
}
コード修正依頼の回答
ごめんなさい!そのエラーは**「フィールドの設定を変更する時も、そのフィールドの『種類(type)』を指定しなければならない」**というkintone APIのルールによるものです。私のコードで type の指定が漏れていました…!🦊💦
ご提示いただいたエラーログ(CB_VA01, properties[...].type: 必須です。)のおかげで、原因が完全に特定できました。ありがとうございます。
修正版のコードを作成しました。
このコードは、「一度アプリからフィールド情報を取得して、自動的に正しい type を補完してから更新する」 というロジックになっているので、そのまま実行するだけで大丈夫です!
修正版:実行用コード(自動修復機能付き)
これをコピーして、kintoneのコンソールで実行してください。
/**
* 🦊 kintone App Meister Ray's Work
* Project: 既存アプリのフィールドコード英語化(自動Type補完・修正版)
* Target App: 3884
*/
(async () => {
const targetAppId = 3884;
// ▼▼▼ 英語変換マップ(前のままです) ▼▼▼
const fieldMapping = {
"備考": "remarks",
"郵便番号": "postal_code",
"会社ロゴ": "company_logo",
"部署名": "department_name",
"担当者名": "contact_name",
"メールアドレス": "email",
"顧客ランク": "customer_rank",
"住所": "address",
"TEL": "phone_number",
"FAX": "fax",
"会社名": "company_name"
};
// ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
try {
console.log(`🦊 レイ: アプリ(ID: ${targetAppId}) のフィールド情報を取得して、更新データを作成します...`);
// 1. 現在のフィールド情報を取得(Typeを特定するため)
const getResp = await kintone.api(kintone.api.url('/k/v1/preview/app/form/fields', true), 'GET', { app: targetAppId });
const currentProperties = getResp.properties;
const updateProperties = {};
let hasError = false;
// 2. 更新用オブジェクトの作成
Object.keys(fieldMapping).forEach(currentCode => {
const newCode = fieldMapping[currentCode];
// マップにあり、かつ現在のアプリに存在するフィールドのみ処理
if (newCode && currentCode !== newCode) {
if (currentProperties[currentCode]) {
updateProperties[currentCode] = {
type: currentProperties[currentCode].type, // 👈 【重要】取得したTypeをセット!
code: newCode
};
} else {
console.warn(`⚠️ 注意: フィールド「${currentCode}」がアプリ内に見つかりませんでした。スキップします。`);
}
}
});
// 更新対象がなければ終了
if (Object.keys(updateProperties).length === 0) {
console.log('🦊 レイ: 更新対象のフィールドが見当たりませんでした。既に変更済みか、フィールドコードが異なる可能性があります。');
return;
}
// 3. フィールドコードの更新 (PUT)
const updateBody = {
app: targetAppId,
properties: updateProperties
};
console.log('Step 1: 設定変更を送信中...', updateProperties);
await kintone.api(kintone.api.url('/k/v1/preview/app/form/fields', true), 'PUT', updateBody);
console.log('Step 1: 完了!フィールドコードが更新されました。');
// 4. アプリの公開 (Deploy)
console.log('Step 2: アプリの公開処理を実行中...');
await kintone.api(kintone.api.url('/k/v1/preview/app/deploy', true), 'POST', { apps: [{ app: targetAppId }] });
console.log('-------------------------------------------------------');
console.log('🎉 レイ: 今度こそ作業完了です!');
console.log('エラーが解消され、フィールドコードが英単語に変更されました。');
console.log('画面をリロードして確認してみてください!');
console.log('-------------------------------------------------------');
} catch (error) {
console.error('🦊 レイ: エラーが発生しました。', error);
// エラーの詳細を表示
if (error.error && error.error.errors) {
console.error(JSON.stringify(error.error.errors, null, 2));
} else if (error.error) {
console.error(JSON.stringify(error.error, null, 2));
}
}
})();
🦊 レイの技術メモ
- [cite_start]原因: kintoneの「フィールド設定変更API」[cite: 95] は、フィールドコードだけを変えたい場合でも、そのフィールドの
type(文字列一行、数値、など) を一緒に送ってあげる必要があります。 -
対策: 今回のコードでは、まず
GETでアプリの全フィールド情報を取得し、そこからtypeを抜き出してPUTのパラメータに含めるようにしました。これで「必須です」というエラーは出なくなります!
お手数をおかけしました。今度こそバッチリ動くはずです!
# フィールドコード変更成功
フィールドコード変更結果確認
項目名、フィールドコード、タイプをまとめて確認するコードを作成して
フィールドコード変更結果確認の回答
承知しました!rex0220 アプリマイスター・レイです!🦊
アプリの「項目名(ラベル)」「フィールドコード」「タイプ」を一覧でパッと確認したいのですね。
メンテナンスや設計書の作成、あるいは今回のような一括変換作業の前に、現状を把握するのにとても便利です。
コンソールで見やすく表形式(テーブル)で出力するコードを作成しました。
アプリ構造確認用コード
これを kintone アプリの画面でコンソールに貼り付けて実行してください。
/**
* 🦊 kintone App Meister Ray's Work
* Project: アプリ構造解析(フィールド一覧出力)
* Description: 現在のアプリの項目名・フィールドコード・タイプを表形式で出力します
*/
(async () => {
const appId = kintone.app.getId();
if (!appId) {
console.error('🦊 レイ: アプリの画面で実行してください!');
return;
}
try {
console.log(`🦊 レイ: アプリ(ID: ${appId}) のフィールド情報を解析します...`);
// 1. フィールド情報の取得 (GET)
const resp = await kintone.api(kintone.api.url('/k/v1/preview/app/form/fields', true), 'GET', { app: appId });
const properties = resp.properties;
// 2. 出力用にデータを整形
// 見やすいように配列に変換します
const fieldSummary = Object.keys(properties).map(key => {
const field = properties[key];
return {
"項目名 (label)": field.label,
"フィールドコード (code)": field.code,
"タイプ (type)": field.type
};
});
// 3. コンソールに表形式で出力
console.log('-------------------------------------------------------');
console.log(`🎉 レイ: 取得完了!全 ${fieldSummary.length} 項目が見つかりました。`);
console.table(fieldSummary);
console.log('-------------------------------------------------------');
// コピー用としてJSON形式でも出しておきます
console.log('👇 コピー用JSONデータはこちら');
console.log(JSON.stringify(fieldSummary, null, 2));
} catch (error) {
console.error('🦊 レイ: 情報の取得に失敗しました。', error);
}
})();
🦊 レイの使いこなしメモ
-
console.table: 実行結果に表示される表のことです。ブラウザのコンソール上で、列をクリックするとソート(並び替え)ができるので、「タイプごとにどんな項目があるか」などを探すのに便利ですよ。 - サブテーブル内のフィールド: 上記のコードでは、サブテーブル自体は1つの行として表示されます。もし「テーブルの中身」まで展開して見たい場合は、少しコードを調整する必要がありますので、その時はおっしゃってくださいね!
フィールドコード変更結果
なぜかレコード番号等は変更なしでした。
フィールドコード変更の一覧に上がっていないからか。





