seri::diary

日常

PHPerがJava屋になって1週間が経った

先月末に前の会社を辞め、今月から新しい会社にいる。
某自社Webサービスをやっている会社で、そこの社内エンジニアという形だ。

業務内容も環境も一緒に働く人達の雰囲気も全てが一新し、良くも悪くも色々と戸惑っていたりもするのだが、会社の雰囲気とかについての話は1ヶ月ぐらい経ってからしたい。
今だと冷静に評価出来なさそうだしね。


なので、まずもっとも大きい変化である開発言語がJavaになった点について感想を述べてみたいと思いう。


前の会社でも多少はJavaを書いていたがしょっぱいライブラリを作ったぐらいで、大したことはしていないしWebアプリなんて全然作ってない。

最後にJavaでWebっぽいことをしたのは2年前になる。
まだ社会人になって1年目〜2年目ぐらいのSE時代で、Struts1.2で某システムの管理画面のメンテを普段の運用保守業務の片手間にやっていた。

メンテ、といっても、Javaなんて分かんねーし、何よりプログラミングとかちゃんとやったことねーし、同じ会社のSEは誰もJavaStrutsも分かんねーし、みたいな状況で、既存のコードをコピペして何とか動かしていた。

*1


StrutsServletの入門書も買って読んだりもしたが、結局この管理画面は半年ぐらい付き合った時点で自分は別のPJに回されてしまった。だからStruts歴も実質半年しかない、というか、半年の間でも実際に自分がいじったコードなんてServlet側とJSP側全部合わせても400〜500行ぐらいじゃないだろうか。

そんな状態だったのが、今回の転職でJavaの仕事に戻ることになった。


入社前の課題として、いくつかフレームワーク使ってツィッターもどきみたいのをひと通り作っていた。
その時提示された課題内容はまぁそこまで複雑ではなかったし、フレームワークもよくあるMVCフレームワーク + O/R Mapperだから、まぁ会社のプロダクトもそこまで複雑ではなかろうとタカをくくっていた。

が、いざ入社してみると想像していた以上にプロダクトは複雑だった。


まずフロントからバックまで合計4つのフレームワークを組み合わせて使っていた。

画面のエンジンはこれ、コントローラー周りはこれ、DIはこれ、O/R Mapperはこれ、といった感じだった。まずこれだけでも何というか衝撃的で、新しいフレームワーク3つも勉強しないといかんやん!という感じ。

さらに、業務ロジックは多重に抽象化されてMVCに加えてさらに独自の業務レイヤーが存在していた。このあたりはまぁ見たことある、というか割と一般的だと思うが、業務ロジックだけをまとめたパッケージを決めて、コントローラーからその業務ロジックのクラスをDIして使わないといけない!、みたいな。。でもたまにルールに従っていない!みたいな。。

何というか、OSSのフレームワークって、使い方一個覚えとけばどの現場行っても使えるもの、みたいな認識があったが、多分そんなんは通用しないレベルの複雑さだと思う。

完全にカスタマイズしまくって、もはや「自社フレームワーク」的な形のものをつくって使っているような状態だった。

フレームワークといえば、PHPer時代はCakePHPを使い、Cakeのコントローラークラスを使ってコントローラーを作り、Cakeのコンポーネントを使用して業務ロジックを組み立て、Cakeのctpでhtmlを組み立て、CakeのModelクラスでDBにアクセスしていた。
画面側についてはjQueryも使ってはいたが、同一の言語内で複数のフレームワークを組み合わせて使うアーキテクチャは初めてだった。

*2


また、開発環境も2年もJavaから離れいたためか大きく変わっていた。

EGit?なにそれ?
Maven?なにそれ?
Jetty?なにそれ?

みたいな。。

幸いEclipseは共通のものを自社サーバから落としてきて解凍するだけで使えるようになってたし、ひと通りの手順はマニュアル化されていた。
が、それでも入っているプラグイン達が何をやってくれているかまだ分かってない。。

あとそもそもEclipseもしばらく使ってなかった、というかつっこんだ使い方をしたことがなかったので使い方がまだ覚束ない・・
JavaEclipseないと開発できねーんじゃねーの?と思うくらい大量でかつ複雑な構成のソースを相手にしないといかんので、ctrl+oやctrl+hとかの検索系ショートカットはガンガン使って行かないといけないということを実感した。

そうしないとソースレビューで「ここでこのメソッドを呼んで、んでこのメソッドは・・あれ?どのクラスだっけ?」みたいなことを来週も連発してしまう。


そんな今までとは全然違う環境にカルチャーショックを受けつつ、最初の一週間が過ぎた。

業務の合間に時間を取ってもらい、プロダクトのアーキテクチャの説明や、使っているO/R Mapperだけのハンズオンをやってもらったりして、徐々にプロダクト全体のアーキテクチャが分かってきた状態。
あとはリリース前の結合テストやったり、小さなバグフィックスや機能追加のタスクを振ってもらい、チケットを数個切って手を動かし始めている。

朝は始業の30〜40分前に来て、まだ使い慣れていないGitの使い方やフレームワークの本を読んで勉強している。
が、今のペースだと全然間に合わないので、来週からはもっと早く出社して勉強時間を確保してく予定である。
ベンチャーらしく、なかなかに忙しい会社のため、業務中にじっくりコード全体を眺めたり、使っているフレームワークについて調べている時間がない。

新卒の新人に戻ったつもりで、自分で時間を作って行かないといけないなと感じている。


技術関係以外にも覚えることは大量にある。
まだ画面側の、ほんの一部だけ少し理解できた程度で、仕様を把握できていない機能は沢山ある。言語がどうこうではなく、単純に関わるプロダクトがこれまでに無いくらいデカいものなので、早く全体像を理解して関われる仕事の幅を広げていきたい。

とりあえず最初の1週間はこんな感じ。

*1:多分当時はプログラミング嫌いだったw
もしミスったらすぐお客さんに迷惑かかるし、誰もサポートしてくんねーしという状況で、ビクビクしながら手探りで書いていくプログラミングが楽しいわけがない。
そんな人間が、今となっては会社でも自宅でもコードを書き、生業は自社Webサービスのエンジニアである。人生何があるか分からないものである。

*2:なお、入社前に使い方を勉強していたフレームワークについては、入社直前に行われたプロダクトのバージョンアップによりすでに使われなくなっていた・・