PHPからJavaへ
JavaからPHPって人は何人が探したらいたのですが、PHPからJavaってあまりいないみたいですね。現在なぜかJavaで開発を行っています。そのときに思ったことなどをつらつらと書きたいと思います。
Javaの経験
Java自体は2000年ごろにAppletを実はやっていました。当時はまだJava2と呼ばれる時代で誰もが気軽に使っている時代ではなかったですね。
元々C言語をやっていたので、あまり違和感なくJavaに入っていくことができました。ちなみに私の中ではJavaはものすごく機種依存の激しい言語です(笑)
当時はWindows上でInternet ExplorerとNetscape Navigatorが主流であり、GIFファイルの読み込み方法などが実は異なっていました。
ブラウザ別処理を書かないといけないので、結構面倒だったんですよね。当時はSwingを利用できれば便利だったのですが、標準的な環境だとまだブラウザが対応していないことがあったのでベタで組んでいました。
その後に経験したのが携帯電話でDoCoMo503シリーズ用で、このときには完全にJava1.3でしたね。その後1.4にもなりなしたがそのころには外国向けの携帯電話とか担当していたので、J2MEとかMIDPとかやっていましたね。結局1.4の機能も携帯だと使えないので1.3互換でコンパイルしていました。
携帯電話用のアプレットの場合インターフェースも継承も使っていません。むしろプリプロセッサを使って組んでいました! 携帯機種ごとに特殊処理を行うので、設定ファイルを書いてdefineとかで切り替えて30種類ぐらいjarを作成していたりしました。
現状のJavaに感じたこと
今の最新版は1.6ですが、Servletでは1.5が最新版です。ただいろいろ聞いてみると1.4で開発を行っている事が多いみたいですね。継続案件の場合にはどうしても昔の環境を引きずりますからね。
ただ1.5になってかなりJavaも変わっています。知らない構文がでてきてなんだと思ったらenumとかが導入されていますし、for文とかも拡張していますね。
一番大きいのがアノテーションなのかな? @で始まる構文でいろいろ拡張できます。すみません完全に理解できていないのですが、すごい機能です(笑)
ただどう動いているのかわかりにくくなっているかな? あまりJavaっぽくなくなっている気がします。冗長でもぱっと見でわかるようにコードを書くのがJavaっぽいイメージがありましが、きれいに省略してかけます(笑)
フレームワークを選んでみた
なんとなく聞いたことがあったSeaser2を使ってみることにしました!
しかしSeaser2ってDIコンテナでそれ自体はフレームワークじゃないんですね。。。いろいろSeaser2上で動くフレームワークがありましたが選んだのは太陽を意味するTeeda!
Mayaaとか他のもあったのですが、テンプレートに合わせて設定ファイルがいるんですよね。。。あまり設定ファイルが好きじゃないので、ファイルの少ないTeedaにしてみました。
フレームワークの特徴といえば、テンプレート上でidを設定した名前をページクラスで宣言されれば透過的に利用できる!
foreachとかもitemsみたいな配列で突っ込めば複数行吐き出してくれるんですよね。ただページファイルにあらかじめ定義しておかないとデータの連動はできないので、画面が動的に変化するものには苦手みたいです。
この辺はPHPでも最近のフレームワークは直接$_GETとか$_POSTとか読まないで、あらかじめ定義したデータのみ透過的に利用できたりしますよね。
いろいろ触ってみて感じたことは、あまり出力されるテンプレートがきれいじゃない。。。
itemsで吐き出すと各行に同じidが吐き出されたりします。nameはかぶっていないので問題ないのですが制限事項ではありますね。
概ねトリッキーなことをやらないで、画面が固定されている場合にはいい感じのフレームワークです。
Javaをやってみて感じたこと
やっぱり面倒(笑) どんどんファイルが増えていくんですよね。それがなー。
O/Rマッパーとか使ってデータにアクセスするので、どうしてもテーブルごとにデータカラムを定義したエンティティと、実際にテーブルからデータを取得するDAOを作成して。。。
50テーブルのマスターテーブルにCSVからデータをロードする場合、ロードクラスとDAO、エンティティで150個ぐらいクラスが増えた(涙)
PHPだとテーブル名とCSVファイルの連想配列と、CSVの列の場所とカラム名の連想配列と、特殊処理のフラグを設定してガツンと読み込ませる感じかな?
Javaでももちろん同じことはできますが、一般的にはちゃんとクラス作ってやることが多いというか、Javaっぽい気がします。
あとライブラリがJarで固められているので、あまり中身見れないことかな。PHPの場合ファイルでそのままプロジェクトに含めてしまうので、すぐに見れたりしますが、Javaの場合ソースでも入れることができますがファイル数が多いのと、ライブラリはライブラリのまま使う前提だから、あまりライブラリのソースに手を入れたりしないみたいですね。
JavaプログラマとPHPプログラマの違い
私はメイン言語Cなので正確にはPHPプログラマじゃないですが、Javaプログラマってあまり他の言語とか環境に慣れていないことが多いような気がします。
大きなプロジェクトが多いから、環境構築とか誰かがやればいい仕事は他の人がやっていたりするんですよね。PHPの場合にはそれほど大きくないプロジェクトが多いから、誰でもそこそこのことをやらせます。
XOOPSなんて細かいところはカスタマイズして使うことが多かったりするので、新人プログラマでもどんどん触って言ったりします。Javaだと新人が環境に手を入れることってないでしょうね。
この辺がPHPの怖いところでもあります(笑)
言語というか、仕事の環境的にJavaは一番底辺を底上げして、その分できる人のプログラムも制限する。一定のスキルレベルで誰が作っても同じようなコードを作成する環境を求められている気がします。
だからものすごいできるSEと、そこそこの大量のPGで作っていくイメージ!
PHPはできる人はどんどんトリッキーなことできるし、新人はものすごい変なこともする(笑) だからSVNのコミットログとかをtracとかで監視していて、新人が組んだプログラムを確認しながら危ないところは教えてあげるフォローが必要です。
Javaの代表的な環境が2極化で、一部のハッカーがその他PGを管理している気がします。そしてPGからハッカーは基本昇格しない(涙目)
PHPの場合にはなだらかな山になっていて、下のほうが多いけれど徐々にスキルアップしていく環境。
あとはWebの情報が全然違うんですよね、たとえばJavaでセッションを利用するって調べるだけでも結構大変(笑)
Javaの場合環境によっていろいろなやり方があるから、こうすればいいってそのものずばりのソースコードってないんですよね。概念だけ説明してあって、コアな部分のコードだけ書いてある。
あとは堅い業務で使っている人が多いので、ネットに書く人自体がすくない!
ただ、、、セッションとかの場合には大きなプロジェクトの場合にはすでにえらい人がセッションをラッパーしたクラスとかを作ってくれているから、低レベルなところでアクセスする必要もないんだろうなって思っています。
この辺はシステム全体で動くJavaと、ファイルベースで処理を入れていくPHPの差かもしれませんね。
ちなみにTeedaの場合にはセッションは基本使わない方がいいって考えで設計されているので、本家にサンプルがありません(涙)