jfluteの日記 このページをアンテナに追加

2016-08-22

Lombokの除外設定にDBFluteの自動生成クラスを

|

DBFluteコンパイルスピード改善プロジェクトを
立ち上げています。
色々と分析して改善ポイントを見つけて、
ほんの少しでも良くなればと。

今までもかなり頑張ってスリム化を心がけてきましたが、
やっぱりコンパイルが遅い環境での実装って、
ストレス溜まりますからね。
まだまだやれることあるんじゃないかと思って。

1/3がLombok時間!?

その検証の中で、ちょっと気付いたものがあります。
Lombokを入れると、コンパイル時間が50%アップ
しました。"アップ" って悪い方にってことです。

メモリ8GB の MacBook Air で、
mvn -e clean compile を実行。
24テーブル分のDBFluteクラスを自動生成済み。

// 検証で利用しているプロジェクト at Github
// (デフォルトではLombokなしの状態)
https://github.com/dbflute-test/dbflute-test-env-compilespeed
# Lombokなし
 - 1: 00m10s823ms
 - 2: 00m10s314ms
 - 3: 00m11s501ms
    => avg: 00m10s879ms
 - 1: 00m10s194ms
 - 2: 00m10s084ms
 - 3: 00m11s239ms
    => avg: 00m10s505ms

# Lombokの依存を入れてみた
 - 1: 00m14s607ms
 - 2: 00m14s020ms
 - 3: 00m14s056ms
    => avg: 00m14s227ms
 - 1: 00m14s860ms
 - 2: 00m13s910ms
 - 3: 00m14s154ms
    => avg: 00m14s308ms

# Lombokの @Data を Entity, Bhv, CB, CQ などで利用
 - 1: 00m17s529ms
 - 2: 00m17s240ms
 - 3: 00m16s296ms
    => avg: 00m17s021ms
まあ、ざっくりまとめると...

 o Lombokなし: 10秒ちょい
 o Lombokの依存を入れてみた: 14秒ちょい
 o @Data めっちゃ使ってみた: 17秒くらい

まったく差分がなくても2秒くらい掛かっているので、
(Mavenの起動時間も含まれている)
2秒ずつ引いて...

 o Lombokなし: 8秒ちょい
 o Lombokの依存を入れてみた: 12秒ちょい
 o @Data めっちゃ使ってみた: 15秒くらい

12秒のうち、1/3がLombokの処理と言えるのかなと。

240テーブルだと?

もし、10倍の240テーブルだと、
まだ試してないですが単純計算で...

 o Lombokなし: 80秒ちょい
 o Lombokの依存を入れてみた: 120秒ちょい
 o @Data めっちゃ使ってみた: 150秒くらい

まあ、実際のプロジェクトで、
このくらいになっていますので、
そんなに大外れはしてないかと思います。

【追記】
400テーブル超えのプロジェクトで、
lombokあり/なしで試してみたら、
自動生成クラス部分のコンパイル時間、
やはり "おそよ1/3" が lombok でした。
(nabedgeさん、協力ありがとうございました)

けっこうでかいですね...
しかも、アノテーションを使うとなおさら、
使う量に依存すると思いますが、
倍近くになっていますね。

まあ、ある程度は遅くなるだろうと思ってましたが、
予想以上に遅いなって感じですね...

Lombokの処理対象から除外!?

なので、DBFluteの自動生成クラスは、
Lombokの処理対象から除外する方が良いでしょう。

...

って、jfluteは Lombok は普段使わないので、
Lombokに除外設定があるのかわかりませんが...

個人的には、環境負荷をかけてまで、
やりたいことじゃないな、って感覚なので。
(あくまでjflute個人的にはという感じで)

なので別に、すでに使っている現場でやめた方がいい、
とは言いませんが、自動生成との相性が悪いので、
なんとか除外設定をして欲しいなぁと。。。

# 自動生成クラスだけ独立したプロジェクトにして、
# Lombokが入らないようにするとか…
# ExクラスでLombok使えなくなるけど、
# その場面で使うことはあまりないはず。

現場だと逆に検証できない!?

まあ、検証はさらに続けていきますが、
取り急ぎまとめてみました。

ややこしいのが、実際のプロジェクトだと、
いったんLombokを使い始めたら、
外してコンパイルするってことができなくなるので、
どんだけ遅くなったかってわかりにくいと思うんですよね。

2016-03-30

破片プログラマーの悲しみ

|

破片プログラマー

大きなシステムの改修、
巨大に積み上がったプログラムの上での実装、

難度の高い仕事、

ただし破片

巨大な破片

画面を0から

二年、三年、五年と経験を積み、
開発スキルを身に付けたディベロッパー、

