kintoneをエンジニア目線で使ってみた

サイボウズ社がkintoneというプロダクトをリリースしているので、最近はそれを試用して簡単なシステムを作っていました。確かに簡単に画面等を作ることができる(イメージとしてはAccessでフォームを作ったり、Crystal Reports*1でレポートを作るのと同じ要領)のですが、暗にいくつかの前提があることにも気づきました。Webエンジニア職の経験がある*2方が使用する際には、次のことを念頭に置いておくと話が早いです。

kintoneでは「アプリ」という単位で機能を作っていきます。1つのアプリには、1つのデータセット(←一般的なRDBMSのテーブルにあたるもの。公式の呼び方ではないが、kintoneでは「テーブル」は別の意味で使われているので、本記事ではこう表現しておく)が関連付けられており、それのレコード一覧(list)・表示(show)・作成(create)・編集(edit)を行うための画面が1つずつ含まれています*3。基本的にはこれだけで、それ以上の画面追加や複数テーブルの同時更新はしない前提です。
業務アプリは、極論を言ってしまえばDB内のデータセットCRUDを様々な方法(単一または複数の画面、外部システム連携等)で行うだけのものなのですが、ある意味でこれの基本形(単一データセットCRUD*4)を強制するものとなっています。複数データセットの同時更新を行うシステムをkintone上に移植する場合は、データセットの再設計や画面の構成変更が必要です。なおそのアプリで扱うデータセットとリレーションがある他のデータセットCRUDは他のアプリで行う前提)を表示することは可能で、そのようなフォームパーツが存在します。さらに、1つのアプリ内の1レコードに対して複数の子データを格納したい場合は、子データセット(kintoneではこちらを表(テーブル)と呼ぶようです)を複数用意することも可能です。
扱うデータが、マスタデータであってもトランザクションデータであっても扱いは同じです。

  • JavaScriptによる柔軟なカスタマイズが可能

料金プランによりますが、自分で書いたJavaScriptCSSを読み込ませることができます。このJS用に、kintoneのデータ(当該アプリのデータだけではなく、他のアプリのものも!)のCRUDが可能なREST APIが提供されている他、アプリ内の画面のDOM操作も可能(kintoneのバージョンが変わると構造が変わる可能性があるが、バージョンに関係なく指定した要素を取得するAPIが用意されている)なので、前述の1アプリ1データセットという前提を破ることが実は可能です。読み込むJSファイルは複数指定することが可能なので、複数のアプリ間で共通のJSファイルと、当該アプリ用のJSファイルを分離する、ということもできます。
また、書いている通り使う言語はJSであり、(当然ながら)日々進化しているWebブラウザ上で動作するので、VBAなどと比べると柔軟な書き方が可能*5です。

  • 複合キーは設定不可

「必須項目にする」(= Not Null制約)や「重複登録できないようにする」(= Unique制約)を各フィールドに設定することが可能ですが、残念ながら複合キーを設定することはできないようです。複合キーを設定することを諦めるか、JSでレコード追加/更新時に無理矢理制約を付けるかする必要がありそうです。

  • kintoneのバージョンにより細部が変わる可能性がある

kintone自体は月1〜2回アップデートしている模様で、地味に機能改修・拡張が行われています。このアップデートは強制であり、日時はこちらからは制御不可です。機能改善自体は嬉しいのですが、JSやCSSで特定のDOM構造やURL形式などに依存したカスタマイズを行う場合は、アップデートにより影響を受ける可能性があります。可能な限り、提供されているAPIだけを使用するようにしましょう。まぁ本格的にカスタマイズしようとすると難しい場合もありますが…。

  • 非エンジニアが改修する可能性を考慮する必要がある

kintoneの画面上で、アプリのフォームやデータの変更が誰でも簡単に行うことができます。そのため、非エンジニアが変更を行うことも十分考えられます。強烈なカスタマイズを行っている場合は、それにより大幅な影響を受ける可能性があるため、特定のデータ等に依存するカスタマイズを行うのは避ける必要があります。通常のシステムであれば、開発者がそのシステムの担当から外れる場合は後任のエンジニア向けにドキュメントなりコード コメントなりを用意するものですが、それらを一切読むことができない非エンジニアに引き継ぐという事態も起こり得るので、注意が必要です。
(あれ?そこまで考えるとカスタマイズは実質的に不可能な気が…)



上記のような前提が暗黙的に存在しているので、既存システムの置き換えの場合は、それなりの知識及びセンスが必要です。しかしながら、基本的な画面群がコーディング無し&簡単操作で作成できて、さらに必要に応じてカスタマイズ可能なので、(ゼロから自分で実装したり、他の担当者or他社に外注するのに比べると)慣れるとかなり便利でしょう。
Windowsのアプリケーションとしては、画面を簡単に作ったり…というのは、前述のAccess等、昔からあったように思いますが、

  • PCにもスマフォにも対応したWebシステムであること(それにより、従来型システムでは地味に悩みの種であったデプロイやバージョン管理に苦労する必要がなくなる!)
  • 標準的なJSを使えること(kintone専用の言語を修得する必要がない)
  • ユーザ認証やユーザ間コミュニケーション等の機能は(kintoneの機能として)別途利用可能なこと
  • アプリ自体はサイボウズ社の管理下にあるサーバ上で動作するため、システム基盤の構築や運用が不要なこと(セキュリティ対応のことを考えると、アプリ自体の変更は無かったとしても基盤運用のリソースは少なからず必要で、しかも一定以上のスキルが必要。)

などがkintoneの利点だと思います。

*1:かつてはSeagate Software社のプロダクトだった記憶があるのだが、いつの間にかSAP社の製品になっていた…。

*2:以前の私はそうでしたが、今は財務経理担当者であり非エンジニアです。

*3:他にもインポート/エクスポート用画面があります

*4:この機能を作らせることで一通りの学習や実力の判断ができるので、新人エンジニアに与える仕事として適している。

*5:Webエンジニア職の経験がある人は今までの経験を活かせる