読者です 読者をやめる 読者になる 読者になる

clock-up-blog

go-mi-tech

DBコマンド横断比較リファレンスを作りました

Web PHP データベース Webサービス xref.jp

横断的にDB操作の類似コマンドを探すためのサイト

  • 例えば MySQL を知っている人が
  • 新しく他のデータベース、例えば Oracle を学習する際に
  • MySQL でいうところのアレは Oracle ではどういうコマンドなんだろう

という感じに情報を探す場面が多くあります。

そういう類の情報を探すときに役に立ちそうなリファレンスサイトを作りました。

f:id:kobake:20150101085319p:plain:w700

ソースコード

GitHub に上げてあるので興味ある人は見てみると良いです。
kobake/xref.jp · GitHub

PHP で書いてます。すんごい汚いです。謙遜じゃなくて本当に。

プルリク歓迎。

機能

マトリクス方向の切替

比較表の見出しの向きって、その組み合わせが多ければ多いほどどちらが見やすいか分からなくなることがあります。とりあえず両方切り替えられるようにしました。
f:id:kobake:20150101041551p:plain:w650
f:id:kobake:20150101041606p:plain:w650
「縦」「横」という表記が果たして分かりやすいかどうかは謎です。

エンジンの表示ON/OFF

今のところ MySQL, Oracle, PostgreSQL, SQLite の情報を載せていますが、余計な情報が多くて表が見にくい、という場面も多いと思います。そんなわけでエンジン毎に表示ON/OFFを切り替えられるようにしました。
f:id:kobake:20150101041613p:plain:w650
上は MySQL, Oracle だけの表示にした例です。

主目的:諸々の学習コスト・想起コストを減らしたい

例えばデータベースエンジンという物に初めて触る初学者の段階であれば、データベースの概念を理解する等のために、ある程度の学習時間を要するのは仕方ない事と思います。

ただ、ある程度何かのデータベースを触っていたエンジニアが、それ以外の別のデータベースを触るときに、たかだか「類似コマンドを探す」ために多くの時間を割くことはとても不毛です。ましてや「使ったことのある類似コマンドを思い出す・探し直す」ことにさえけっこう時間がかかることがあって、それらで失う時間の総和はとてもとても大きいものです。

この損失を抑えるための何かしらの仕組みが必要です。今回のシステムは個人的にずっと欲しいなーと思っていたもので、年末に時間ができたので作ってみました。

今後の拡張:データベース以外

上に挙げた学習コストの問題は当然ながらデータベースエンジンに限った話ではありません。

プログラミング言語であったりWebフレームワークであったりウィンドウシステムの開発フレームワークであったりスマートフォンアプリの開発フレームワークであったりパッケージ管理システムであったり、、、諸々似たような機構が多数存在しているにも関わらず、それらの間の「乗り換え」または「お試し」には不毛なコストがかかることが多いです。

できればデータベース以外にもコンテンツ増やしていきたいなーと思っています。次の具体的な予定としてはパッケージ管理システム (yum とか apt-get とか) のコンテンツを入れようと考えています。

仕組み

使われているミドルウェア

  • Apache … Webサーバ
  • PHP … コンテンツパース・HTML生成
  • Smarty … テンプレートエンジン
  • LESS … 動的CSS
  • Grunt … LESSの監視・CSS変換
  • jQuery … DOM操作等
  • Bootstrap … デザイン雛形
  • Font Awesome … アイコンフォント

そういや LESS の機能まったく使ってなかった。

コンテンツデータはネイティブファイル

コンテンツデータはテキストファイルとして保持しています。独自形式。

4タブ前提でタブ文字もりもり使ってるのでブラウザで見るとズレまくりですね。恥ずかちい。
ネイティブファイルなので編集ツール選び放題という利点があります。目的や気分によって、サクラエディタ使ったり Visual Studio 使ったり NetBeans 使ったり WinMerge 使ったりしてます。

作成したコンテンツをどう並べるか、というところは、このあたり↓で定義しています。

出力のキャッシュ

Web利用者から見たインターフェースは完全に静的なコンテンツなので、HTML出力結果を丸々キャッシュして運用できます。

実際にどういう仕組みを採っているかというと、開発サーバではリクエスト毎にコンテンツデータをパースしたものをレスポンスとして返すと同時に cache フォルダにも出力をキャッシングしています。生成されたキャッシュファイルは丸々 git にプッシュして管理しています。

開発サーバと本番サーバの区別

httpd.conf の SetEnv で環境変数を設定しています。

<VirtualHost *:80 *:443>
    ServerName xref.info.local
    DocumentRoot /home/sites/xref.info/public_html
    # dev環境。常にキャッシュを更新する。
    SetEnv apptype dev
</VirtualHost>

<VirtualHost *:80 *:443>
    ServerName xref.jp
    DocumentRoot /home/sites/xref/public_html
    # 本番環境。既存キャッシュをただ表示するだけ。
    SetEnv apptype product
</VirtualHost>


PHP 側では getenv('apptype') の文字列比較で環境を判定します。

<?php
define('APP_TYPE', getenv('apptype'));
…
if (APP_TYPE == 'product' || APP_TYPE === 'production') {
    …本番環境…
}
else{
    …開発環境…
}

本システムの開発において重要視した点:コンテンツ編集のしやすさ

今回僕が作ったシステムでは、編集のしやすさに主眼を置いて開発しました。テキストの形式はタブ区切りの独自形式ではありますが、ひたすらコンテンツ編集者(僕)が気持ちよくなれるようにシステム側が編集者側(僕)に都合を合わせる方針を採りました。

f:id:kobake:20150101083225p:plain

4タブ環境依存だし親切な説明も無いし、今のところ説明する気力も残っておらず、まだおよそ一般人向け汎用の編集機構ではありませんが、僕個人は快適に編集作業を行うことができました。

2015年になりました

作っては放置作っては放置なサイトが頭の中にいくつかあります。存在を忘れているわけではないし愛情を失ったわけでもありません。諸々の優先度の問題で手が付けられないものが多く出てしまいました。どこかで時間作ってメンテします。

2015年はもう少し時間に余裕を持てるオトナな年にしたいですね。

});