だがしかし、
0から画面を作ってみると...

...

あれ!?

できない。

画面を0から作ったことがほとんどない。
あったとしても、隣の画面の真似ごとをしてただけ。

考えて0から作ったことがない

レールのないところ歩いたことがない。

クラスやメソッド

クラスを作る。

どうやって?どういう単位で?

決められた中でしか作ったことがない。
その決めがないと何もアイディアが浮かばない。

「どこに何を実装するか?」って、
白いキャンパスの上で考えたことがあるかい?

...

メソッドを作る。

どうやって?どういう名前で?
どういう引数戻り値で?

メソッドの修正はたくさんしてきたが、
メソッドを作ることはめったにない。
もしくは、隣のメソッドの真似ごとをしてただけ。

なぜ、その戻り値を思い付かない?

DB設計も!?

select文はさんざん書いてきた。
チューニングだってわかってる。

テーブルを作る。

何か変な形している。

変なテーブルも得意のSQLで
無理矢理カバーしてきただけ。
良いテーブルのかたち、
悪いテーブルのかたち、
考えたことがない。

あんなにテーブルさわってきたのに、なぜ?

気付いたら...

年を取って、頭も固くなっているようだ。
破片じゃないプログラミングが苦痛でしょうがない。

...
...
…
…
…

あれっ!?
破片のプログラミングしかできない。

乖離の立ち尽くし

もちろん、すべての人は破片。
すべてのことをできるひとはいない。
そんな0/1の話をしたいわけじゃない。
程度の話。

そして、その破片をわかっていれば問題ない。
わかっていれば、できないことがわかってるから、
どうすれば解決できるかわかるから。

破片プログラマーの最大の悲しみは、
破片であることを自覚せずに成長してしまうこと。

プログラミング経験年数と、
実はほとんどプログラミングをしてこなかった
という事実に乖離がある。

それに気付かず、
ステージが違うことに気付かず、立ち尽くしてしまう。
もしくは、足を引きずりながら突き進んでしまう。

破片とホールのバランス

小さなまるごとアプリを作る経験、
これって大切だと。

デザイン、HTML/CSS, JavaScript,
サーバーサイドプログラミング(Javaとか)、
SQLDB設計、インフラ...

それぞれを少しずつ。

そんなに深くやらなくても、
それぞれの全体の中でのバランスがわかっていれば、
破片仕事をしながらでも全体を見る力が養われる。

...

まあ、そこまでおおげさでなくても、
小さなアプリの画面を作る。
小さいので全体が見通しやすい。
小さければ、既存コードに惑わされない。
その分、自分で考えて書かなければならない。

画面作りの基本を学ぶことに等しい。

...

もちろん、破片のお仕事も非常に大切。
破片は破片ならではのノウハウがあり、
鍛えられる部分がある。
盛大な筋トレをしているような感覚。

単純に
破片だけでは鍛えられないことがある
ということ。
そして、逆もまたしかりで、
破片をやったことないとそれはそれで、
バランス悪い。

仕事以外のプログラミング

ただ、仕事のプログラミングだけやってると、
破片になりやすいでしょう。
仕事のプログラミングは効率重視ですから、
破片で仕事ができるような仕組みを構築します。
それは会社としては当然のこと。

仕事で「まるごと作れ」と無茶ぶりされた人は、
幸せでしょう。そんな人はごく一部。

だから、自分で脱出しないと。

f:id:jflute:20160107190113j:image

ueshimanueshiman 2016/04/02 08:07 小規模な新規開発の現場に呼ばれることがあります。
リソースもないのに、PMや設計者ばかり。
なので、プログラマーは初心者ばかり。
お客は、完全エンドユーザーの現場担当者。
なので、プロトタイピングと称して、なし崩しで作り上げてしまいます。
コード書けるものが勝ち

