2013年07月13日

読みやすく効率的なコードの原則 Javaルールブック Vol.2

こんにちは、komeshogunです。

引き続き、メモメモ。
◯プログラミングルール/テクニック編

18) 可能な限りtoString()メソッドを実装する。

19) Cloneable#clone()を使わず、自前のコピーメソッドを利用する
フィールドに持つオブジェクトについては参照がコピーされるだけで中身はコピーされない。

20)キャスト処理はinstanceofで囲む 

21)breakやcontinueを不用意に使わない

22)繰り返し処理の内部でtryブロックを利用しない。

23)リソースを扱うAPIを利用するときはfinallyブロックで後処理をする

24)例外を再スローするときは、元の例外をスローする例外に入れる

25)catchブロックでは必ずログ出力だけでもいいので処理する

26)finallyから例外をthrowしない。

27)複数の値を返すのに、配列やMapを使用せず、専用のクラスを生成する。

◯ Eclipseショートカット

Ctrl+Shift+0:import文の整理
Ctrl+O:開いているクラスの変数とメソッドの一覧表示
Ctrl+Shift+R:Java以外のリソースファイルの探索


大谷 晋平,米林 正明,片山 暁雄,横田 健彦
技術評論社 2011-02-15
¥ 2,709
例外のコーディングについていつもこれでいいのか?とりあえずコピっとけ。
でやっていたのでいい勉強になりました。
メモっただけなので、つぎは深堀しよう。

ラベル:java コード
posted by @komeshogun at 18:12| Comment(0) | @komeshogun | このブログの読者になる | 更新情報をチェックする

読みやすく効率的なコードの原則 Javaルールブック Vol.1


こんにちは、komeshogunです。

今回は、図書館で気になった本を見つけて、ざっとメモしたものを紹介します。

Image.jpg

自己流コードからチームに嬉しいコードへと表紙に書かれています。
実際ほとんどコードについて何かを言われたことがありません。
今までほとんどコードレビューという機会がありませんでした。
まさに自己流でやってきたので、いい機会だと思い、本を読み進めました。
改めて、再認識するものもあれば、今まであやふやだったものに対する新たな気づきもありました。
ここに書かれていることが必ずしも正解だとは思いませんが、参考になりました。

◯ネーミングルール

1)オブジェクトを生成するメソッドは「create+オブジェクト名」とする

2)変換メソッド名は「to+変換先オブジェクト名」、または「convert+変換先オブジェクト名」とする。

3)booleanの戻り値を返すメソッド名は「is◯◯」「can◯◯」「has◯◯」で状態がわかるようにする。

4)スコープが狭い変数名はEclipseの「Ctrl+space」または「Ctrl+1」などで生成させる。


◯プログラミングルール/基礎編


5)プリミティブ型と参照型の違いを意識する。 ← 詳しく調べる。

Javaの参照型変数とセキュリティ (1/2):CodeZine
http://codezine.jp/article/detail/6704

【改訂版】Eclipseではじめるプログラミング(8):Javaの参照型を文字列操作で理解して文法を総復習 (1/3) - @IT
http://www.atmarkit.co.jp/ait/articles/0906/16/news106.html

6)return文ではカッコは使わない。

<悪い例>
return (a+b);

<良い例>
int c = a+b;
return c;

7)条件分岐では「!」を使わない。

8)不等号の向きは左向きにする。<,<=

9)フィールドは、pulbic、protected,デフォルト、privateの順に宣言する。

10)戻り値が配列やコレクションの場合はnull値を返さず、空の配列を返す。

11)staticメソッドは、クラス名を使って呼び出す。

<悪い例>
Sample object = new Sample();
object.sampleClassMethod();

<良い例>
Sample.sampleClassMethod();

12)配列宣言は型名[]にする

<悪い例>
private int SampleArray[];

<良い例>
private int[] SampleArray;

13)ローカル変数は利用する直前で宣言する。

