kintoneを早くて変化に強いシステムにするために

この記事は「**[kintone Advent Calendar 2019](https://qiita.com/advent-calendar/2019/kintone2)**」の21日目の記事です！

株式会社AISICの久米です。
福岡でkintoneエバンジェリストしています。
年一のQiita投稿で恐縮ですが、今年も書いてみます＾＾

テーマ的には、[昨年の記事](https://qiita.com/j-kume/items/4b67f361d54259a11a1c)と似ていますが、より整理を進めてみました！

弊社のkintone開発の定石を、テンプレート的にまとめてみましたので、皆さんと共有して、よりイケてるkintone生活を送っていただきたく思います！


# kintoneは上手に作らなければ『早い』だけで、変化に『弱い』システムになる
「kintoneは、早い！簡単！」って言いすぎですよね。
いや、確かに「早い・簡単」ではあるんですよ。
会社への導入にしても、アプリを作るにしても、それほどの知識が無くてもできちゃう辺りは、「早い・簡単」以外の何物でもないとは思うわけです。
そして、運用に合わせて、アプリを自分たちで簡単に変更できるのもスゴクいいところ。これも間違いない。
最初はアプリ単体での活用だったのが、数ヶ月経ってくると、複数アプリが連携する事の簡単さや強力さに感動しながら、バンバン盛り上がったりするわけです。

で、「そろそろ、バックアップとか考えないとねー」とか「特定の顧客ごとに年度毎に集計したいよねー」とか「開発環境って別にできた方がいいよね！」とかなってきたときに、**「あれ？？なんか無理ゲー」**みたいになるのです。


# 簡単に『変わる』ために『骨』を作るべし
単に「作る」だけであれば、色々と考えなくても作りたいように作ってしまえばいいのですが、「容易に変わる・変える・変え続ける」ためには、システムとしての**『骨』**をちゃんと使っておくことが肝要です。
あまり意識せずにkintoneでアプリを作ってしまうと、この**『骨』**が作れないので、結果的に**「変化に弱い」**アプリになってしまうのです。


# では、kintoneにおける変化に強いとは？？
* 拡張・連携したいと思った時に、容易に拡張・連携できるようにすること
* データのバックアップ(CSV・Excel)から一括更新(リストア)ができること
 
アプリを作る段階では1点目が重要ですが、運用しながら変更をしていくときには2点目が重要です。


# システムの『骨』をkintoneに通すという事
他アプリから利用される・連携されることを前提とした下記の様なフィールドを各アプリに設けておくとよいです。後からこれらのフィールドを追加しようとすると、当該フィールドへのデータの更新など必要以上に手間が掛かり、迅速なアプリの更新ができなくなります。

* **uid**
  * レコード番号ではなく、機械的に連番を採番された番号を格納する
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319512/db491110-3c2d-ba42-24dd-a2424d39f2da.png">


* **ルックアップキー**
  * 他アプリからルックアップする際に利用されるための検索キーを格納する
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319512/7d8d2b7b-b469-c75a-fd1d-a0842001fbcb.png">



* **レコードタイトル**
  * レコードタイトルを格納する  
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319512/3a8c4850-0fae-bba7-2078-4fd1c8fafe97.png">

* **No**
  * 業務運営上意味のある番号などを格納する(00001 など)  
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319512/5b2ca804-528d-b7b6-a192-f80b1dcc3232.png">






# カスタマイズテンプレートを使ってみるといいですよ！
上記の様な事を実現するには、ガッツリとjavascriptでのプログラミングが必要になります。ですが、プログラミングに不慣れな方が実現するのはかなり難しい。なので、上記の様なアプリをテンプレートとしてダウンロードいただけるようにしておりますので、そちらをお使いいただけるとよいかと思います。
このアプリをベースに、必要な項目を自分なりに追加していただければ、おのずと**『骨』**の通ったシステムになります。




1. こちらからダウンロード  
[カスタマイズアプリテンプレート](https://github.com/AISIC-DL/downloads/blob/master/template/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%82%A2%E3%83%97%E3%83%AA%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88.zip)
<img width="499" alt="2019-12-21_23h06_50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319512/731e0a76-95ab-4100-9fa1-248853faf8f7.png">

2. ダウンロードした**「カスタマイズアプリテンプレート.zip」**を使ってkintoneにアプリを追加する  
<img width="454" alt="2019-12-21_23h11_59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319512/1ad2dc8f-4221-41f6-f347-9b237bb65b46.png">
必要に応じてアプリテンプレートとして登録してもよいかもです。
<img width="213" alt="2019-12-21_23h18_17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319512/ac71eb96-086c-bfcc-4cb6-5006b66e0c10.png">

3. アプリテンプレートから作成したアプリにレコードを追加した内容
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319512/9d3da0a4-1bef-c7da-70a0-4a91465b9864.png">


# 注意事項
今回ご紹介した**カスタマイズアプリテンプレート**は、javascriptカスタマイズをしていますので、スタンダードプランでのみ利用できます。


# 最後に
こういうアプリをベースにユーザー側でアプリを作っていただければ、ハイレベルなカスタマイズをしたいと思った時にでも、弊社の様なkintoneカスタマイズを請け負っている企業にスムーズに依頼・実装出来ると思います！

このテンプレートを使ってアプリを作成し、変化に強い・変化し続けるkintoneアプリを使いながら、チームワークやビジネスを素早く確実に進めていただければと思います！


# 追記というかお知らせ
「カスタマイズアプリテンプレート」でも利用している**[kintone_tools](https://github.com/j-kume/kintone_tools)**も作っています。kintoneのjavascriptカスタマイズをしていくときに、あったらいいなぁとライブラリです。
皆さんからのアイデアも欲しいですし、一緒に開発を進めていただける方も絶賛募集中ですので、ぜひご協力いただけると嬉しいです！