MySQL PHP JavaScript Bootstrap

Web App

MySQL の仕事を増やす

当初、Excel ~ FileMaker と揺れていた開発環境が結局 MySQL PHP JavaScript Bootstrap となりました。

アプリに複数の社員が同時にアクセスし更新作業をすることがあると決まった時点で Excel はあり得ない(したくない)と思いました。

こんな根本仕様ですが、最終段階ギリギリまでクライアントさんは「必要ない」とおっしゃってました。実際、皆に個別にエクセルで入力してもらって集計したのでいいだろう、くらいの軽い感じだった。

が…話が進むうち、どう考えても同時アクセスが必要(管理者は社員の状況を常に把握したい)。それでも不要と…

最終仕様書を作成しスタンドアローンで動作するものとすると明記したとき、やっと

全社員が同時にアクセスすることがないとも言えない」と…「せめて4~5人は同時アクセスできないか」みたいな…

はい、一からやり直しです。

さて、社員さんを50人程度と考え(いやたとえ10だったとしても) FileMaker は避けたい。既に FileMaker 導入済みでどっぷり嵌まっているのでもなければ、あえてこれから採用するメリットはない。ライセンス料がどれだけかかることやら。

実はFileMaker、非公式にゴニョゴニョ(ODBC と SSHトンネル)してあげれば外部においた MySQL にも接続できる。けれどそういう危うい接続で仕事していただくわけにもいきません。

大前提として RDB SQL しか考えられません。

クライアントさんは既に WindowsServer を自社構築されていました。自前サーバーに Oracle も搭載済み。そこに構築する手もありましたが採用されませんでした。

MySQLは同時接続数の上限が151クライアント。十分です。

MySQLってOracle社が買ったんですってよ

PHP の仕事を減らす

他の言語を知らないだけですがなにか…

ところで今、書籍の世界ってずいぶん変わってますね。PHPの最新バージョン(7)を正しく知りたく関連本を探しましたがないんですよ。ない。全然ない。なぜ?

といっっても今回、PHPに依存する作業がとても減った(MySQL の仕事の範囲を広げたおかげ)ため、PHP のバージョンに依存するような深いことをすることもなかったですが。

前回の仕様と成果にも書いたけれど、SQL をきちんと書くことで PHP の仕事は激減します。

Webアプリの仕様と仕事の成果
今回この仕事をお請けして最もよかったと思えたことは MySQL について知識を増やすことができたこと。 これまで SQL 言語について「SELECT *」的な使い方しかしていませんでした(今思えば、SQL知らない人あるあるです。恥ずかしいです)。 SQLは入れ物という認識しかありませんから当然「SELECT *」しか使いません...

PHP の仕事が減るということは、開発の負担が減る メインテナンスが楽 開発期間が短くなる といいことずくめです。

もちろんその分、SQLの仕事が増えているワケですが(今回でいうと全3か月の作業時間のうち SQLの設計に1月ぐらいかかりました。)いったん走り出した SQL でもメインテナンスは案外楽(PHP書いてて上手く動かないものを修正するよりも断然楽)です。

ここでいうSQLの設計とは、単にテーブルの構築という意味でなく、viewを含めた 全SQL文 の設計という意味です

気をつけることといったら view を作成するときに使った SQL は必ず別途保存しておくことぐらいです。これをし忘れて何度か痛い目にあいました。

PHP を書く上で SQL を上手く書けないとなるとSQL発行ループに陥る可能性が非常に高まります。プログラム上はシンプルでも怒濤の多重ループによる遅延に繋がりかねません。

数百件のデータを扱うテスト段階ではそれなりに動くかもしれません。が、いざ本番環境となり数千件、数万件と扱う件数が増えるにつれ著しく遅延が生じ始めます。怖い怖い。

プログラムは間違っていない(正しく動いている)のにレスポンスが超遅い、なんで?な感じです。困ったことに開発者はサーバーがしょぼいなどと思ったりします。

正しく SQL を書けばレスポンスに数分かかっている処理が数秒で終わるのに…

SQL って大事なんだよっていう PHP の話しはこれで終わります。

JavaScriptと効果の高いAjax

PHPはサーバーサイド言語、対してJavaScriptをクライアントサイド言語といいます。こう聞くとなんとなくその役割が分かる気がします。

サーバーに保存されたデータを直接扱うことができるPHPプログラムをユーザーが見ることはありません。つまり何をどうしてるか分かりません。なんかしてます。

一方、JavaScriptはHTMLやCSSと同様ユーザー側にダウンロードされるのでそのプログラムを見ることができます。

あ、そういう話しじゃないですよね。

JavaScriptにはこんなことができます。

  1. 画面遷移(リロード)なしに MySQL を更新できる
  2. DOM操作によりHTMLの書き換え(内容や属性を変更したり、足したり、消したり)ができ動的に画面を書き換えることができる

まず大前提として、JavaScriptはサーバーに保存されたデータを直接扱うことはできません

つまり、MySQLを直接操作することができないということです。

しかし、

Ajaxを使うことでJavaScriptからMySQLを操作できる

と考えていいと思います。

実際はJavaScriptからPHPを操作してMySQLを操作している感じです。後で詳しく話します。

その他、JavaScriptの多くの仕事は、画面表示されたものを自由に(これを動的にといいます)書き換えることです。

つまり、HTMLを書き換えるということになります。

たとえば画面に表示されている黒い文字が赤い文字に変わるとか、Appleと表示されている文字がWindowsという文字に変わったり、Macintoshと表示されていた文字が消える、などです。

こんなふうに、JavaScriptも開発には必須です。JavaScriptにさせることはAjax関係が殆どだと思います。

静的更新をしないのであれば、つまりリロード(更新)すれば反映することではあるのですが、リロードしたくないけどデータベースを更新したり、画面を変化させたりしたいシチュエーションって結構あるものです。

Ajax も使わなきゃっていう話しです。

やっかいなことに JavaScript はブラウザによって仕様(ルール)が異なる場合があります。この違いを吸収してくれる存在が必要です。これが jQuery の役割になります。

jQueryはJavaScriptの異なる仕様をなんとかしてくれる存在です。

CSSはBootStrapで統一感を出す

プログラム開発だからといってデザインを無視することはできません。が、デザインにかける時間も予算もない、BootStrapのようなCSSフレームワークは手軽に(?)デザインの統一性をとってくれます。

もちろん、classを利用したデザインに慣れる必要はあります。自分なりのカスタマイズも可能です。

BootSrap以外にも様々なCSSフレームワークが出ているようです。

さらに~今回利用しませんでしたが、PHP にまでフレームワークはあるんですね。Laravelは機会があれば使ってみたいと思います。

コメント