jflutejflute 2016/04/03 00:22 ueshimanさん、こんばんは
逆境をチャンスにですね(^^。
コメントありがとうございます!

2016-03-16

成長するかしないかは選べる

|

できる人は...

  できる人になったことを選んだだけ。

できない人は...

  できない人になったことを選んだだけ。

...

実際に、多くの成長を見てきて、
本当にその通りだった。
単純に、選んだだけだった、選んでないだけだった。

行動のないアイディア

こちらの記事がとても印象的でした。
サクッと読めますので、ぜひ読んでみてください。

// いまだにアイデアに価値なんてあると思ってるの?
http://honz.jp/articles/-/42238

...
...
...
...
...

全く同じことを尊敬するCTOからも聞いてことがあります。

たぶん、自己実現でも全く同じ。

気付いたら年をとっていく

大抵の人は「できる人になりたい」と言って行動しない。
そして、成長するチャンスをどんどん逃して年とっていく。
気付いたら体力も気力もない。

もちろん、様々な都合でそうもいかない例外はあるだろうが、
進む道が選べる人は選んだだけだよ。多くの人が選べる。

能力はあんまり関係ない、
頭がいいとか悪いとかそんなに関係ない、

進む道を「真摯に」選んだだけ

大胆な行動はなに?

ただ、

効率の良い努力をする努力をした人が成功する

...

「こんな仕事したい」

「こんな自分になりたい」

そのために...
行動って何をすればいいんだろう?

…
…
…

いま思い付かないような大胆な行動

遠慮するのであれば、遠慮することを選んだだけ。

...

f:id:jflute:20160208164243j:image

2016-03-15

プログラマーになって、音楽は聴いてますか?

|

あんなにたくさん聴いてたのに、
社会人になった途端、全然時間がなくて
音楽からすっかり遠ざかっちゃうことも。

オフィスでBGM流れてればいいんですけど(^^

電車で音楽聴くか、本読もうか迷ったり。
聴きながら読めなくもないですが、
音楽に集中したいって気持ちもあって...
でも電車の中は本がゆっくり読める貴重な時間だし。

まあ、別に音楽だけの話じゃなくて、
学生時代はたくさん楽しんでいたもの、
働き始めたら一気に遠ざかりますよね。

パワーと勇気の源

jfluteにとっては、
音楽はかけがえのないものでした。
いまもリアルタイムでそうです。

何か苦しかったり、
落ち込んだり、
集中力を高めたり、
普通に楽しんだり。

常に音楽がそばにありました。

あんなにふさぎこんでたのに、
パワーをもらえるのです。

あんなにこわがっていたのに、
勇気をもらえるのです。

時代のBGM

聴いてる音楽がそのままその時期のBGMに。
だから、あとでその曲を聴くとそのときを思い出す。

「せつなーい」

ってのもあれば、

「たのしかったねー」

ってのも。

まあ、せつないのはつらいから、
なんとか上書きしようとするんですけどね笑。
でないとその曲、もう聴けなくなっちゃうから。

もうプログラマーになって、10年以上経ってますから、
10年の期間のそれぞれのBGMができあがってますね。
というか中学生や高校生のときから積み上がってるかな。

集中力サウンド

講演会勉強会新卒研修など、
まあ特に人前に立って大切なことをしゃべるとき、
集中力を高めるために、音楽を聴きます。

音楽を聴きながら会場入りします。
特に直前の曲を「集中力サウンド」と名付けて、
いつも「今回の集中力はこの曲にしよう!」
とか考えてます。

会場に入るタイミングで曲が終わらなかったら、
曲が終わるまで会場の周りをウロウロしてたり...

ここはもう、だいぶ偏ってますね。
集中力高める系サウンド!

o That's the Spirit! (安井さちこさん)
o The Entertainer (ビリージョエル)
o SHI WA ZU (赤木りえさん)
o リベルタンゴ (寺井尚子さん)
o All About Soul (ビリージョエル)
o などなど

もっともっとたくさんありますが、
こんな感じのよく聴いてます。
もしよければ聴いてみてください(^^。
jfluteがどんな気持ちで会場入りしてるのか、
イメージ湧くかなと笑。

そのときの内容とテンションに応じて選びます。

昨年の新卒研修は気合いを入れていました。
毎日朝、オフィスに入る前に、
その日の集中力サウンドを聴いていましたね。

今年も始まります。
毎日、曲を選ぶところから一日が始まります。

音楽で泣ける

実は、ぼくは音楽で泣いてしまいます。
(泣きそうになってしまいます)

ある意味、すごく単純で簡単な人です。
音楽で簡単に感動してしまいます。

まあさすがに異常な人かもしれませんね...。

でも、そのぶん、
常に音楽に支えられてます。
音楽で自分をコントロールしてるとも言えるかも!?

いまでも、常に音楽を求めています。

(でもさすがに、
自分で演奏する時間は取れなくなっちゃったなぁ...
KORG電子ピアノフルートもすっかり眠ったまま)

気持ちに直結するもの

音楽って言っても、たくさんジャンルあるし、
みんなが音楽好きとは限らないし、
別にそういうことはどうでもよくって...

みなさん、なにか、あります?
自分の気持ちに直結するもの。

プログラマーになって、
時間がなくなって削られていく中、
つらいこともたくさんある中、
でも大切にキープしていきたいですよね。

ぼくはプログラマーになり、
音楽とはすっかり無縁の世界で四苦八苦してますが、
音楽をそばに置いておきたいと。
そばにいないとなかなか前向けないから。

f:id:jflute:20160208155904j:image

2016-03-02

わけわかんないレビュー会こそスキルアップの場

|

特に若者、レビュー会のとき何をしていますか?

...

「いや、レビューしてますよぅ」

そうですか...

ホントに?

なんかメールチェックしてたりしませんか?
メール返してたりしませんか?
自分の仕事やってたりしてませんか?
Twitter見てたりしませんか?
まんが読んでたりしませんか?

...

いやべつにそれがダメだと言いたいのではありません。
そんな月並みのこと書いてもしょうがない。

ダラダラしたレビュー会であまりに退屈だから、
三国志60巻を会議室に持ち込んで読み切るとか、
したくなる気持ちわかります。
レビュー会はレビューワーが考える時間も必要だから、
なんだか間が空きがちですしね。シーン...って。

レビュー会を開催する方は、
そういう人が出てこないようにファシリテートしていく
必要がありますし、そのために色々と選択肢はありますが、
今日はそういうことを書きたいわけじゃないです。
(それはまた別途エントリ書いた方がいいかな)

...

レビュー会に参加しまーす。
でも、自分はレビューイーではないけれど、

「レビューできるほどスキルがない」

というか、

「レビューするための業務的・技術的な前提知識がない」

もーわけわかんない、でも、その場にいる。

...

というときに、どうしたらいいか?

他の人のコードが見れるチャンス

レビュー会は、他の人のコードが見れるチャンスです。
別に普段も見ようと思えば見れる環境かもしれませんが、
きっかけがなければなかなか見ないですよね。

だから

ソースコードリーディングやってる

と思えばいいのです。
わからなくてもとにかくインプット。
「あれはなんだろう?これはなんだろう?」
ひたすら思考を巡らしましょう。

説明されてるコードだけじゃなく、
画面に写っているコードは、
じゃんじゃん目に入れていきましょう。
その分、コードを追う力が付きます。

家に帰って一人でコード読んだりなかなかしないですよね?
(して欲しいけど)
であれば、レビュー会はスキルアップの大チャンスですよ。

他の業務を知るチャンス

大きなプロジェクトであればあるほど、
他の業務のことなかなか知ることができません。

「へー、こんな機能あるんだー、
こんなことやってるんだー」

エンジニアにとって、
業務を理解するって精神的になかなか
つらいものですよ。(多くの人が)
効率良く知っていければいい。

レビュー会は「業務理解の場」になります。
家に帰って一人で業務を理解しようとなかなかしないですよね?
(さすがにあんまりいないよね...)
であれば、レビュー会はスキルアップの大チャンスですよ。

発表の仕方、伝え方を知るチャンス

レビュー会は、講師がしゃべるわけじゃありません。
わりと自分と近い立場のレビューイーが発表します。
(レビュー会のやり方いろいろありますが...)

ある意味、上手・下手のギャップがすごく激しく出ます。
普段講演会だとか勉強会だと、
大抵は慣れている人が前に立ってしゃべりますが、
レビュー会はそうもいきません。

ギャップを見るチャンスですよ!

こう伝えると伝わりやすい、
逆にこうだと伝わりにくい、

レビューイーが次から次へと変わっていきますから、
比較もしやすい、自分とも当てはめやすい。

レビュー会は「観察できる貴重な場」です。
家に帰って一人でレビュー会をやろうとはなかなかしないですよね?
(絶対にいないでしょ)
であれば、レビュー会はスキルアップの大チャンスですよ。

どれだけ集中力だせる?

jfluteは、
多くの人のスキルアップ相談を受けていますが、
すべての人の Problem があります。

「時間がない」

です。

年齢を重ねれば重ねるほど、
人生のイベントも多くなり、
関わる人も多くなり、
どんどん時間は少なくなってきます。

いかに効率良く時間を使うか?

それがすべて。
短い時間でどれだけ多くのインプットするか?
以前のブログ「独学のきっかけ」でも書きましたね。

効率の良い努力をする努力した人が成功する

...

なかなか自分が役立てないレビュー会、
なんだか間延びして退屈なレビュー会、
ぼーっとしているよりかは内職してた方が...

と思いがちですが、

レビュー会でしかできないことがあります!

なので「インプットの場」という割り切りで、
最大の集中力を出してみてはいかがでしょう?

...

レビュー会自体がダラダラしてようが、
気にせず「自分が成長するんだ」と、
目をギラギラさせてインプットすればいい。
周りの人とは時間の進み方が違うと思って。

その繰り返しが、
本当にレビューワーとして役割を果たすことができる
スキルを身につけるのです。

f:id:jflute:20151221124705j:image