フレームワークとウィザード / 健全なプログラミングとは?

カテゴリ: PHP

記事投稿日: 2014年5月31日



作業を効率化するために
プログラムの部分とテンプレートを分けたことがありました。
テンプレート・エンジンの「Smarty」を使うと
ロジックの部分とデザインとを切り離すことができるというのは
かなり魅力的に思えましたし、十分実用的でした。

そのあとは、「フレームワーク」コンプレックスと言えばいいのか、
業界のスタンダード的な技術を習得しなければ、という焦燥感にかられ、
CakePHP2を覚えました。
しかし、フレームワークの考え方で最も衝撃を受けたのは、
「Ruby on Rails」でした。すっきりと書けるコード。
強力なORマッパー。ただ、慣れるまではかなり時間がかかりましたし、
現場では依然としてPHPを採用しているところが多いのが現状です。

その後、Monacaによってモバイル向けのアプリを作る際、
従来のコントローラーの役目をJavaScriptが行い、
データベースの処理をAPIに投げるという新しいMVCモデルに
出会った時は、これからの開発はこれだと思いました
(PHPが画面を動的に生成しないだけで、コードの見通しが
どれほどよくなるものか…)。

「Smarty」を知った時から、
ずっとオリジナルのフレームワークを作っていました。
Railsのように、シンプルで、けれどもう少し軽くて、
多くの企業が採用しやすいPHPで動くものを目指して。

今年に入ってほぼ出来上がったのですが、ふと気が付いたのは、
「同じことを何度も繰り返している」ということでした。
フレームワークを使うと、効率よく開発ができるのは
そもそも、チームでコーディングをする際、誰が見ても
どこのファイルを見れば何ができるか、をいちいち
説明しなくても済むという点にあります。
その代わり、犠牲にしているのは、一から毎回
ファイルを作る必要があることです。

ずっと頭にひっかかっていたのは
『コードを作るコード』を作ること、メタ・プログラミングを
行わない限り、作業はいつも同じことの繰り返しだ、ということでした。
ずっと悩んでいて、どうしたらいいのか考え続けていたのですが、
ふと、「ウィザード形式にしたらどうだろう」と思いつきました。

どういった画面が欲しいのか、ウィザードへ
回答を入力すれば、「必要なコード」が吐き出される、という仕組みです。
肝心なのは、ブラックボックス化せず、あくまで自分で考え、
作ったコードを吐き出させる、ということです。自分で理解できない
コードを吐くようなウィザードを使うな、と先人の言葉にもあります。

そこで出来上がったのは、約800KBの容量になりましたが、
Bootstrap3とPDO、MySQL、PHPを利用して動作する、
ウィザードでした。

仕組みとしては、最初にルートにアクセスして、
コンフィグファイルが作成されていなければ、
管理用のウィザード画面が表示され、データベースの
接続情報と、アカウント情報を入力するよう求められます。
入力し、次へを押すと、必要なファイルが生成され、
ログイン画面にリダイレクト。以降はルートにアクセスすると、
常にログイン画面が表示されます。
そしてウィザードで入力したアカウント情報を使って
ログインすることができます。

ログインすると、第2のウィザードが使えるようになります。
こちらは、コントロールしたいテーブル、一覧に表示したい項目、
編集したい項目を入力すると、
いわゆる CRUD (Create(生成)、Read(読み取り)、
Update(更新)、Delete(削除))システムを生成するウィザードです。

CRUDなら、CakePHPや、Railsでもあるし、車輪の再発明ではと
思われるかも知れませんが、肝心な点は、ウィザードが実際のコードを吐く点です。

検索、一括操作、ページャーといった機能も網羅しています。
多くのフレームワークでは、CRUDは実ファイルを持っていない定義上だけの
システムであるため、一瞬で利用出来るとはいっても、柔軟に
カスタマイズすることはできません。また、Bakeを使えば近いことはできますが、
デザインや構造の変更にはややこしい手続きが必要です。
このウィザードは実際のコードを出力するので、ロジックはエディタで
手軽にカスタマイズすることができます。

