アップデートの影響を受けやすいコーディング例

フォローする

(著者:サイボウズ 北川 恭平

はじめに

kintoneフリークな皆様こんにちは。北川@サイボウズです。

JavaScriptプログラムを安全に作成いただくためのガイドラインとして、JavaScirptコーディングガイドラインがあるのをご存じでしょうか?
(この他にもAPI利用時のご確認事項があるので、知らなかった方はこちらで確認してください!)

その中で、こんな一文があります、

"kintoneがアップデートされると、作成したプログラムの実装によっては、アップロードしたJavaScript / CSSファイルが動作しなくなる場合があります。"

アップデートの度にメンテナンスが必要になる…なんて由々しき事態ですね…(やむ得ず実装する場合もあるかもしれませんが…)更に以下のような一文もあります。

"kintoneのアップデートによる影響をなくすため、デベロッパーサイトで公開されているJavaScript APIをご利用ください。"

とあります。…っえ?で結局なにが推奨されてて、どういうプログラムがアップデートの影響を受けるの?Σ(´Д`;)
と思ったそこのあなた、ご安心ください。
今回は、あまり推奨できない実装例を交えて紹介したいと思います。

ケーススタディ

kintone JavaScriptカスタマイズは、公式に公開されていないをクラスやidを取得して処理を記述すると裏ワザ的に大抵のことができてしまいます。

例えばコミュニティであった以下のような実装も…

本当にできるのか、コミュニティのコメント欄のソースを参考に以下のプログラムでやってみました。

このプログラムを、文字列(1行)だけのフィールドのアプリに適用してみます。
その後、レコードを登録しレコード詳細画面を開いてみると…

…たしかに、"コメント欄"が初期表示されません。

しかし、大事なことなので繰り返しになりますが、この実装方法ですと
kintoneがアップデートされると、作成したプログラムの実装によっては、アップロードしたJavaScript / CSSファイルが動作しなくなる場合があります。
では、具体的にソースコードのどこが問題なのかをみていきましょう。

上記ソース中の、以下2点がアップデートで影響を受けるかもしれない点です。

  • ID指定で"goog-spilitpane-handle-gaia"を指定している点
  • クラス指定で"contents-resizer-handle-close-gaia"を指定している点

なぜかというと、コーディングガイドラインに注意書きとして、”各要素に付与されているid/class属性の値は、予告なく変更されることがあります。"とある通り、アップデートでこのIDやクラス名が変更される可能性があり、変更された場合このプログラムは動かなくなる可能性があるからです。同様にDOM構造についても変更される可能性があります。

次に、もしアップデートの影響の可能性があるコーディングをしてしまった場合の対処法を考えていきましょう。

アップデートの影響を受けるかもしれないカスタマイズをしてしまった場合の対処法

もし、上記記載のように各要素に付与されているid/class属性の値をつかったカスタマイズを適用し、アプリを運用してしまっている方は、以下のような対処法が考えられます。

  1. 本サイトで公開されているJavaScript APIを利用し、実装し直せないかを検討する。
  2. 1でが不可能な場合、アプリの運用から見直して代替案を検討する。
  3. 1,2も不可能な場合、アップデート毎に影響をうけていないか検証&修正していく。

3になってしまうと、プログラムが作り込まれているほどメンテナンスコストが増加していくので、おすすめはできません。

これからカスタマイズを始める方は、この辺りを意識して業務に合わせたアプリケーションを作り込んでいただければと思います。

最後に

最後に、繰り返しにはなりますが。アップデートでに影響をうけない実装方法としては、本サイトで公開されているJavaScript APIを利用することに限ります。公開されているAPIに関しては、API の仕様公開と仕様変更の方針に沿って、APIを利用して開発されたアプリなどに影響を与えないようにアップデートされるためご安心いただければと思います。

※よって本Tipsに記載しているサンプルプログラムも、アップデートの影響で動かなくなる可能性があります。

記事に関するフィードバック

直接的に記事と関連がないご質問はcybozu developer コミュニティをご活用ください。

ログインしてコメントを残してください。
Powered by Zendesk