デプロイ API で kintone アプリの運用管理

著者名:竹内 能彦(サイボウズ)

目次

はじめに

kintone devCamp 2015 で好評だったデプロイ API 講座の Tips を大公開!

kintone devCamp 2015 の開催報告は以下のとおりです。

デプロイ API はアプリのデプロイだけでなくさまざまな使い方が可能です。
ここでは kintone アプリの運用に使える(かもしれない!?)サンプルを 2 つ紹介します。

動作環境

kintone でアプリを作成しだすと、どのアプリとどのアプリが連携(ルックアップ、関連レコード)しているのか分からなくなりますよね。
そんな時に 1 つずつアプリの設定画面を開いて確認…想像しただけで気が遠くなります。

そこでデプロイ API を使って連携アプリの一覧を出力するプログラムを書いてみました。

コード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/bin/sh

#
# Export relation apps using deploy API
# Copyright (c) 2016 Cybozu
#
# Licensed under the MIT License
# https://opensource.org/license/mit/
#

# ドメイン名
DOMAIN="{subdomain}.cybozu.com"

# 認証情報
# 「アカウント:パスワード」をbase64でエンコードした値
AUTH=""

# 調査を開始するアプリID
# (アプリIDの最小値)
APP=5

# 調査を終了するアプリID
# (アプリIDの最大値)
APP_LIMIT=10

# 存在しないアプリIDの保存先
DELETED_INFO_FILE=./deleted.txt



# アプリIDとアプリ名を出力
GET_APP_NAME() {
  NAME=`curl -s \
    -X GET \
    -H "X-Cybozu-Authorization: $AUTH" \
    "https://${DOMAIN}/k/v1/app/settings.json?app=${1}" |
    jq .name |
    sed 's/"//g'`

  echo -n "${1}(${NAME})"
}



while [ $APP -le $APP_LIMIT ]
do
  # 以前の実行で存在しなかったアプリは対象外
  EXISTS=`grep "^${APP}$" $DELETED_INFO_FILE 2>/dev/null`
  if [ "x$EXISTS" != "x" ]
  then
    APP=$(($APP+1))
    continue
  fi

  RES=`curl -s \
    -X GET \
    -H "X-Cybozu-Authorization: $AUTH" \
    "https://${DOMAIN}/k/v1/app/form/fields.json?app=${APP}"`

  # 存在するアプリを対象に
  if [ `echo $RES | jq .revision` != "null" ]
  then
    REL_APPS=`echo $RES | jq '.properties[] | .lookup.relatedApp.app, .referenceTable.relatedApp.app | select(type != "null")' |
      sort | uniq | sed 's/"//g'`

    if [ "x$REL_APPS" == "x" ]
    then
      echo "${APP}: 関連アプリはありません。"
    else
      for REL_APP in `echo $REL_APPS`
      do
        GET_APP_NAME $APP
        echo -n ": "
        GET_APP_NAME $REL_APP
        echo "を参照しています。"
      done
    fi
  else
    echo "${APP}: アプリが存在しません。"
    echo $APP >> $DELETED_INFO_FILE
  fi

  APP=$(($APP+1))
done

exit 0

実行

上記のコードを適当なファイル名で保存します。(例:relation.sh)

コメントに従い以下の値を修正します。

  • ドメイン名
  • 認証情報
  • 調査を開始するアプリ ID
  • 調査を終了するアプリ ID
  • 存在しないアプリ ID の保存先

以下のコマンドでシェルスクリプトを実行します。

1
sh ./relation.sh

実行結果

下記が実行結果の例になります。

下記が 2 回目の実行結果の例になります。
以前の実行で存在しなかったアプリは対象外になります。

サンプル 2:JavaScript/CSS ファイル適用アプリの一覧出力

2 つ目は JavaScript / CSS カスタマイズを適用しているアプリの一覧を出力します。

コード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/sh

#
# Export customize apps using deploy API
# Copyright (c) 2016 Cybozu
#
# Licensed under the MIT License
# https://opensource.org/license/mit/
#

# ドメイン名
DOMAIN="{subdomain}.cybozu.com"

# 認証情報
# 「アカウント:パスワード」をbase64でエンコードした値
AUTH=""

# 調査を開始するアプリID
# (アプリIDの最小値)
APP=5

# 調査を終了するアプリID
# (アプリIDの最大値)
APP_LIMIT=10

# 存在しないアプリIDの保存先
DELETED_INFO_FILE=./deleted.txt



# アプリIDとアプリ名を出力
GET_APP_NAME() {
  NAME=`curl -s \
    -X GET \
    -H "X-Cybozu-Authorization: $AUTH" \
    "https://${DOMAIN}/k/v1/app/settings.json?app=${1}" |
    jq .name |
    sed 's/"//g'`

  echo -n "${1}(${NAME})"
}



while [ $APP -le $APP_LIMIT ]
do
  # 以前の実行で存在しなかったアプリは対象外
  EXISTS=`grep "^${APP}$" $DELETED_INFO_FILE 2>/dev/null`
  if [ "x$EXISTS" != "x" ]
  then
    APP=$(($APP+1))
    continue
  fi

  RES=`curl -s \
    -X GET \
    -H "X-Cybozu-Authorization: $AUTH" \
    "https://${DOMAIN}/k/v1/app/customize.json?app=${APP}"`

  # 存在するアプリを対象に
  if [ `echo $RES | jq .revision` != "null" ]
  then
    CUSTOM_FILES=`echo $RES | jq '.[][]?[] | .file.name, .url | select(type != "null")' |
      sort | uniq | sed 's/"//g'`

    if [ "x$CUSTOM_FILES" == "x" ]
    then
      echo "${APP}: JS/CSSカスタマイズは利用していません。"
    else
      for CUSTOM_FILE in `echo $CUSTOM_FILES`
      do
        GET_APP_NAME $APP
        echo ": ${CUSTOM_FILE} を利用しています。"
      done
    fi
  else
    echo "${APP}: アプリが存在しません。"
    echo $APP >> $DELETED_INFO_FILE
  fi

  APP=$(($APP+1))
done

exit 0

実行

上記のコードを適当なファイル名で保存します。(例:customize.sh)

コメントに従い以下の値を修正します。

  • ドメイン名
  • 認証情報
  • 調査を開始するアプリ ID
  • 調査を終了するアプリ ID
  • 存在しないアプリ ID の保存先

以下のコマンドでシェルスクリプトを実行します。

1
sh ./customize.sh

実行結果

下記が実行結果になります。

下記が 2 回目の実行結果の例になります。
以前の実行で存在しなかったアプリは対象外になります。

おわりに

今回はデプロイ API を使って、GUI でみるには一苦労な情報を収集してみました。
アプリの棚卸しなどに効果を発揮しますのでご活用ください。

皆さんの kintone 運用管理 LIFE が少しでも快適になれば幸せです。