kintone Advent Calendar 2015の16日目です。
kintone初心者を公言しているのですが、勢いで Advent Calendarに参加してしまいました。
高度な事は書けませんが、初心者向けの内容になれば良いなと思っています。
ねらい
僕自身が、なかなか kintoneに馴染めなかった(kintone思考になれなかった)過程が
誰かの役に立てば嬉しいな と思って書いてみます。
kintoneに取り組み始めたキッカケ
kintoneに取り組み始めたキッカケは、こちらのスライドを見ていただけたらと思います。
↓
kintone Café 福岡 vol.6 / kintone.Promise を使ったREST API更新処理
kintoneで作りたかったもの
このスライドの中でも書いていますが
僕が作りたかったアプリは、簡単な在庫管理システムでした。
簡単に概要を説明すると
商品マスタに、在庫数の項目を持つ
出庫入力で出庫量が入力されたら、保存時にJavaScriptAPIを使って商品マスタの在庫数から差し引く
入庫も、同様。 という内容です。
各画面の項目は、下のようなイメージになります
商品マスタ | 出庫入力 | 入庫入力 | ||
---|---|---|---|---|
商品コード | 商品コード | 商品コード | ||
商品名 | 出庫数 | 入庫数 | ||
仕様 | ||||
在庫数 |
これで、最新の商品在庫が把握できる!
と、思っていました
ところが
実際に運用してみると
日々の入力が100件以上あり、当日に入力されないことも度々
時系列通りに、入力してもらわないと、現在在庫が把握できないのですよねぇ
ついでに
最新の在庫だけでなく、ある時点での在庫数も見たいとの要望が。。。
ログを取るように、入出庫の度に在庫データを毎回作っておこうとも思ったのですが
これも、時系列順に入力してもらわないと、破綻してしまうと気付きました。
要は、「在庫数」という項目が、状態依存してたんですね
もう、完全に 設計のミスです
2ヶ月位運用して、ようやく気付きました
なぜ、そうなったのか?
今までの開発経験で、Railsや CakePHPなどのフレームワークを使って
ORマッピングなどを使っていれば自然な考え方ができたのだろうけれど
普段は、SQL文をガリガリ書いて、「結合だ! 集計だ! サブクエリだ!」と
なんでも一発で持ってこようとする考え方でした。
だから、どうしても、商品マスタの画面を開いた時に
現在庫を算出して、その画面に表示しようとする考えから離れられませんでした
でも、そういった集計は、kintoneには向いていないのですよね
だから、「入出庫のたびに 在庫数を算出しなくては」と思って
思いっきり状態依存の「在庫数」という項目に固執してしまっていました
失敗を経ての気付き
けど、こういうのって kintone的な考え方じゃないんですよね きっと
あれこれ悩んだ末に気づいたのが
ステートレスなデータ構造にすることが大事なんだ! ということです。
とにかく kintoneには、素直なデータをためていく
そして、集計などは、REST APIでExcelに 持ってきて、Excel側で集計する
(お客さんが Excelの方が安心するので)
そういう風に考えることができはじめたら
急に、kintone が使いやすくなりました。
※ Excelとの連携は、今回の主題ではないので、下記のページを参照しください。
第1回 Excelとkintoneを連携させよう
第2回 Excelとkintoneを連携させよう
辿り着いた結論
そんな過程を経て、今の僕の中では、
「kintone は、多拠点でデータを入力して一元管理するための仕組み。
データの表示や解析は、Excelでデータを取ってきて加工する」
という、使い分けが良いように感じています。
最後に
う〜ん、まだまだ kintone思考になるには経験が必要だな と思いつつも
この記事が、誰かにとって 何かの気付きになれば良いな と願っています。