デザイン・操作性、そしてセキュリティ・・・と、昨今のWebシステムに求められるものは多く、自前で開発するのはますます大変、なにより高くつくようになってきています。
それらを「作らない」で、あるもの=クラウド上のサービスを利用して開発してしまおう、というのが今回のお話です。システム構成としては、フロントとしてクラウドサービスを使用しデータはAPIで連携するイメージです。
こうした開発のスタイルは、下記のようなメリットがあります。
開発者にとってのメリット
- 各種ブラウザ対応やセキュリティ対策といった、面倒だが手を抜けない部分を自前で開発しなくて済む
- サービス側で提供される機能は作る必要がないので、コアな機能の開発集中できる
- 画面の操作性やデザインといったところでもめなくて済む
ユーザーにとってのメリット
- 実際動かせるものができるまでが、安い&速い
- 不要になったらすぐに辞められる(=必要な期間だけ使える)
- ちょっとした改修は自分でできる
とはいえ実際のところどうなの!?ということで、今のプロジェクトでクラウドにサイボウズのkintone、バックエンドをASP.NETで連携させているので、その所感についてまとめます。
kintoneについて
kintoneとはサイボウズ社が提供しているクラウドサービスです。
Web上にてドラッグ&ドロップでフォーム画面を作成することができ、簡単にデータの共有を行うことができます。フォーム+データベースだけでなく、ワークフローや権限管理、アラートといった業務での「あるある」機能が搭載されており、こうした機能を安価な値段で使用することができます。
普通に「インターネット経由でデータが共有できて、承認フローがあるシステムを作りたい」という場合、多分2人月は行くと思いますが、この場合おそらく200万円前後になると思います。
これはkintoneの月額料金880円(2013/12現在)の2272ヶ月分、実に189年分なのでどんだけ安いかがわかります。おまけにアプリはほぼ作り放題なので、実際の価値としてはこれ以上です。
こうした現象は、「Excelで簡単にできるのにシステム会社に見積りを頼んだらx百万円と言われた」というのと同じような現象です。実際Excelやこうしたクラウドサービスは広く浅く料金を取っているからこの値段なわけですが、それは正直ユーザーにとっては関係のないことです。
そうした意味でも、今後「一から開発する」というのは何よりユーザーにとって割に合わなくなってくると思います。Excelも含めてですが、あるものをいかに活用するか、という視点は今後かなり重要になってくるのではないかと思います。
より詳しい情報は公式サイトをご参照あれ!
kintone APIでの連携
kintoneはクラウド上単体で動くだけでなく、APIを利用することで他システムと連携させることができます。
APIは具体的にはREST形式のAPIで、HTTPリクエスト(やり取りは当然HTTPSですが)が飛ばせる言語であれば、kintone上で作成したアプリにデータを転送したり取り込んだりすることができます。
今回の開発では、kintone上で入力したデータをOracleに取り込んで他システム(ASP.NET)のデータと連携させています。そのため、画面は全く作ってなく、データ連携と業務用件のからむ複雑な帳票だけ開発してます。
データの連携については、Java/iOSはSDKが提供されていますし、.NETはkintoneDotNETがあり、特段困ることはありません(商用サービスをつかうなら、DataSpiderが連携機能を提供しています)。
RESTという形態からして実装はJavaScriptが一番楽なので、データ連携だけなら思い切ってNode.jsを使うのもアリだと思います。
所感
画面を作らなくていいというのはかなり楽です。
というのも、画面はバッチなどと違って実際画面を起動させないといけないので最もUnitTest化しにくい部分だからです。おまけにデザインでもめだしたらきりがないので、そういう意味でも良かったです。
今回は帳票が結構複雑でしたが、そこに集中できるという意味でも効果がありました。
・・・と、なんだか回し者のようなバラ色記事を書いていますが、当然実際は苦しむことも結構あります。
主に困ったのは以下の点です。
キー設定
kintone上のアプリケーションはデータベースのようなものなので、当然重複データを防ぐためキーを張りたくなります。また、このキー設定はルックアップという、ほかのアプリのデータを参照して設定する機能(例えば受注伝票登録時に品目を検索するみたいな)でも必要になってきます。
そんな重要なキー設定ですが、kintoneではかなり制約があります。例えば、複合キー設定ができない・キーにできないフォーム項目があるなどです。複合キーの場合は値を連結させて設定・・・と思うのですが、これまた連結に使えるフォーム項目にも制限があり、また条件式などは書けません。
今回は連結できるところは標準機能、無理なところはJavaScriptのAPIを使い設定している・・・のですが、JavaScriptAPIはログインユーザーの権限でしか動かないため、キーのようにユーザーに触られたら困るので入力不可にしておきたい、という場合ユーザーが入力不可ならJavaScriptAPIも入力不可です。一応保存時にセットしているのでいじられても大丈夫ではあるのですが、入力不可にすることも見えなくすることもできないのでちょっとムムムという感じです。
開発機/本番機の考え方
データ連携機能を開発する場合、特にkintone側を更新するようなケースは当然いきなり本番で試すわけにはいかないので開発環境が欲しくなります。
アプリのコピー機能があるのでそれで必要都度本番をコピーすれば良いのですが、他のアプリと連携するような項目(上述のルックアップなど)は参照先が元のままなのでこれを直していく必要があります(今はコピーするだけにして、細かいとこは直してないです)。
kintone側のバージョンアップなどが行われるときもこれは問題になるので、この点は今後も考えていかないといけない問題だと思います。
ユーザーの理解
「クラウド」+「API連携」=情報漏えい、という考えというかイメージのユーザーはまだたくさんいると思います。前述の開発機/本番機もそうですが、ある程度理解あるユーザーの方がいなければこうした開発は進めにくいのが現状だと思います。今回はユーザーの方から提案があったのでスムーズでしたが・・・
正直システム会社としては、普通に社内システムで作ってくれと言われても全然かまいませんし、リスクは許さんと言われたらこうした形態では開発しません。ただその分当然高くなります。
そうした意味では、ユーザー自身がリスクをとる、というのがこうした開発の第一歩になる思います。