Trello のクローンを PHP で作りました

## 機能は「カンバン」のみ

Trello は有名なトヨタの「カンバン」方式を利用できるウェブアプリです。
タスク管理として、有名な「JIRA」に似た機能を無償プランで使えるという面もあり、利用されている方も多いと思います。

「カンバン」の他に、Slackなどの他サービスと連携できたり、アドオンで機能強化したり、期限を決めたり、ボードを他ユーザと共有することができます。

自分的には「カンバン」さえ使えればよかったので、このアプリで利用できるのは「カンバン」だけです。

必要があれば、個々に好きなものを入れられるよう、基本となるものを作ったつもりです。
そのため、ライセンスは MIT にしてあります。ご自由にお使い下さい。

GitHub　https://github.com/mikiakira/php-simple-kanban

![alt](https://raw.githubusercontent.com/mikiakira/imageArchive/master/img/php-simple-kanban.png)

## 使っているもの

  * PHP 5.6+ (PDO is required)
  * Idirom ...PDOラッパーライブラリ
  * SQLite
  * Bootstrap 3.x
  * jQuery 2.x
  * jQuery UI 1.x
  * jQuery.spectrum ... 文中のURLをリンクにする
  * linkify-jquery ... カラーピッカー
  * Remodal.js ... モーダル

<A href="https://px.a8.net/svt/ejp?a8mat=1CAT7X+DJ0U3U+CO4+609HU" target="_blank">エックスサーバー</A><img border="0" width="1" height="1" src="https://www18.a8.net/0.gif?a8mat=1CAT7X+DJ0U3U+CO4+609HU" alt="">で、Apache2 + PHP5.6.22 と 7.0.7 で動作確認しています（PHP7今回初めて使いました。早くてびっくりです！）


## 使い方

  * app.template.db をコピーして、app.db にリネームします。
  * config/define.php を開いて、パスワード（デフォルト: admin）を変更します。
  * 英語/日本語を config/define.php で切り替えられます。

```php

const LANG = ‘en’; // ja or en
```

デフォルトを英語にしていますので、日本語で使いたい人は ja に変更して下さい。


以上です。


## 基本機能

  * ボード > パネル > カード の順番に属しています
  
  * ボード、パネルの作成は無制限
  * ~~パネルは7つまで。「1週間」が表現できれば充分かな、と。（JSで制限しているだけなので、簡単に無制限にもできます）~~
  
  * ボードは名前順にリストに出ます（Trelloと同じ）
  
  * パネルは並び替えができます

  * カードは、パネルの中で並び替えができます
    * パネル間で相互に行き来できます
    * コメントが書けます
    * カラーラベルがつけられます
    * カードを別のボードのパネルに移動・複製できます
  * カードを対象にキーワード検索ができます（結果は最大100件まで表示します）
  * バックアップ機能があります
  
  * 画面はSPAです（データのやりとりは jQuery の Ajax で行ってます）

  * おまけ…「簡易画像表示機能」カードの件名に、**画像の拡張子で終わる外部のURLパス**を保存すると、その画像をカードの中で表示することができます

## わざわざ作った動機

ウェブサービスは突然停止したり、買収されて改悪されたり、無償プランがなくなって有料になることがあります。
Trello が、JIRAや、Confluence で有名なアトラシアンに買収されたというニュースが入ってきたのが、自作にふみきった動機です。

[エンタープライズソフトのAtlassianがプロジェクト管理サービスのTrelloを4億2500万ドルで買収](http://jp.techcrunch.com/2017/01/10/20170109atlassian-acquires-trello)


改悪されるかも知れないし、有料になるかも知れない。
Trello の今の形を、本当に気に入って使い込んでいたので、今後改変にひやひやしながら開発するくらいなら、自サーバでしっかり管理できるものを作ろう、と考えた訳です。


## 作ってみた感想

実際、カードやパネルの入れ替えは、jQuery UI のおかげで 1、2時間くらいで出来ました。
データベースのロジックは Idirom を基本に、自己ライブラリで実装しており、仕事の合間を縫ってトータルで実質4～5日で完了。
結果的に（予想通りに）、とてもシンプルに作れて満足しています。


## 終わりに

「カンバン」の可能性はさまざまです。
タスクはもちろん、詳細なブックマークリストとしても使えます。私はレシピをまとめるのにも使っています。

基本機能ができたところなので、キャッシュや gzip など突き詰める余地があります。

また、個人的には、これをベースにして RSS リーダなども作れそうだと考えています。
ちなみに、GitHub にこうしたまとまったリポジトリをあげるのは初めてです。
厳しいご意見が飛んでくるかもしれないと、覚悟しております。。

ご指導ご鞭撻のほど、よろしくお願いいたします。

## 追記（2017/01/30）

現在、<A href="https://px.a8.net/svt/ejp?a8mat=1CAT7X+DJ0U3U+CO4+609HU" target="_blank">エックスサーバー</A><img border="0" width="1" height="1" src="https://www18.a8.net/0.gif?a8mat=1CAT7X+DJ0U3U+CO4+609HU" alt="">（X10プラン）で利用しています。
シングルページ・アプリケーションなので、最初のロードこそ 600～800ms ほどかかりますが、後はデータベースとのデータの送受信が主な処理なので、ライブアリの読み直しや遷移がない分、早いです。　

PHPは5.6以上を推奨します。
PHP7 に切り替えたところ、これが自分の作ったアプリかと、びっくりするくらい早くなりました！　バージョン5の2倍以上という噂は本当でした。

SQLite を使うので、PHPだけが動くような、安価なロリポップ！レンタルサーバの<A HREF="https://px.a8.net/svt/ejp?a8mat=16E42I+4RQ3U+348+6J4IA" target="_blank">ライトプラン</A><img border="0" width="1" height="1" src="https://www17.a8.net/0.gif?a8mat=16E42I+4RQ3U+348+6J4IA" alt="">（月額100円）でも使えるのが強みかと思います。

JS 面ではまだ改善したいところです。結合したり、レンダリングを Vue.js に乗せ変えたら、もっと早くなるのは確実です。
とりあえず、Trello のカードを手作業ではありますが、すべてこちらにのせかえました。

個人的には「カンバン」で充分なので、チームで使う必要が生じないかぎり、もう Trello を使うことはないと思います。
使いながら、今後も改善を続けていきます。

※ 1/30: ボード一覧のドロップダウンメニューやパネルリストの表示枠の動作を改善しました。