はじめに
「キントーンのgit管理について」という記事の続きとなります。
前回で、キントーンで利用している各種ファイルのgit管理方法をご説明しましたが、今回はそれを別環境(本番用の環境)に移送する手順を説明します。
手順概要
前回のgit管理で大きく以下のファイルを作成しました。
①:フォーム定義などのアプリの設計情報
→kintone REST APIを利用して取得。
②:アプリごとのJS/CSSファイル
→customize-uploaderを利用して取得。
③:アプリ全体のJS/CSSファイル
→手作業で画面からダウンロード
④:プラグイン(個別に作成したものに限る)
→plugin-packerを利用して、zipとソースファイルの両方を管理
①、②については、各RESTAPIやcustomize-uploaderの
オプションを変えることで、各アプリに反映が可能です。
③、④については、頻繁に変わることもないことから、手作業で画面から反映しています。
①:フォーム定義などのアプリの設計情報
「git管理時」に利用したRESTAPIのURL※1を利用します。
そこから以下を変更します。
・アクセス先のドメインを移送先環境に変更
・HTTPメソッドをGETから指定のメソッドに変更
・送信時のパラメータとして、git管理時に取得したjsonファイルを利用
・移送先のアプリIDを指定
※1:正確には「/preview」というアドレスがついた版です。
API | HTTP メソッド |
URI | |
---|---|---|---|
フィールドの一覧 | 追加 | POST | /k/v1/preview/app/form/fields.json |
フィールドの一覧 | 変更 | PUT | /k/v1/preview/app/form/fields.json |
フィールドの一覧 | 削除 | DELETE | /k/v1/preview/app/form/fields.json |
フォームのレイアウト | 変更 | PUT | /k/v1/preview/app/form/layout.json |
一覧の設定 | 変更 | PUT | /k/v1/preview/app/views.json |
アプリ情報 | 新規作成 | POST | /k/v1/preview/app.json |
一般設定 | 変更 | PUT | /k/v1/preview/app/settings.json |
プロセス管理の設定 | 変更 | PUT | /k/v1/preview/app/status.json |
アプリの条件通知 | 変更 | PUT | /k/v1/preview/app/notifications/general.json |
レコードの条件通知 | 変更 | PUT | /k/v1/preview/app/notifications/perRecord.json |
リマインダーの条件通知 | 変更 | PUT | /k/v1/preview/app/notifications/reminder.json |
アプリのアクセス権 | 変更 | PUT | /k/v1/preview/app/acl.json |
レコードのアクセス権 | 変更 | PUT | /k/v1/preview/record/acl.json |
フィールドのアクセス権 | 変更 | PUT | /k/v1/preview/field/acl.json |
アプリのグラフ設定 | 変更 | PUT | /k/v1/preview/app/reports.json |
アプリのアクション設定 | 変更 | PUT | /k/v1/preview/app/actions.json |
例として、「一般設定」を反映した結果を記載します。
(注):移送先の環境に対象のアプリが存在しない場合は、最初に
「アプリ情報(新規作成):/k/v1/preview/app.json」を
実行して、アプリIDを新規に採番した後利用ください。
▽一般設定.json
※「一般設定」反映時に利用するjsonファイルです。詳細は前回記事を参照ください。
{ "name": "サンプルアプリ", "description": "", "icon": { "type": "PRESET", "key": "APP84" }, "theme": "WHITE", "revision": "3888" }
▽実行例 ※node.jsで実行してください。
var fs = require("fs").promises; var fetch = require('node-fetch'); // ------------------- // 接続情報 // ------------------- // ドメイン、RESTAPIのURL、HTTPメソッド、移送先のアプリID、アプリ名の順 var ref_domainName = 'xxxxx.cybozu.com'; var url = `https://${ref_domainName}/k/v1/preview/app/settings.json`; var method = 'PUT'; var appId = 'XX'; var app_name = 'サンプルアプリ'; // リクエストヘッダ var param = { headers :{ 'X-Requested-With' : 'XMLHttpRequest' ,'Content-Type' : 'application/json' // アクセス時の認証情報を記載ください ,'X-Cybozu-Authorization' : 'XXXXXXXX' }}; // git管理の構成に合わせて jsonファイル読み込み return fs.readFile(`../${app_name}/form/一般設定.json`).then(function(response){ // BODY部に設定 result = JSON.parse(response); // アプリIDの指定 result['app'] = appId; // リビジョンは指定なし result['revision'] = -1; param['body'] = JSON.stringify(result); param['method'] = method; // キントーンRESTAPIの呼び出し return fetch(url , param); }).then(function(response){ if(response.status != 200){ throw new Error(response.text()); } console.log("RESTAPIの実行に成功しました") }).catch(function(err){ console.log(err); throw(err); });
「RESTAPIの実行に成功しました」とメッセージが出れば成功です。

