PHP+KO キーバリューで諸々管理

2013/10/10

諸々管理するツールが欲しいけど、手ごろなのが無いので自作する。

…自作するというより…自作したんだけど、自作するまでのメモ。

とりあえず…

・IPアドレス
・IPアドレスに紐づく諸々(概要・備考・実機なのか仮想なのか、他との連携とか)

この2点を良い感じにまとめたい。

Excelで管理

列を増やしていけば対応できるけど、全項目を対応させるには無理がある。

サーバによって乗ってるサービスが異なるし運用目的も違うので、一つのシートにまとめるっては無理がある。
だからといってファイルやシートを分けると今度は検索するのが面倒。

ツールを作成

…ということで使い勝手の良さげなツールを作成することにする。

データベース

半年ほど前に覚えたキー・バリューってヤツを使うことにする。

最低限として下記の2つ。

・キー:IPアドレスを保存
・バリュー:諸々をJSONにして保存

対象の環境は…MySQL。

キー・バリューをMySQLでやる場合、検索に難点あり。

対応策としては下記あたりか。

1.全文検索
2.別のデータベースを使う
3.別の検索方法を考える
4.検索しない

諸々考えると…「1.全文検索」と「3.別の検索方法を考える」のどちらかを選択する必要がある。

現状の私では「1.全文検索」は敷居が高い。
ということで「3.別の検索方法を考える」を選択。

別の検索方法

WordPressのタグクラウドを参考にする。

要は…検索対象としたい単語のみを別カラムに記載する。

ということでここまでのテーブルの状態をまとめる。

・キー:IPアドレスを保存
・バリュー:諸々をJSONにして保存
・タグ:検索対象としたい単語を羅列

これでひとまずOKだけど…せめてグループみたいな何かが欲しいので、新たにカラムを一つ用意。

・キー:IPアドレスを保存
・バリュー:諸々をJSONにして保存
・タグ:検索対象としたい単語を羅列
・グループ:親グループ名

さらに「登録した日」も欲しい。
あと、削除はしない方針で行くので「有効」のカラムも追加

・キー:IPアドレスを保存
・バリュー:諸々をJSONにして保存
・タグ:検索対象としたい単語を羅列
・グループ:親グループ名
・登録日:登録した日
・有効:有効、無効のフラグ用。

最後に、後々のことを考えてユニークIDをつけておきたいので

・キー:IPアドレスを保存
・バリュー:諸々をJSONにして保存
・タグ:検索対象としたい単語を羅列
・グループ:親グループ名
・登録日:登録した日
・有効:有効、無効のフラグ用。
・ID:ユニークID(基本、キーがユニーク値なので不要だと思うが日本語入力とか考えるとIDの方が使い勝手がラクそう)

フロント

実際に運用するときのフロントはHTML。

使い勝手をよくするためにJquery+PHPの組合せ。
Jqueryは、この1年以上お気に入りのknockout.jsを使うことにする。

要件

アレコレと要望はあるけど、盛り込みすぎると収拾がつかなくなる。
諸々、取捨選択した結果、ひとまず下記の内容にする

・「検索」がすべての始まりにする(「新規登録」したいとき、「検索」して結果が無ければ新規登録可能)
・「最新n件表示」というのはひとまず不要
・利用する人は何が登録されているか知ってる人のみ(何という単語で検索すれば良いかがわからないと利用できない感じ)
・社内向け(ログイン無しで使いたいので社外非公開のサーバで運用)

後々、「グループ名クリックで一覧表示」「最新n件表示」とか色々と妄想はある。必要に応じて機能を追加したりする予定。

その他

・フロントはHTMLをベースにknockut.jsを利用。
・データはAPIを用意して「$.ajax()」でやりとりする。
・DBへの接続とかは、PHPの「PDO()」を使う。
・あとは…ツール名…特定名称酒の「純米酒」にしよう。

サンプル

サンプルは…「純米酒」のサンプル

登録している内容は焼き鳥メニューの一部。ひとまず「フード」で検索すると全部表示されるようにしている。
細かい内容は別記事で書く予定。

▼wikiでまとめていこうと思う。
多様なデータを管理するツール「純米酒」

新着(ニュース関連以外)

2018-07-26
年賀状で「新春」とか書くけど・・・何故なんだろうと8月を目前にした今、疑問に思った。
2018-05-16
PHPで画像のヘッダ情報(?)の「Orientation」を元に画像回転させたい。
2018-03-05
Android Studioをインストール。エミュレータを軽くするトコまで終わらせたかったけど、挫折した。
2018-02-23
プッシュ通知について調べてた時にでてきたServiceWorker。そのServiceWorkerについてのメモ。
2017-12-13
jqueryで取得したDOM要素をオブジェクトじゃなくて、配列で受け取りたい