デプロイ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が少しでも快適になれば幸せです。