2022年11月に正式版がリリースされた、サイボウズが開発するコマンドラインでkintoneのレコードデータを入出力できるツール「cli-kintone(クリキントーン)」をご紹介します。
添付ファイルの一括ダウンロード/アップロードやデータ移行など、一からプログラムを開発するとちょっと大変な処理が簡単に実現できるツールとなっています。
今回は、
「kintone環境①にあるアプリAのレコードデータを、kintone環境②(セキュアアクセス対応)にあるアプリBに移行する」
という内容をcli-kintoneを使って試してみたいと思います。
ツールのダウンロード
cli-kintoneは無償で提供されているツールで、GitHubからお使いのOSに合わせてダウンロードすることが可能です。
https://github.com/kintone/cli-kintone/releases
コマンドラインツールの起動
Macユーザーであればターミナル、WindowsユーザーであればコマンドプロンプトかPowershellがデフォルトであると思うのでそちらを利用してください。(もちろんすでにお使いのものがあればそちらでも問題ありません)
コマンドラインツールを起動し、ダウンロードしたcli-kintoneがあるフォルダに移動してください。
(先にcli-kintoneの実行ファイルをお好きなフォルダに移動させておくと楽です)
練習:特定アプリのレコードを取得
まずはシンプルに特定アプリのレコードを全件取得するコマンドを実行したいと思います。
cli-kintoneの使い方は cybozu developer networkの記事 に詳細が載っているので、細かい部分はそちらをご確認いただけると良いかと思います。
アプリはサンプルにある顧客リストを利用してみます。アプリIDとAPIトークン(閲覧にチェック)を確認・準備しておいてください。
# 実行コマンド ./cli-kintone record export --base-url https://{subdomain}.cybozu.com --app {appId} --api-token {apiToken}
オプション名 | 説明 |
–base-url | ドメイン情報 |
–app | アプリID |
–api-token | APIトークン |
上記のコマンドを実行することでレコードデータがコマンドライン上にずらっと表示されると思います。
(ドメインやアプリIDなどは環境に合わせて変更してください)
そしてコマンドの最後に「> list.csv」などと追記すれば、CSVファイルとして書き出すことも可能です。
kintone環境をまたいだデータ移行
cli-kintoneの使い方はなんとなくわかったでしょうか?
それでは今回のブログのメインであるデータ移行の処理を作っていきたいと思います。
「テーブル内に添付ファイルフィールドを含むアプリ」ということで、なかなか複雑なアプリを用意しました。
これを添付ファイルの画像ごとまるっと別環境のアプリに移行します。
環境XのアプリAからデータを取得
移行前提だと「レコード番号」「作成者」「更新者」などは不要なことが多いため、–fields で取得するフィールドを指定しています。
./cli-kintone record export --app {appId} \ --base-url https://XXXX.cybozu.com \ --api-token {apiToken} \ --fields "管理番号,数値,チェックボックス,テーブル" \ --attachments-dir ./attachments > records.csv
–attachments-dir を指定することで、添付ファイルをフォルダに一括ダウンロードして保存することができます。
そして、コマンドの文末に > records.csv と記載することで、records.csvにレコードの情報が保存されます。(CSVの添付ファイル部分にはattachments-dirと紐付いた情報が自動的に入ります)
環境YのアプリBへデータを登録
取得がうまく行けば、あとはそのデータを移行先アプリに登録するだけです。
が、今回のお題ではそこも一捻り加えており、環境Yは「セキュアアクセス」が設定されていて外部からAPIを実行する場合はクライアント証明書が必要になります。
自作のプログラムでクライアント証明書に対応させようとするとそこそこ技術力が必要になるのですが、cli-kintone v1はデフォルトでクライアント証明書にも対応しているため、pfxファイルとパスワードを指定すればセキュアアクセス環境下のアプリへもAPI実行が簡単にできます。
cli-kintoneを実行するローカルにpfxファイルを配置し、パスを指定することで読み込みが可能です。
./cli-kintone record import --app {appId} \ --base-url https://YYYY.s.cybozu.com \ --username {ログイン名} \ --password {パスワード} \ --pfx-file-path {pfxファイルのパス} \ --pfx-file-password {pfxファイルのパスワード} \ --attachments-dir ./attachments \ --file-path records.csv \ --update-key "管理番号"
これでセキュアアクセス環境下のアプリへデータ移行が完了です!
全体のシェルスクリプト
せっかくなので、上記の流れを1つのプログラムにまとめてみました。また、環境変数を用いることでドメイン情報や認証情報などを別ファイルにまとめることができ、よりプログラムの再利用がしやすくなります。
# 環境変数 BEFORE_KINTONE_BASE_URL=https://XXXX.cybozu.com BEFORE_KINTONE_APITOKEN={apiToken} AFTER_KINTONE_BASE_URL=https://YYYY.s.cybozu.com ##セキュアアクセス環境では.sを忘れずに! AFTER_KINTONE_USERANAME={username} AFTER_KINTONE_PASSWORD={password} AFTER_KINTONE_PFX_FILE_PATH=./xxxx.pfx AFTER_KINTONE_PFX_FILE_PASSWORD={pfx passowrd}
# シェルスクリプト #/bin/sh # 環境Xからレコードデータを取得 ./cli-kintone record export --app {appId} \ --base-url $BEFORE_KINTONE_BASE_URL \ --api-token $BEFORE_KINTONE_APITOKEN \ --fields "管理番号,数値,チェックボックス,テーブル" \ --attachments-dir ./attachments > records.csv # 環境Yにレコードデータを登録 ./cli-kintone record import --app {appId} \ --base-url $AFTER_KINTONE_BASE_URL \ --username $AFTER_KINTONE_USERANAME \ --password $AFTER_KINTONE_PASSWORD \ --pfx-file-path $AFTER_KINTONE_PFX_FILE_PATH \ --pfx-file-password $AFTER_KINTONE_PFX_FILE_PASSWORD \ --attachments-dir ./attachments \ --file-path records.csv \ --update-key "管理番号"
cli-kintoneを使えば、テーブル×添付ファイルという複雑な構造でも簡単にデータ移行が可能です。
まとめ
cli-kintone v1では新しい機能がたくさん搭載され、より使いやすくなっています。ぜひデータ移行やファイル一括ダウンロードをしたい場合は利用してみてください。
過去のcli-kintone(v0)との比較についてはこちらの記事にまとめています!