設計書なき開発の進め方(Mac, MySQL, Symfony) #3

早速新しい機能を作成してみる。今回はアジャイル開発を推進するつもりも否定するつもりも無いけど、設計書レスな感じでいくので画面イメージだけ用意してみた。ECサイトなのできっと購入できる商品の一覧画面が必要なはず。ということでこんな画面を用意してみました。

f:id:nakaken0629:20120908000210j:plain

作業については、gitで管理することに。リポジトリはgithubに置くこととして、タグやブランチなどをどのように作成すればよいのかを考える必要がある。幸いなことにgit界隈では"git flow"なる考え方が市民権を得ているようだ。そこで、git-flowをインストールして、この画面を初めての実装を行うチケットとして登録してみた。

git-flowプラグイン http://d.hatena.ne.jp/Voluntas/20101223/1293111549

設計書なき開発の進め方(Mac, MySQL, Symfony) #2

今日はMacにMySQLSymfonyを入れるだけで終わってしまった。結構環境づくりは大変。

[php.iniの作成]

PHPの設定を行うphp.iniファイルは、デフォルトでは用意されていない。しかしひな形が用意されているので、それをコピーする。

$ sudo cp /etc/php.ini.default /etc/php.ini
(パスワードを聞かれたら、ログインユーザのパスワードを入力)

[MySQLのインストール]

MySQLのダウンロードサイトから"MySQL Community Server"をダウンロードする。ダウンロードするファイルはDMGファイルが便利。インストールはこのページを参考に。

[Webサーバの有効化]

"Mac Web共有"で検索した結果を参考に、Web共有を有効にする。実はこれは、内部ではapacheを有効化している。

[PHPの有効化]

デフォルトのWebサーバの設定ではPHPが無効になっているので、/etc/apache2/httpd.confを編集して有効にする。

$ sudo vi /etc/apache2/httpd.conf
(パスワードを聞かれたら、ログインユーザのパスワードを入力)
(旧)#LoadModule php5_module        libexec/apache2/libphp5.so
(新)LoadModule php5_module        libexec/apache2/libphp5.so 

[VirtualHostの有効化]

同じくhttpd.confを編集して、VirtualHostの有効化を行う。この設定を行うと、symfony内部の画像などのコンテンツに"/sf"でアクセスするためのVirtualHostの設定を行うことができるようになる。

(旧)#Include /private/etc/apache2/extra/httpd-vhosts.conf
(新)Include /private/etc/apache2/extra/httpd-vhosts.conf 

 [Symfonyのインストール]

ここまで来たら、symfonyのマニュアルに沿ってsymfonyの導入ができるようになる。

http://localhost:8080/index.phpsymfonyの初期画面が出たところで、今日はおしまい。

設計書なき開発の進め方(Mac, MySQL, Symfony) #1

新しい会社でSymfony 1.4 + MySQLのシステムの保守をすることになったので、勉強をかねて「設計書なき開発の進め方」というブログを書いていこうと思います。

「設計書」というのがミソで、設計はします。ただ流行のアジャイル開発などで参考になりそうな、小さなTryを繰り返しながら大きなシステムを作っていくさまを実録できればいいかなと思っています。後はテストとかいろいろ。

設計ツールについて

ここでは設計ツール=設計書を書くためのソフトとします。このときよく使われる順に設計ツールを並べると、こんな風になると感じています。

 EXCEL > Word > 専用の設計ツール

なぜExcelが頻繁に使われるのか? 「無料だから」とか「みんな持っているから」とよく言われますが、自分はそこに「書式が自由だから」を強くプッシュします。

Excelは本来「表計算」を実現するためのツールですが、設計ツールとしてはセルを一文字分に縮めたいわゆるExcel方眼紙として使われます。Excel方眼紙のよいところは、何を書いても自由というところです。字が書きたければ字が書け、図を描きたければ図が描けます。

Wordは本来「アウトラインを持つ文書を作成する」ためのツールです(※垂れ流しの駄文を書くものではないのですよ!)。ある程度自由に字はもちろん図表も書くことができますが、文書全体を章立てすることで設計書としての完成度をより高めることができます。

そしていわゆる専用の設計ツール。これはそのツールの使い方、あるいはツールで作成する設計書のバックグラウンドを知らないと使いこなすことができません。例えばER図やDFDを作成するためのDOA設計ツールは、ER図やDFDの記法ルールを知らないと使うことができないのです。

それほど短くない期間をシステム開発して過ごしてきましたが、UML、ERD、DFD、フローチャートといった設計手法の記法ルールはおろか、構造をもった文書の作成という一般教養的なスキルのない人が、選択の余地なくExcel方眼紙を使っているというのが現状なのです。そのように書かれた設計書は、もはやルール無用の単なる広告の裏のメモ書きと大差ありません。

