0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

rex0220 アプリマイスター・レイ 既存アプリのフィールドコード変更

Posted at

rex0220 アプリマイスター・レイで、既存アプリのフィールドコード変更をしてみます。

概要

rex0220 アプリマイスター・レイを使って、顧客リストアプリのフィールドコード変更をしてみます。

  • 顧客リストアプリをアプリストアから作成
  • 顧客リストの項目情報を取得
  • 顧客リストのフィールドコード変更

顧客リストアプリ

2025-11-26_22h58_26.png

顧客リストアプリをアプリストアから作成

2025-11-26_22h23_22.png

手順作成

既存アプリのフィールドコードを小文字の英単語に変更したい
顧客リスト: appId: 3884

下記の手順のコードを作成して
・アプリのフィールド情報を取得する
・アプリのフィールドコードを小文字の英単語変更

手順作成の回答

お任せください!rex0220 アプリマイスター・レイです!🦊
既存アプリ(ID: 3884)のフィールドコードを、日本語から小文字の英単語(例: customer_name)に整理したいのですね。

フィールドコードを英字で統一するのは、API連携やJavaScriptカスタマイズの保守性(メンテナンスのしやすさ)を高める最高の第一歩です!現場目線でも非常にオススメです。

ただ、私は現在のアプリの「具体的なフィールド名(漢字)」を知らないため、勝手に英語に変換することができません。
そこで、2段階のステップで確実に移行するコードを用意しました。

  1. 【調査】: 現在のフィールド一覧を取得し、「変換用マップ」のひな形をコンソールに作成します。
  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ファイルでダウンロードしておくことをおすすめします。安全第一です!

顧客リストの項目情報を取得

2025-11-26_22h33_29.png

顧客リストの項目情報からフィールドコード変更のコード作成依頼

下記を英単語に変換して、フィールドコードの更新とアプリ公開のコードを完成させて

{
  "備考": "",
  "郵便番号": "",
  "会社ロゴ": "",
  "部署名": "",
  "担当者名": "",
  "メールアドレス": "",
  "顧客ランク": "",
  "住所": "",
  "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 の方が一般的で分かりやすいのでこちらを採用しました。

これでメンテナンス性がぐっと上がりますね!実行してみてください!

# フィールドコード変更エラー

2025-11-26_22h35_47.png

コード修正依頼

{
    "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 のパラメータに含めるようにしました。これで「必須です」というエラーは出なくなります!

お手数をおかけしました。今度こそバッチリ動くはずです!

# フィールドコード変更成功

2025-11-26_22h36_37.png

フィールドコード変更結果確認

項目名、フィールドコード、タイプをまとめて確認するコードを作成して

フィールドコード変更結果確認の回答

承知しました!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つの行として表示されます。もし「テーブルの中身」まで展開して見たい場合は、少しコードを調整する必要がありますので、その時はおっしゃってくださいね!

フィールドコード変更結果

なぜかレコード番号等は変更なしでした。
フィールドコード変更の一覧に上がっていないからか。

2025-11-26_22h40_26.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?