注意点
1:「フィールドの一覧:/k/v1/preview/app/form/fields.json」を
利用する際には移送先アプリのフィールド有無に応じて
・追加:POST
・変更:PUT
・削除:DELETE
のようにHTTPメソッドを切り替えて利用する必要性があります。
例えば、移送元環境がA,B,Cの3フィールドあり、
移送先がA,B,Dの構成だった場合、
「追加:POST」にCのフィールド
「変更:PUT」にA,Bのフィールド
「削除:DELETE」にDのフィールド
の構成で送る必要性があります。
・型の変更(文字列から数値)は「変更:PUT」ではなく、
「削除:DELETE」→「追加:POST」です。
APIの送信順もこの通りである必要性があります。
また、既登録のデータも失われますので反映時はご注意ください。
2:APIでは変更不可なフィールドが存在します。
下表フィールド名はHTTPメソッド何れの反映時にもパラメータから除外してください。
また、当フィールドについて名前を変更した上で
アプリで利用している場合は、画面から手作業で名前を変更してください。
例)レコード番号をIDという名称に変えて利用。
MODIFIER | 更新者 |
CREATED_TIME | 作成日時 |
CREATOR | 作成者 |
UPDATED_TIME | 更新日時 |
RECORD_NUMBER | レコード番号 |
CATEGORY | カテゴリー |
STATUS | ステータス |
STATUS_ASSIGNEE | 作業者 |
3:「フィールドの一覧:/k/v1/preview/app/form/fields.json」での反映時
ルックアップ定義等をしている場合、jsonファイルにアプリIDが設定されます。反映時は移行先のアプリIDに変更する必要性があります。
「relatedApp」というキーワード配下に記載があります。
▽フィールドの一覧.json ※抜粋
"ルックアップID": { "type": "NUMBER", "code": "ルックアップID", "label": "ルックアップID", "noLabel": false, "required": true, "lookup": { "relatedApp": { #アプリIDを移行先の環境に変更 "app": "86", "code": "" }, "relatedKeyField": "ルックアップID", "fieldMappings": [ { "field": "ルックアップのコピー先フィールド", "relatedField": "ルックアップのコピー元フィールド" } ], "lookupPickerFields": [ "ルックアップ名", ], "filterCond": "", } }
4:アプリのアイコンにプリセット画像ではなく、個別に作成した画像を利用している場合は「一般設定.json」記載のfileKeyを利用します。
・事前に「ファイルダウンロード」APIを利用して、移送元環境からアイコンダウンロード
・「ファイルアップロード」APIを利用して、移送先環境にアップロード
・「一般設定.json」記載のfileKeyを移送先環境用に変更。
・最後に従来の手順で「一般設定の変更」APIを実施。
▽一般設定.json
{ "name": "AAAAAAAA", "description": "", "icon": { "type": "FILE", "file": { #このキーを利用して、ダウンロード。アップロード後は値を書き替える "fileKey": "2021081004290423186E317634466580E6D06EA0CC0463237", "name": "icon.png", "contentType": "image/png", "size": "1567" } }, "theme": "WHITE", "revision": "16323" }
②:アプリごとのJS/CSSファイル
前回と同じく、customize-uploaderを利用します。
インストール方法や基本的な使い方はこちらを参照ください。
また、マニュフェストファイルにアプリIDが設定されていますので、事前に移行先のアプリIDに変更してから実施ください。
▽マニュフェストファイル
{ #アプリIDを移行先のIDに変更 "app": "4", "scope": "ALL", "desktop": { "js": [ "../サンプル/src/desktop/js/サンプル.js" ], "css": [ "../サンプル/src/desktop/css/サンプル.css" ] }, "mobile": { "js": [], "css": [] } }
▽実行例 ※node.jsで実行してください。
const customizeUploader = require("@kintone/customize-uploader"); //------------ //接続情報 //------------ //キントーンのドメイン名、ログインするユーザ名とパスワード const ref_domainName = 'xxxxx.cybozu.com'; const username = 'xxxxxxxxxxxx'; const password = 'xxxxxxxxxxxx'; // アプリ名とアップロード対象のマニュフェストファイル const app_name_release = 'サンプルアプリ' const manifestFile = `../${app_name_release}/src/customize-manifest.json`; // オプション指定 const option = { watch : false, lang: 'ja' }; // 実行 customizeUploader.run(ref_domainName, username, password, '', '', manifestFile, option);
以下のようなメッセージが出れば成功です。

③:アプリ全体のJS/CSSファイル
kintoneシステム管理 -> JavaScript / CSSでカスタマイズ
で管理しているファイルになります。
こちらは頻繁に変更が発生しないため、手作業で反映しています。

④:プラグイン(個別に作成したものに限る)
作成したzipファイルを画面から手作業で反映しております。
※こちらのツールでCLIからでも反映可能です。

最後に
アプリの設定画面に移動し、「アプリを更新」を行うと、反映は完了です。
※③と④は即時反映されますのでご注意ください。

