seri::diary

日常

自社サービス開発のエンジニアになって1ヶ月が経った

あっという間に

今の会社に転職してから1ヶ月が経った。
前回のエントリーで1週間経ってからの感想を述べたが、
年末という良い区切りを迎えたので改めてこの1ヶ月を振り返ってみたい。

俺って実はかなりダメな奴なんじゃね?って10回思った

至るところで自分のレベルの低さを痛感した。

この一ヶ月は既存機能のバグフィックスやちょっとした機能追加をやりながら自分の担当範囲についての理解を深めていった。

しかし、

  • 既存のソースから仕様を読み取り切れない
  • 多重継承しているクラスを追っかけながら仕様を頭の中で整理できない
  • 新しくメソッドを書くときにすでに似たようなメソッドがあるのに気づかずに新しくメソッドを書いてしまう

※因みにフレームワークはStruts2+Springをベースに独自に拡張したもの

なんてことを繰り返しまくった。
慣れの問題もあるだろうが、ソースから仕様をきちんと追って、どう修正するのが最適なのかというところまで自分の力でリーチできないのはかなり痛かった。。前職でもスパゲッティコードを必死で読みといて仕事をしていた経験もあったので、何となく「ソースを読んで理解する」ことにはある程度自信があったが、そんな経験が全く通用しなかった。

SI的な開発と自社開発の違い

まだ新しい言語やアーキテクチャに慣れていない、というのもあるが、余計な仕事を増やせば、それがレビューしてくれる他のエンジニアの作業コストにそのまま繋がる。
それに、慣れていないことは言い訳にならない。
与えられたチケットに対して、他のメンバーに対して責任を持つ。
それが、今までほぼ一人でSI的な開発をしてきた点との大きな違いだと感じる。


前職まで(前前職はSIer、前職はWebメインの受託開発)は、お客様からいただく予算と決めたスケジュールの中で、自分のペースと責任で仕事をすれば良かった。だからお客様さえ文句を言わなければある程度好き放題できた(これもどうかとホントは思うが)

もはや「お客様」はいない。

自分が向き合うサービスと、一緒に開発をするエンジニア、直接ユーザーと向き合う営業チームなどの他部署のメンバーが、つまりは「お客様」に代わって「責任をコミットしなければならない存在」。

サービスを使ってくれるユーザーももちろん責任をコミットしなければならない相手ではあるが、それと同じぐらい重要なメンバーが他にいる、ということ。

「自分で考える」が基本の世界

結果的に責任は重くなったと思う。
設計から品質の担保まですべて自分で責任を持たなければならない。

でもその分、凄く裁量が増えた。

例えば、降ってくるチケットも「この画面は○○という問題を抱えている。これを解決できるように機能を修正して欲しい」みたいな、”ざっくりした形だったりする。
どう直すか?それは「自分で使いやすいようになるように考えろ」と言われる。

もちろんチームリーダーに「大体こんな感じの修正でいいですかね?」ぐらいのことは確認してから作業に着手するが、例えばそこから「こういう機能もあった方がさらにいいよな」と思ったら、自分の責任で実装することができる。(もちろんレビューはする)

また、「ここのコードはこう書くべきじゃないから直す」というのも、ロジックさえ間違ってなければ認められる。Java周りはまだ自信がないこともあったので、Javascriptでの要素のとり方が大雑把で危なかっしい実装を直したり、HTMLのクラス名、ID名が適当なところを直したりした。


自分で考える、ということは

  • 「ユーザーの視点」でどうしたら使いやすいかを考える
  • 「サービスを提供する会社の視点」でどうしたら利益が上がるかを考える
  • 「エンジニアの視点」でどうしたらメンテし易く分かりやすい実装ができるかを考える

という風に、いくつもの視点を持って最適な解を求めることだと認識している。

「ユーザーの視点」も「サービスを提供する会社の視点」も正直まだまだだが、いずれは自然とこの3つの視点でサービスを改善する方法を考えられるようになりたい。

そのためにも、与えられたチケットに対して思考するフェーズが凄く重要。
何となくこの一ヶ月は「早く実装しないと」という焦りからか、上記のような変な失敗を何度もやってしまったような気がする。
来年からはもっと思考するフェーズに時間を割いて、最適な解は何かを常に考えながら仕事が出来るようになりたい。

