実践ドメイン駆動設計
実践ドメイン駆動設計 (Object Oriented SELECTION)
- 作者: ヴァーン・ヴァーノン,高木正弘
- 出版社/メーカー: 翔泳社
- 発売日: 2015/03/17
- メディア: 大型本
- この商品を含むブログ (4件) を見る
ドメイン駆動設計という言葉は知っていたものの、それが一体どういうモノであるのかまったく理解出来ていませんでした。今年の2月から環境が変わったこともあり、そろそろちゃんと勉強しないといけないなと思っていたところにTwitterでこの書籍が発売されることを知ったので迷わず購入してみました。
まだ触りくらいしか読んでいないのでなんとも言えないですが、実践と謳っているだけあって、ではどうすれば良いのか?という疑問に答えてくれるのではとワクワクしています。通勤途中に読めるような大きさじゃないじゃないのが残念ですが、家でじっくり読んでしっかり理解しろというお達しなのかもしれませんw
参考
- Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム…
- 44枚目のスライドに
エリック・エヴァンスのドメイン駆動設計
を読む前に読むべき書籍が掲載されています
- 44枚目のスライドに
- 入門!ドメイン駆動設計(今更かい!) - よしだのブログ
9月の映画
今月の映画リスト。同僚やお客さんのオススメ、予告編などを参考に、今までとは違った感じの映画を観るようになってきました。
- ゆれる(★★★☆☆)
- グラン・トリノ(★★★★★)
- ローンサバイバー(★★★★☆)
- 大統領の執事の涙(★★★☆☆)
- ウォールフラワー(★★★★☆)
- スティーブ・ジョブズ(★★★☆☆)
- ムービー43(★★☆☆☆)
- 大脱出(★★★☆☆)
- SAFE/セイフ(★★☆☆☆)
- ダラス・バイヤーズクラブ(★★★★☆)
- ラッシュ/プライドと友情(★★★☆☆)
- 謝罪の王様(★★☆☆☆)
- 舟を編む(★★★★☆)
- 300<スリーハンドレッド>(★★★☆☆)
- オーケストラ!(★★★★☆)
- アンコール!!(★★★★☆)
- ショーシャンクの空に(★★★★★)
8月の映画
今月観た映画リスト。夏休みがあったお陰で24本にもなりました。スゴイ今更ですが映画って楽しいですねw
- アドレナリン2 ハイ・ボルテージ(★★★☆☆)
- アドレナリン(★★★☆☆)
- エンド・オブ・ホワイトハウス(★★★★★)
- 菊次郎の夏(★★★★☆)
- トランスポーター3 アンリミテッド(★★★★★)
- トランスポーター2(★★★★★)
- トランスポーター(★★★★★)
- ホワイトハウス・ダウン(★★★★☆)
- 47 RONIN(★☆☆☆☆)
- RED/レッド(★☆☆☆☆)
- REDリターンズ(★☆☆☆☆)
- ローン・レンジャー(★★★☆☆)
- キック・アス(★★★★★)
- キック・アス ジャスティス・フォーエバー(★★★★★)
- スピード(★★★★☆)
- トータル フィアーズ(★★★★☆)
- 今そこにある危機(★★★★☆)
- パトリオット・ゲーム(★★★★☆)
- レッド・オクトーバーを追え!(★★★★★)
- エージェント:ライアン(★★★★☆)
- エクスペンダブルズ2(★★★★★)
- エクスペンダブルズ(★★★★★)
- ハリー・ポッターと死の秘宝 Part2(★★★☆☆)
- ハリー・ポッターと死の秘宝 Part1(★★★☆☆)
Gitの導入
職場で新しいPCが支給されたので、Gitの導入方法についてのメモを残しておきます。OSはWindows7です。
Git for Windows
以前はmsysgit
という名前でしたが、いつからかGit for Windows
という名前に変わったようです。
公式サイトから最新版をダウンロードします。今回はGit-1.9.4-preview20140611.exe
をダウンロードしました。
インストールでは特に変更する部分はありませんが、「Adjusting your PATH environment」 はRun Git from the Windows Command Prompt
を選択しました。これはWindowsのコマンドプロンプトなどからGitコマンドを使用できるようにするためです。
Console2
Windowsのコマンドプロンプトはとにかく使いづらいので、使いやすいものに置き換えます。
このままでは日本語入力ができないので、以下の日本語対応パッチをダウンロードしてConsole2.exe
を置き換えます。
ただし、パッチを当ててもdirコマンドなどを実行した際にズレることがあるので、その場合は
- View -> Console Window を選択
- コンソールウィンドウの
プロパティ
を選択 - プロパティダイアログの
フォント
を選択 - フォントで
MS ゴシック
を選択
以上で日本語が表示されてもズレないようになります。
Console2からGit Bashを使う
Console2はタブの切り替えで任意のシェルを使うことができるので、Git for Windows
もConsole2から呼び出せるように設定します。
Edit -> Settings... を選択
左ペインでTabsを選択
- 右ペインで
Add
ボタンをクリック - Title:
Git
, Shell:"C:\Program Files (x86)\Git\bin\sh.exe" --login -i
を入力 - Icon:
C:\Program Files (x86)\Git\etc\git.ico
を入力(Optional)
これでタブを開く際にGit
を選ぶとGitコマンドが使えるプロンプトが起動します。
他にもホットキーの設定やマウスの挙動設定、背景色の透過設定などもできるので色々とカスタマイズが捗りそうです。
参考にさせて頂いたページ
7月の映画
W杯からこっち、深夜にテレビを観るのが習慣になってしまったため、映画をレンタルしてます。7月に借りた映画のリストが以下。
有名なタイトルしか借りてないので概ね面白いですが、中にはとんでもなくつまらないモノがあったり。まぁこういうのは個人差が大きいのであまり参考にならないと思いますが一応。
- キル・ビル2(★★★☆☆)
- キル・ビル1(★★★★☆)
- るろうに剣心(★★★★★)
- 鴨川ホルモー(★★★★★)
- 聯合艦隊司令長官 山本五十六 -太平洋戦(★★★★☆)
- のぼうの城(★★★☆☆)
- ハリー・ポッターと謎のプリンス(★★★☆☆)
- ハリー・ポッターと不死鳥の騎士団(★★★★☆)
- ハリー・ポッターとアズカバンの囚人(★★★★☆)
- ハリー・ポッターと炎のゴブレット(★★★★☆)
- ハリー ポッターと秘密の部屋(★★★★☆)
- ハリー ポッターと賢者の石(★★★★☆)
上のリストはTUTAYA LOGから引っ張ってきました。
こういうの欲しいなぁと思ったものがだいたいあるっていうのは便利な世の中ですね。
自分が観た作品は毎月リストアップしていく予定です。
Groovyによる宣言的セットアップ
Groovyによる宣言的セットアップ
jUnit実践入門の第7章「テストフィクスチャ」で、フィクスチャ(テストデータ)のセットアップ方法が紹介されています。フィクスチャのセットアップにはインラインセットアップや暗黙的セットアップ、外部リソースからのセットアップなど色々な方法がありますが、個人的にGroovyによる宣言的セットアップというのが気になったので実際にやってみました。
Groovyプラグインのインストール
Groovy用のEclipseプラグインがあるので、まずはそれをインストールします。
Help->Install New Software...を選ぶとウィンドウが表示されるのでAddボタンをクリックして以下の内容を入力します。
Name | Location |
---|---|
Groovy Eclipse Plugin | http://dist.springsource.org/release/GRECLIPSE/e4.3/ |
インストールが終わっていつも通り再起動すると、コンテキストメニューのNewにGroovy関連が追加されます。試しにGroovy Classを作ってみるとJava Classと同様のウィザードが表示されるので、クラス名を「Hello」にしてFinishボタンをクリックするとHello.groovyが作成されます。
で、ここで一つ問題が。Groovyの書き方が分からない…w まぁそれは今回の主目的からは外れるので取り敢えず置いておくことにします。
セットアップを書いてみる
ユーザー情報を操作するDaoクラスのテストのセットアップをGroovyで書く、という仮想シナリオです。
まずはユーザー情報から。
public class User { private String userId; private String password; private String email; private Date birthDay; private Integer gender; /* * getter/setter省略。 */ }
次にこのユーザー情報を生成するセットアップ。これはGroovyです。
class UserDaoTestHelper { static User createUser_通常ユーザーの場合() { new User( userId: "m-namiki", password: "pass", email: "example@sample.com", birthDay: new Date("2014/01/01 00:00:00"), gender: 0 ) } }
で、最後にこれを使ったテストコードです。
public class UserDaoTest { @Test public void test() { User user = UserDaoTestHelper.createUser_通常ユーザーの場合(); assertThat(user.getUserId(), is("m-namiki")); assertThat(user.getPassword(), is("pass")); assertThat(user.getEmail(), is("example@sample.com")); assertThat(user.getBirthDay(), is(new DateTime(2014, 1, 1, 0, 0, 0).toDate())); assertThat(user.getGender(), is(0)); } }
セットアップの部分でどんなデータなのかを分かりやすく書けるので、なかなか使い勝手は良さそうです。ただGroovy側で色々頑張ろうとするとそれは本末転倒なことになってしまうのでそこら辺の線引きをきちんと決めておかないと混乱の元になりそうなので注意しないとダメですね。
自分がテストを書く場合だと最近はインラインセットアップが多いですが、以前SAStrutsを使ったときにDBに対するテストを行う際はExcelでデータを作成する、というやり方がチームの人にかなり好意的に受け入れられていましたし、自分でも分かりやすく感じました。ただこれもデータを参照するのに外部ファイルをイチイチ開かなきゃいけないのがちょっと手間で、できればテストコードから簡単に、かつ見易い状態で参照できるのが良いはずなので、Groovyによるセットアップをプロジェクトに導入してみて色々試していきたいと思います。
実際にやってみた
上記はだいぶ前に書いたのですが(3ヶ月前…)ずっと下書きに入っててアップするのを忘れてました。なので、現在担当しているプロジェクトで導入してみた顛末も追記しておきます。
フィクスチャ自体は上記の通りHelperクラスを作ってそこで作成するようにした結果、だいぶコード量が少なくなってテストコードも見通しがよくなりました。
ただMavenでビルドする際にプラグインの追加等をしておかないと、*.groovyがコンパイルされず、当然それを利用しているクラスもコンパイルエラーとなるので、pom.xmlの設定をメモしておきます。
まずはdependenciesに以下を追加。
<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>1.8.9</version> </dependency>
次にpluginsに以下を追加。
<plugin> <groupId>org.codehaus.gmaven</groupId> <artifactId>gmaven-plugin</artifactId> <version>1.4</version> <configuration> <providerSelection>1.8</providerSelection> <sourceEncoding>UTF-8</sourceEncoding> </configuration> <executions> <execution> <goals> <goal>generateTestStubs</goal> <goal>testCompile</goal> </goals> <configuration> <sources> <fileset> <directory>${pom.basedir}/src/test/java</directory> <includes> <include>**/*.groovy</include> </includes> </fileset> </sources> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>1.8.9</version> </dependency> </dependencies> </plugin>
これで、例えば mvn test
等を実行した際にGroovyが使えるようになります。
日本語文字化け問題
上記のplugin -> configuration -> sourceEncoding で文字コードを指定していますが、実はこれは効きません。gmavenのJIRAを見ても解決済みとなっていますが、実行すると.groovyに日本語が含まれている場合はコンパイルエラーとなってしまいます。
回避策としては、Windowsの場合、以下のように環境変数を設定してやると上手くいきますが、なんとも釈然としないですね...。
set MAVEN_OPTS="-Dgroovy.source.encoding=UTF-8"
参考にさせて頂いたページ
Team Geek
Team Geek ―Googleのギークたちはいかにしてチームを作るのか
- 作者: Brian W. Fitzpatrick,Ben Collins-Sussman,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/07/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (18件) を見る
正直もっと早く読めば良かったと思える本です。例えばこちらのブログ、小野和俊のブログ:HRTの原則 〜ソフトウェア開発はバーでしっとり語り合うように 〜にも書かれていますが、言っていることが正しくとも言い方一つで人間関係は大きく変化してしまいます。(悪い方への変化は特に簡単です) そこでお互いが謙虚に、相手を尊敬・信頼して接するようになれば、少なくとも悪い方向には進まないんじゃないかと思います。
かくいう自分もHRTを欠いた振る舞いのせいでチームの人との人間関係を悪化させてしまったことがありますし(これは今でも後悔してます)、逆に本書の言うところの「悪いマネージャー」に遭遇してストレスで身体を壊してしまったこともあります。
コンピュータを扱う仕事とはいえ、最後は人対人であることを肝に銘じて、今後はチームを良い方向に進められていければなと思います。