14)プリミティブ型とStringの変換には用意された変換用のメソッド(valueOf、parseInt)を利用する

15)Date,Calendarの代わりにlongの利用を検討する。

16)出来るだけ拡張for文を使う

17)BigDecimalのフォーマットにはDecimalFormatかBigdecimal#toPlainStringを使う。

つぎはプログラミングルール/テクニック編。

タイムアップのため、続きはまた今度。

気になったところだけピックアップしているので、実際に読んでみて下さい。
ほかにも似たような本を知っている方は教えて下さい。
よろしくお願い致します。

ラベル:コード java
posted by @komeshogun at 12:34| Comment(0) | @komeshogun | このブログの読者になる | 更新情報をチェックする

2013年06月22日

デプロイ作業が面倒くさいからJenkins導入で解決できるか


テスト実施環境へのデプロイ作業がかなり面倒くさい。

前々から名前だけは聞いたことがあるJenkins導入で解決できるかを調べてみる。
聞いたら教えてもらえるかもしれないけど、ゼロベースで色々調べてみる。

調べながらメモしてその内容を書いとく。
※前回記事とはほぼ関係なしです。さまよってる感じが素敵ですね。

<目標>

・誰かがコミットしたらテスト環境へビルドされる
・更新はAPサーバー再起動しないと反映されないようにする
-ソースが更新されていることを明確に把握しておきたい。
-勝手に変わると困る(気がする)

エンタープライズ:特集:第1回 なぜWebLogic Serverが選ばれるのか (1/6)
http://www.itmedia.co.jp/enterprise/0307/02/epn26.html

<前提>

・テスト実施環境はWindowServer
・同環境にてSVNでソース管理している
・ソースはJava。ビルドしたいプロジェクトはバッチとウェブのとりあえず2つ。

<現状>

1.ローカルにSVNからソースを落としてきてEclipseでビルド
2.エクスポートしてWindowsServerへファイルコピー
3.APサーバーを再起動してデプロイ作業終了。

<Jenkins>

ソフトウェア開発向けに継続的インテグレーションサービスを提供しており、Apache TomcatなどのServletで動作しているサーバーベースシステムである。CVS、Subversion、Git、Mercurial、Perforce、Clearcaseといったバージョン管理システムツールに対応し、Apache AntやApache Mavenにおける任意のシェルスクリプトやWindowsバッチコマンドといったプロジェクトを実行することが出来る。
〜Wikiから抜粋〜

jenkins.jpg

Welcome to Jenkins CI! | Jenkins CI
http://jenkins-ci.org/


<調査>

1)そもそもビルドとは具体的にはどういうことなのか?

コンパイルしてから実行可能環境を構築することだと理解した。
ビルドって言葉の中にコンパイルが内包されるイメージですね。φ(..)メモ

先輩教えて!プログラミングのabc(第1回)---コンパイルとビルドって何が違うの(上):ITpro
http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20021008/1/

2)Jenkinsでやろうとしていることが出来るのか。

ざっと「Jenkins できること」でググって読み漁る。

Jenkinsではじめる継続的インテグレーション
http://www.slideshare.net/linoSth/jenkins-10666679

ユカイ、ツーカイ、カイハツ環境!(21):「Hudson」改め「Jenkins」で始めるCI(継続的インテグレーション)入門 (1/4) - @IT
http://www.atmarkit.co.jp/ait/articles/1104/07/news111.html

グリーはいかにしてJenkinsを導入したのか(1):継続的インテグレーションを始めるための基礎知識 (1/2) - @IT
http://www.atmarkit.co.jp/ait/articles/1302/13/news030.html

<現状を改善できるか>

<現状1>ローカルにSVNからソースを落としてきてExclipseでビルド

そもそも同じサーバー上にSVNとビルド先があるので出来ると思ってる。
ほんまか?と、具体的にはどうやって?の部分をググる。