Javaの勉強素材

Javaの勉強は色々と継続していかなければならない。
今使ってるフレームワークの知識もそうだが、DIやAOPの概念やら色々と基礎的なところがまだまだ足りないと感じている。

会社の先輩に「Javaの初心者本よりちょっと上くらいの人が読む本ないですか?」と聞いたら
以下の本とサイトを紹介してくれた。

Effective Java 第2版 (The Java Series)

Effective Java 第2版 (The Java Series)

その名の通り「Javaはこう書くと良いぜ」みたいな本のようだが、今のところアノテーションジェネリクスについてのみ読んだ。
年末年始使ってじっくりと読んでいきたい。

Javaメモ 目次

Javaの基礎文法からサードパーティのライブラリの紹介まで幅広く記載されている。
標準クラスのメソッド一覧はかなり世話になってたり。
String.startsWith()とか便利なのにまだすぐ出てこないので。

最後に

現在うちの会社はエンジニア募集中です。
もし興味のある方はぜひこちらのページをご覧ください。
自社サービス開発に興味のある方、自分で考えて自発的に開発がしたい方におすすめです。

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

eclipse便利コマンド1,2

eclipseで早くコードを書くための便利な補完コマンドを備忘録代わりにメモっていく。

1.newしたときのインスタンス変数を補完

まずこんなのを書く。右辺だけ先に書く。

new Integer(2);

この状態でカーソルを"new Integer(2);"の行に合わせ、以下を打つべし

ctrl + 2 → 一旦指を離す → l

結果、以下のようになる

Integer integer = new Integer(2);


使いどころ多そう

2.for文の補完

まずこんなのを書く。

fore

この状態で以下を打つべし

ctrl + space → Enter

そうすると以下のようになる

for (iterable_type iterable_element : iterable) {
			
}


例えばDBFluteを使ってデータを取得するような以下のケースで便利

    	//投稿情報の取得
    	PostCB postCB = new PostCB();
    	postCB.query().addOrderBy_PostId_Desc();
    	postCB.paging(30,1);
    	PagingResultBean<Post> postPage= this.postBhv.selectPage(postCB);

こんな状態から

        for (Post post : postPage) {
  
        }

こんなのを「fore」 + 「ctrl」 + 「スペース」 + 「エンター」だけで補完できる。

原点

mixiの過去の日記を読み返してたら見つけたので引用



2009年12月25日21:15

ネットはもはや単に情報を発信・受信するだけのものではなく、
そこでやり取りされる情報からさらに別の情報を見出し、
それによって人の意思決定に影響を与えうるものになる。

なんて書くと「ネットヲタ乙」とか思われそうだが、でもホントにそんな時代が来てもおかしくない。
障害はかなりあると思うけど、それでもロマンを感じぜずにはいられない。
多くの人が漠然イメージしてる「未来の世界」がネットの世界では来つつある。

ただの暇つぶしに使うには勿体無いほどネットてのは面白い、コンピュータってのは面白い。
それをもっと一般の人に広く知ってもらいたい。


そういう未来の創造に携われたらなぁ・・なんてことを、こないだウェブ学会で思ったワケです。
講演してくださった大学教授、研究者、ベンチャーの社長、エンジニアの方々は
ホントにイキイキとそういう未来について語ってくれた。
いつか、そういう人たちと同じ土俵でプレイヤーとして活躍したい。


ちなみにウェブ学会の講演動画は全てustrで観られるので是非観て欲しい。
ネット好きな人なら面白い講演が一つはある・・と思う。

午前
http://www.ustream.tv/recorded/2731784
午後1
http://www.ustream.tv/recorded/2733140
午後2
http://www.ustream.tv/recorded/2733140
午後3
http://www.ustream.tv/recorded/2733797

Groonga installメモ

twitterに残しておいたメモを探すのに苦労したのでブログ転載

個人用メモ:
groongaをyumで入れる時mecabを使いたい場合は、mecab用の辞書その他諸々をgroongaのリポジトリ経由で入れるために公式ドキュメント以外に下記のコマンドが必要

yum -y install mecab*