kintoneで匿名掲示板プラグイン作ってみた

いよいよ残りあと1週間となった[kintone Advent Calendar 2015](http://qiita.com/advent-calendar/2015/kintone)
こんなにkintoneネタが並ぶとワクワクしてきますねｗ

さて実は、日頃からkintoneを使っていて気になっていた部分があるんです。
何かというと

そう、**スペースのスレッド**


あまり不満を聞かないけど、実際利用してみるとこんな問題に当たった方もいるんじゃないでしょうか。

- 運用しているといつの間にか沢山のスレッドができる。結果スレッド一覧が縦にびょーんってなり対象のスレッドが探しづらい。
- スレッド数やばい → スレッド管理アプリをつくる → フリーダムな状態で管理アプリ作ってもアプリ更新されない → （・_________・）ｽﾞｰﾝ
- 各スレッド毎にアクセス権を設定することができない。
- スレッド上でのファイル添付はちゃんと考えないと「契約ユーザー数×4GB」の標準ディスク容量にひっかかってくる。  
結果、ディスク容量に引っかかってもファイルだけ削除できないのでコメントごと消す必要がある。
- コメントをバックアップしようとしてもAPIがないので取り出せない。

#解決方法
**＿人人人人人人人人人人人人人人人人＿**
**＞　とりあえずアプリでやってみる　＜**
**￣Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y￣**

#やってみた
今回は某掲示板のようなものをイメージしつつkintoneらしさを損なわないように

###レコード開くとこんな見た目で
![スクリーンショット 2015-12-14 14.32.04.png](https://qiita-image-store.s3.amazonaws.com/0/100438/d73c6a7f-b034-1cb3-7d4c-1270c1c57c29.png)

###こんなふうに書けて
![スクリーンショット 2015-12-14 14.11.40.png](https://qiita-image-store.s3.amazonaws.com/0/100438/8b25ef87-fb31-cdf5-7eca-19167726259c.png)

###こんなふうに添付ファイルが貼れる
![スクリーンショット 2015-12-16 0.15.33.png](https://qiita-image-store.s3.amazonaws.com/0/100438/38840a54-b9e6-e3f3-f7b4-c98817bae9c5.png)

###添付ファイル付きで投稿するとこんな感じ
![スクリーンショット 2015-12-14 14.20.14.png](https://qiita-image-store.s3.amazonaws.com/0/100438/f5424ff7-afb8-65e1-aa5d-4127edf98eba.png)



機能を簡単に説明すると、通常はkintoneユーザー名で投稿されるのですが、オプションとして匿名モードを用意しています。匿名モードをONにすると某掲示板っぽく匿名で投稿できたり投稿者にIDが付与されるようになっています。
あとはプレーンテキストでは味気ないからリッチテキストをいれてます。
色変えたり表形式で書き込めたりWEBページそのままコピペできたりと何かと便利です。
ここではgif動くのだろうか。。。

#アプリの設定
さてここからは実際の動かし方です。
以下の手順に沿ってフォームとプラグインの設定を行ってください。(ページのおわりにテンプレートもあるよ)
##フォーム設定
![スクリーンショット 2015-12-14 14.49.42.png](https://qiita-image-store.s3.amazonaws.com/0/100438/e8002a60-10bb-f54a-a04b-530e95bda619.png)


|項目名|フィールド型|説明|
|:--|:--|:--|
|タイトル|文字列（1行）|スレッドのタイトル|
|スレッド表示領域| スペース|スレッドを表示するスペース|
|投稿用テーブル|テーブル|投稿用のサブテーブル|
|投稿コメントID|文字列（1行）, 数値|コメントのID(index)保持用|
|投稿日時|日時|投稿日時<br>秒数は固定で0秒となる|
|投稿者名<br>(ハンドルネーム)|文字列（1行）|コメント投稿者の表示名<br>匿名の場合はハンドルネーム<br>匿名ではない場合はkintoneユーザー表示名|
|投稿ユーザー<br>(kintoneユーザー）|ユーザー選択|コメント投稿者のkintoneユーザー情報<br>匿名ではない場合のみ登録される|
|投稿者ID|文字列（1行）|投稿ユーザーID<br>匿名モードの切り替えではリセットされない<br>とあるタイミングでリセットされる|
|コメント本文|文字列（複数行）|コメント |
|コメントの添付ファイル|添付ファイル|添付ファイル|


##一覧の設定
更新日時とタイトルがあればOK

##プラグインの設定
1. [プラグインインストール方法](https://help.cybozu.com/ja/k/admin/plugin.html)
2. [アプリにプラグインを適用する方法](https://help.cybozu.com/ja/k/user/plugin.html)
3. プラグインの設定項目について

|項目                       | 設定するフィールド型         |
|:---------------------------|:---------------------------|
| API Token                   | [APIトークンの取得方法](https://cybozudev.zendesk.com/hc/ja/articles/202463840) <br>閲覧、編集にチェックを入れる                     |
| タイトル                    | 文字列（1行）               |
| スレッド表示領域             | スペース                    |
| 投稿用テーブル               | テーブル                    |
| 投稿コメントID               | 文字列（1行）, 数値          |
| 投稿日時                     | 日時                       |
| 投稿者名<br>(ハンドルネーム)    | 文字列（1行）             |
| 投稿ユーザー<br>(kintoneユーザー)| ユーザー選択             |
| 投稿者ID                     | 文字列（1行）               |
| コメント本文                  | 文字列（複数行）           |
| コメントの添付ファイル        | 添付ファイル               |
| 自動描画更新                 | 更新なし、15秒、30秒、60秒   |

#アプリにしてみた結果

意外と悪くない気がする！！
まだ100コメントくらいしか確認してないですが！
やろうと思ってたけど時間なくてできなかった「いいね！」はそのうち機能追加したいな。
ちなみに今回サブテーブルに結構無茶させてるので負荷かけたらどうなるかわかりません（笑）
ちらほら聞きますが、テーブル行数増やすとやばいようです。はい。分かってたけどやっちゃいました。仕方なかったんです。
なのでスレッド数はたくさんあるけど、1スレッド当たりのコメント数は多くないって場合に利用するのがいいかもしれません。

#仕様的なところ
- コメントの書き込み上限は1000件です。
- ファイルの添付数上限は6個です。
- 添付ファイルのサイズ上限は100MBです。  
（1GBまで緩和されるけどあえて100MBのまま）
- コメント書き込み時間に設定されている秒数は0秒固定です。
- 匿名モードで書き込んだコメントにはkintoneユーザー情報は登録されません！  
でも投稿者IDは名前変えても引き継ぐから気をつけてね！
- 一覧画面、詳細画面の編集ボタンとテーブルフィールドは私の事情により非表示にしています。
- コメントの削除はできません。  
プラグインを外すことで標準画面のサブテーブルから削除できます。
- アンカーはできません。  
作ってみたけどページ内リンク動かしてみたらkinotneの標準エラー「エラー：データの読み込みに失敗しました。」となる。  
→んん...？？ 原因わからず。

#今後のアプデでほしい機能
- kintoneに保存したファイルをURLで扱えるようにしてほしい。  
はい。一年以上前から欲しいと思っている機能です。心待ちにしてる人むっちゃいるはず。  
record情報の添付ファイルフィールドにurl項目が追加されているのが理想。  
現状だと毎回ファイルごとのダウンロードが必要でサムネ出すにも手間がかかる。  
1ファイルずつAPIをコールしないといけないので量が多いとAPIのコール数もネックになる。  
画像拡大表示のライブラリ(jquery colorboxなど)を使おうとしてもBlob、Base64ではできない。(悲しい)
- 日時フィールドで「秒」「ミリ秒」も持てるようにしてほしい。  
タイムスタンプ取るのとかにも使いたい。現状やるなら日時自体を一行文字列フィールドで持つか別途(秒)保持用の数値フィールドを用意するなどして対応する必要がある。
- スペース、スレッドまわりをもっとカスタマイズしたい！  
スペース上で安全にカスタマイズができると嬉しいです。  
今スペースをカスタムするにはkintone全体JSでやる必要がありますが、影響範囲が広いのでちょっと扱いづらい。アプリと同じようにスペース用のJSも用意されれば安心して扱うことができます。  
そしてスペース、スレッドAPIをぜひ！

今後のアプデに期待してます！

#最後に
今回のkintone掲示板ですが、結局スレッドの問題を解決できたかできてないかは置いておきましょう。
ただやりたかったんです。で、やっちゃったんです。どんまいです。
本来はもっとシンプルにするつもりで、リッチテキストもファイルも付ける予定は無かったんですが、結局欲しくなっちゃって追加することに。
JSは沢山ライブラリあってこういう部分もさくっと出来ていいですね。

最後に、最近kintone始めた方、そしてこれからkintoneやろうと思っている方へ、kintoneはやろうと思えば大抵の事はできちゃうお手軽なアプリプラットフォームです。気軽に楽みながら覚えてもらえたらなと思います。

#ダウンロード先
[アプリテンプレート](https://github.com/kiku38/kintoneThreadPlugin/raw/master/AppTemplate.zip)
[プラグインzip](https://github.com/kiku38/kintoneThreadPlugin/raw/master/kintoneThreadPlugin.zip)
[source]
(https://github.com/kiku38/kintoneThreadPlugin)

#注意点
- DOM操作している部分があります。今後のアプデで動作しなくなる可能性があります。
- 新デザインで動作を確認していますが、旧デザインでは動作未確認です。   
[新デザイン切替方法](https://help.cybozu.com/ja/k/admin/design.html)
- ゲストスペースは未対応です。

#免責
- 本ページで公開しているプラグインはフリーソフトです。個人／団体／社内利用を問わず、ご自由にお使い下さい。
- このソフトウェアを使用したことによって生じたすべての障害・損害・不具合等に関しては、私と私の関係者および私の所属するいかなる団体・組織とも、一切の責任を負いません。各自の責任においてご使用ください。
- 配布、転載、雑誌掲載など自由に行って下さい。