JenkinsでSubversionからチェックアウトしたソースをビルドしてみる。 - 大人になったら肺呼吸
http://d.hatena.ne.jp/replication/20111127/1322389412

Visual Studioの話だったけどやりたいことは出来そうな感じ。
「Jenkins java ビルド」でググり直し。

Jenkinsを使ってビルド〜単体テストまで | Developers.IO
http://dev.classmethod.jp/etc/jenkins/

Antってやつを設定せなあかんみたい。
使ったことあるけど、ちゃんと正確に理解できてないからちょっと脱線。
やっぱりこういうのは自分で作らんと「なんとなく」から抜けだせんねえ。

第11回 Antの利用 | Think IT
http://thinkit.co.jp/free/tech/3/11/1.html

ビルドするためにbuild.xmlを作ってAntを利用する。
ビルドするためにAntが必要ってことか。
あとAntの利用メリットとして、「Eclipseが提供していない機能」と書いてある。φ(..)メモ
、、、けどイマイチよくわからんかった。
ちょっと脱線しすぎるから元に戻る。

SVNからソースを落とすのは、Jenkinsの設定で出来そうで、
チェックアウトしたソースをビルドするために、Antの設定をして
それをJenkinsに設定する。

こんな感じかな。イメージは出来た。

<現状2>エクスポートしてWindowsServerへファイルコピー

まぁこれはやらんでいいやろ。この無駄な時間がなくなる。
コピーが途中で切れたりするかもという不安もなくなるという、素敵☆

<現状3>APサーバーを再起動してデプロイ作業終了。

これは今までどおりコンソールの管理画面から手でやろう。

<深堀りすべき課題>

調べた中で当初考えてなかったこともなんか出来そうやなぁ。
深堀りを次にやろうかな。

<深堀り1>JUnitを絡める

JUnit、JUnitってどのページにも出て来たけど今までテスト自動化してるプロジェクトに関わってなかったから
よく分からんのよねえ。

Webアプリの常識をJSPとStrutsで身につける(10):JUnitとEclipseを使って学ぶ、“テスト”の常識 (2/4) - @IT
http://www.atmarkit.co.jp/ait/articles/0907/10/news110_2.html

Javaの道:Eclipse(11.JUnitの利用)
http://www.javaroad.jp/opensource/js_eclipse9.htm

<深堀り2>Antではなく、Mavenのほうがいいのか?

どう違うのかよくわからん。TracとRedmineの違いとかそんなレベルか?

Trac/Subversion/JUnit/Maven/Jenkinsで構築する開発スタイル
http://www.slideshare.net/shuji_w6e/tracsubversionjunitmavenjenkins

<深堀り3>プラグインで便利にできそう

プラグインがいろいろありそう。
ソースの変更を一覧で出力してくれるようなプラグインないかな。
今回のデプロイではこのソースが変わってるのかと一覧で確認したいなぁ。
Redmineと絡めて使えばRedmineのプラグインのほうであるかもしれへんなぁ。

Jenkins がもっともっと便利になるプラグイン 8 つ (フェンリル | デベロッパーズブログ)
http://blog.fenrir-inc.com/jp/2013/03/jenkins-2.html

<深堀り4>Windows7のクライアントPCでも試せるのか?

サーバーへのインストールで、サーバーがないとお試し出来ないのかなと思ってたけどそうでもないんかな。
やれるなら実際にちょっとやってみよう。SVNもRedmineもなにも入ってないけどね。

Windows7に、一人で使うためのJenkinsを入れてみた - メモ的な思考的な
http://d.hatena.ne.jp/thinkAmi/20121125/1353795880

<まとめ>

なんとなく調べだしたけど、「できそう」の確度があがった。
次は実際に手を動かして環境を作ってみる方向で調査しよう。
周りに詳しい人が沢山いるのでレビューしてもらおう。

ラベル:Jenkins JUnit redmine Ant
posted by @komeshogun at 15:53| Comment(0) | @komeshogun | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。