9月の映画

今月の映画リスト。同僚やお客さんのオススメ、予告編などを参考に、今までとは違った感じの映画を観るようになってきました。

8月の映画

今月観た映画リスト。夏休みがあったお陰で24本にもなりました。スゴイ今更ですが映画って楽しいですねw

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月に借りた映画のリストが以下。

有名なタイトルしか借りてないので概ね面白いですが、中にはとんでもなくつまらないモノがあったり。まぁこういうのは個人差が大きいのであまり参考にならないと思いますが一応。

上のリストは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のギークたちはいかにしてチームを作るのか

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

タイトルは聞いたことありましたが、あんまりピンと来なかったのでスルーしていました。が、QiitaやKobitoを作る開発チームの文化 - Qiita Blogでお勧めされていたので買ってみました。

正直もっと早く読めば良かったと思える本です。例えばこちらのブログ、小野和俊のブログ:HRTの原則 〜ソフトウェア開発はバーでしっとり語り合うように 〜にも書かれていますが、言っていることが正しくとも言い方一つで人間関係は大きく変化してしまいます。(悪い方への変化は特に簡単です) そこでお互いが謙虚に、相手を尊敬・信頼して接するようになれば、少なくとも悪い方向には進まないんじゃないかと思います。

かくいう自分もHRTを欠いた振る舞いのせいでチームの人との人間関係を悪化させてしまったことがありますし(これは今でも後悔してます)、逆に本書の言うところの「悪いマネージャー」に遭遇してストレスで身体を壊してしまったこともあります。

コンピュータを扱う仕事とはいえ、最後は人対人であることを肝に銘じて、今後はチームを良い方向に進められていければなと思います。

jUnit実践入門

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)を読み終わったので、引き続きjUnit実践入門を読み始めます。もうすぐ次のプロジェクトが始まるのでそこではTDDを導入していければと思ってます。今でもテストは書いてますが、先にテストを書くというのが徹底できていないので。

チーム開発実践入門を読んでみて

本に書かれている「こうあるべき」という部分といまのプロジェクトを比較しながら読んでみると色々足りてない部分が明確になったので、次のプロジェクトではなるべく取り入れていきたいと思います。今の現場で、書かれているツール等を導入するのはそんなにハードルは高くないはず、というか多分他のチームで導入しているものがあるはずなので、そこは上手く情報を共有して貰いながらやっていければ良いかなと思います。

で、Twitterでも呟きましたが、DBマイグレーションの部分があんまりよく理解できていないです。そもそもどういう動きをするのかとか、嬉しい部分は何なのかとかがイマイチ分かっていないので、ここはもうちょっと周辺情報を漁ってみたいと思います。