ここまで、実際に作成することができました。
フレームワークではなく、ウィザードを実際に作ってみて驚いたのは、
「同じコードは本当に二度と書く必要がない」ということでした。
ウィザードはロボットのようです。Macでは「アシスタント」と
呼ばれますが、まったくその通り。いつもやっていた作業を
任せることができます。まったく、する必要がなくなりました。
退屈なコードを何度も書く(あるはコピペする)作業から解放してくれました。
また、「仕組みの分からないコードを利用する危険」もありません。

「人の行く道に裏あり 花の山」といったところでしょうか。
プログラミングの道は険しく、技術を取得するだけでも大変ですが、
ようやく人に見せても恥ずかしくない、オリジナルの仕組みが作れたように思えます。
一から構築する必要があるので、人におすすめできる方法ではありませんが、
認証と、ちょっとしたデータ管理ならサーバへの設置を含めて
今後は5分で立ち上げることができるようになりました。

今日は、フォームのウィザードの設計を終えたところです。
JSON形式でフォームの構造を作って、送信先、送信後のメッセージ、
フォームの内容を保存するテーブルなどをウィザードに
入力すれば、面倒なことの多いフォームのひな型と、
送信内容の管理画面までが一瞬で出来上がる、というものです。
送信された内容はデータベースに保存し、CSVに出力することができます。
フォームの各要素は、基本的には1行テキストボックスで出力し、
必要があればタイプを変更する必要がありますが、入力チェックや
確認画面、送信機能、管理画面までが全自動で出来るので
かなり大幅なコストダウンにつながると確信しています。
できれば明日中に作ってしまいたいくらいですが、
2~3日はかかるでしょう。
※1日経って考え直しました。会員登録のフォームとしての機能も
付けることにします。登録後、メールが送られ、受信したメールの
リンクをクリックすると正登録が完了するというものです。
5日はかかりそうですが、出来上がれば、かなり色んなサイト、
アプリが数分で立ち上げられるようになりそうです。

ウィザードを作るのはフレームワークを「利用」することに
比べると手間ですし、時間がかかります。それでも開発をするのは、
よく分からないものは使いたくない、フレームワークは重い、
必要なものだけで作って、できるだけ軽くしたい、などといった
欲求にかられてのことです。
CakePHP2が最低でも10MBで、プラグインを入れると容量が
どんどん増えていくのを考えれば、ちゃんとした検索機構の
備わったウィザードのシステムは現時点で800KB、フォームの
ウィザードを追加しても1MB台の見込みと考えると、労力に
見合った成果は充分見込めます。

会社勤めでチームで仕事をしている・するのなら、
フレームワークは必須でしょう。
スピード、効率が命のフリーなら、
ウィザードの開発に投資した方が見返りは大きいと考えます。
譲渡する場合でも、簡潔なMVCモデルになっているし、
独特のルールのORマッパーなども使っていないので、
読みやすいと思います。

フレームワークは、チームで、会社で、全体の力をまとめて
システムを作るのに適した、優れた考え方だと思います。
ただ、個人で開発をする場合は、ウィザードを作った方が
心と体にも、健全なプログラミングではないかという思いが
ここに至りました。

認証処理に、一般的なテーブル操作、フォームの作成、
これらは数年来の開発者にしてみれば、うんざりするほど退屈な作業です。
ここで取り上げたウィザードなら、一瞬で終わらせて、
もっと面白いカスタマイズに集中することができます。

PHPの教習本で「君だけのウィザードを作ろう」なんてコンテンツには
出会ったことがありませんが、考え方としてはどうでしょう?

ウェブ上には、エンコード・デコード、整形やJSのポップアップ画面など、
ちょっとしたコードを作るためのサービスは山ほどありますので、
それこそ、「ウィザード」と呼ばれるような高度のプログラマーたちは
専用のツールをたくさん作っておられるのだと思いますが。
ご意見のある方、コメントお待ちしています。








コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA




トップに戻る