さよならExcel方眼紙を実現するためには、設計ツールのさらなる高性能化ではなく、ベースとなる設計手法の啓蒙学習が必要なんじゃないかなと思う、今日この頃です。せめて自分の周りだけでも。

よくやったと誉めてあげたい

f:id:nakaken0629:20120324014318p:plain

「アーキテクト」という責務がある。重要な役割の一つとして、プロジェクトが開始した時にアーキテクチュアルベースラインを作るという作業がある。この作業でよくあるのが、プロジェクト用のフレームワークの作成だ。スクラッチで作成しても良いし、既存のフレームワークをカスタマイズする事もよくある。狙いとしては、この後の実装者が、このアーキテクチャに沿ってシステムを作れるように することだ。

しかし、後の実装者は必ずしもアーキテクトの思い通りにはプログラムを作ってくれない。元来アーキテクトは構造的な美に対する間隔を大なり小なり持ち合わせている。アーキテクトが美しく積み上げたアーキテクチャを、プログラマはいとも簡単に醜悪にする。時が経つにつれて歪んでいくアーキテクチャをみて、ほとんどのアーキテクトは絶望と脱力に襲われる事だろう。

だがアーキテクトといえども、おこりうる全ての事を知る事はほぼ不可能である。プログラム時は「まさかそんなことを実装するのか」ということが、平気でぼんぼん発生する。そんなときに形はどうあれ動くものができたという事。それは「アーキテクチャが身をていしてプログラマを救ったのではないか」 と考える事ができないだろうか? まあ、そう思うプログラマはほとんどおらず、うまく行ったのは自分のせい、失敗したのはアーキテクチャに問題があると判断してしまうことだろう。

システム開発ではスピードが大事。昔のように揺るがせないアーキテクチャの作成は難しい時代になってきた。だから、ある程度見切りを付けたら即本番投入。アーキテクチャは意図していないとんでもない状況になる。でも、手や首がもがれてもなお、プログラマーを安全な場所で守っている。そう思えば、汚くなってしまったフレームワークに「ありがとう」っていう気持ちになってもいいのではないか。 

愛と力 at システムインテグレーション

「愛なき力は暴力なり、力なき愛は無力なり」

これは昔通っていた大学で、空手部が出していた新入生勧誘用の立て看板に書かれていたキャッチコピーだ。別にこれを見て空手部に入ろうと思った訳ではないけど、なぜか20年近く経った今でも覚えているのは、何かしら真理があるからなのだろうか?

そして、これは今の自分の生業であるシステムインテグレーションにも成り立つんじゃないか、いやむしろ成り立っている最中なんじゃないかと、風呂の中で思い立った。

「愛なき力」っていうのは、最新技術ばかりに目がいってしまい、その技術がお客さんの仕事に役立つかどうかって言うお客さんへの愛が欠けている状態。ついでに言うと、そのいつまでメインストリームにいるのかわからない技術を使いたいだけ使って、あとでメンテナンスする人への愛も欠けている状態もある。

「力なき愛」っていうのは、単純にスキル不足の人。でもお客さんへの愛にはあふれているから、バラ色の夢物語を自分ではできないのに話しちゃう。お客さんもその気になってGoしちゃうけど技術がないので行き詰まり、結局最後には自分も相手も傷つける事になってみんな不幸になってしまう。

自分はどちらかというと「愛なき力」傾向があるけれども、それでも「技術よりも人間性が大事」だとか「コミュニケーションスキルが大切」などとのたまう人たちには「力なき愛」を感じる事が多々ある。そういえば星新一のショートショートで、地球に不時着した高度な文明を持つ宇宙人が出てくる話があった。人柄のいいその宇宙人は一躍地球人の人気者になったけれども、彼自身自分が乗っていたUFOについて何の知識も持っていなかったため、結局顧みられる事がなくなってしまったというオチの話だったと思う。愛だけでなく力も「同じくらい」重視される業界になってもらわなければ、まあ先はないんじゃないかと思う今日この頃である。

ASP.NETでPostBackしてもPanelのスクロールバーの位置を固定しておく

ASP.NETでは、Panelコントロールを使うとスクロールバーが簡単に実現できます。しかし、ボタンのクリックなどでPostBackが発生すると、スクロールバーがリセットされてしまいます。そこで、スクロールバーの位置を記憶するExtensionを作成しました。

f:id:nakaken0629:20120206231448j:plain

f:id:nakaken0629:20120206231552j:plain

http://itvirtuoso.codeplex.com/wikipage?title=Scroll%20Extender%EF%BC%88%E6%97%A5%E6%9C%AC%E8%AA%9E%EF%BC%89