エンジニアとして継続したい3つのこと

777ブログウェイ「つくるための三種の神器」というテーマで、
本日はカヤック京都支社の技術部アルバイトで働いている高江洲(たかえす)がご紹介します。

エンジニアとして働く上で、大切だなぁと思う以下3つのことについて自分が利用している(利用し始めた、今後も継続したい)ことを3つ取り上げてみたいと思います。

1. 情報収集
2. タスク管理
3. テスト駆動開発

1.情報収集

情報収集手段といえば、はてブの人気エントリーやヤフーのトップニュース、RSSリーダーなど様々な手段がありますが、最近はもっぱらGunosy(グノシー)を使っています。

Gunosy.png

TwitterやFaceBookでログインすると、興味のある分野についてのおすすめ記事のまとめを1日1回メールで受け取る事ができます。大手のニュースサイトから個人のブログまでの幅広く、僕は朝の通勤中にひと通り目を通す感じで使っています。
使い始めて2ヶ月くらいですが、自分の中でホットな記事が結構な頻度で届き、とても精度がいいと実感しています。
登録してメールを見るだけの手軽さなので、おすすめで、継続もしやすいです。

2.タスク管理

タスク管理って大変ですよね。
やろうと思っていたことも数時間経つとなんだっけなぁーと忘れることが結構あります。。
本当に今すぐやる小さなことはノートにメモして終わったらチェックするなど管理することはできます。
しかし、すこし粒度が大きかったり、一度に複数のタスクを登録したいと思ったときはやはりツールを使うのが便利だと思います。

そこで最近は Trello という**無料のWebサービス**を利用しています。
アジャイルのカンバンのようなインターフェースで、カードにタスクを書くというスタイルです。
アナログで言うと、付箋にタスクをかいてボードに貼り付けるというイメージです。
表示はすべて英語ですが、日本語も問題無く入力できます。ドラッグアンドドロップでカードを移動することもでき直感的で使いやすいインターフェースだと思います。
また、レスポンシブデザインにも対応していて携帯端末で見ても違和感なく使用できます!

Trello-1-1.jpg

※左(PC)  右(Mobile)

僕は仕事での細かい粒度のタスクや、個人的にやりたいことなどを管理する用途で使っていますが、
コラボレーション機能(担当割当て機能、ファイル共有機能、チェックリスト機能、投票機能)が充実しているのでチームでのタスク管理にも向いていると思います。

次の記事もとても参考になります♪
オフィスのホワイトボードを止めて「Trello」を使うべき理由

3.テスト駆動開発

システムを開発する上でテストはとても重要なことだと最近になって悟り始めました。
テストと一口に言っても、単体テストから機能テスト、結合テストなど様々な分野がありますが、テスト意識してシステムをつくることがユーザ目線でつくるということに繋がるのではないかと思います。

先日参加した TDD Boot Camp Osaka でも、
単体テストを書いて実行することが、そのプログラムを初めて使うユーザである
ということを話されていました。
「テストについて考える ≒ ユーザ目線で考える」 ということなのかと思います。

最近よんだ関連する書籍3冊です。テストケースを考える参考になると思います。

マインドマップから始めるソフトウェアテスト
はじめて学ぶソフトウェアのテスト技法
レガシーコード改善ガイド

Groovy(Spock)によるBDDを試してみた

そこで前から気になっていたGroovy(Spock)を使ってBDDを試してみました。
GroovyはJavaのJVM上で動く言語で、SpockはGroovyで実装されたBDDのフレームワークです。
BDDとはBehavior Driven Developmentの略で振る舞い駆動開発と略されます。期待する振る舞いを定義し、テストコードそのものが仕様書の役割をはたすものです。
少しその動作環境をご紹介します。

Groovy(Spock)の環境構築

前提としてJavaの動作環境とIDEの設定(EclipseであればGroovy Eclipse Pluginなど)は済ませていること。 今回は最強のIDEを試して勉強してみようということでIntellij IDEAで書いてみました。

・Groovyのインストール(Mac , homebrew環境)

% brew install groovy

・Spockのインストール
Mavenを利用した方法、Grapeを利用した方法といくつもありますが、今回はここからJarファイルをダウンロードしてビルドパスに追加する形でインストールしました。

簡単な簡易文字コード処理を書いてみました。

1を入力したら「ONE」を出力、2を入力したら「TWO」を出力するというような、ちょー簡易的な文字コード処理みたいなものを書いてみました。
プロダクトコードはJavaで書き、テストコードはGroovy(Spock)で書いてみました。Javaとも何も問題なく連携できるのがいいですね。

プロダクトコード(Java)

public class CharacterCode {

    private HashMap charMap = new HashMap();

    //文字コードマップの初期化
    public CharacterCode() {
        charMap.put(1, "ONE");
        charMap.put(2, "TWO");
        charMap.put(3, "THREE");
        charMap.put(4, "FOUR");
        charMap.put(5, "FIVE");
    }

    //数値に対応する文字を返す
    public String getCharacter(int num) {
        if(!charMap.containsKey(num)) {
            throw new IllegalArgumentException("引数が不正です");
        }
        return charMap.get(num);
    }
}

テストコード(Groovy Spock)

class CharacterCodeTest extends Specification {

    CharacterCode cc = new CharacterCode()

    def "数字を入力して対応した文字を返す"() {
        expect:
        cc.getCharacter(NUM) == CHARACTER

        where:
        NUM     | CHARACTER
        1       | "ONE"
        2       | "TWO"
        3       | "THREE"
        4       | "FOUR"
        5       | "FIVE"
    }

    def "対応した数値以外(1~5以外)の場合は例外"() {
        when:
        cc.getCharacter(NUM)

        then:
        thrown(IllegalArgumentException)

        where:
        NUM << [0, -1, 6, 100]
    }
}

コードの見た目がとてもいいですよね!?
インプットとアウトプットがすっきり定義されていて、見ただけでどういった動作になるのかがわかると思います。
BDDでのシナリオを書くためのキーワード「when, then, where, expect」を使うことでなんとなく仕様書のように感じませんか。
まだ試してはいませんが、Android開発でもAndroidSDKがGroovyで使えれば、テストコードはGroovyということで使えるかもしれません。
テストコードは今まで殆ど書いたことがないのですが、これからは継続していきたいと思います。

今回書いたコードはGithub(Groovy-Practice)に公開しています。

最後に

この記事は面白法人カヤックの七夕のイベント「777」に向けたリレーブログです。 技術系のアドベントカレンダー(*)になぞり、777イベントが開催される7月7日までの期間に、4つの職能ブログ ( エンジニアデザイナーフロントエンドエンジニアディレクター ) を横断し、更新します。 テーマは「つくるための三種の神器」。 カヤック有志による、それぞれの切り口で記事を投稿していきます。

アドベントカレンダーについての記事 「師走を楽しもう。技術系アドベントカレンダーの魅力とは

引き続き、明日以降もよろしくお願いします。