Scythe拡張 – 彼方よりの侵攻 開封レビュー

着弾

昨年発売の本体と同じく予約開始直後に瞬殺されたScythe日本語版の拡張が届いた。(決して大鎌戦役とは言わない)予約に際してまたしてもJoshinに助けられた。本当にありがとうJoshin。行ったことないけど。そして今Amazon見たら普通に売っているという…。

外観

外観はこんな感じ。大きさはパンデミックを縦に割った半分ほど。厚さはパンデミックの倍ほど。中身は追加の二勢力分のトークンなので、箱はそれほど大きくない。

開封

さっそく開けて中身を取り出してみる。

まずは緑のアルビオン氏族。

コナー&マックス!スカートのおっさんとイノシシ!…イノシシか?

続いて紫の戸川幕府。

彰子と次郎!AKIKOとJIRO!アキコて…。アキコからほとばしるコスプレ感。あと帯刀するのは腰の左側だと思うぞ。(クソリプ)

雑感

本体はまだ三回ほどしか遊べていないが、これでようやく全勢力が揃った。夢の7人プレイができる日は来るのか…。しかしやはりScytheのこまごましたコンポーネントは本当に素晴らしい。眺めているだけで多幸感に包まれる。積まないようにせねば。

『テスト駆動開発』第1部をC#で写経してみる(第2章)

第2章 明白な実装 (Degenerate Objects)

第1章に引き続き進めていく。

Dollarオブジェクトの times メソッドに以前とは異なる引数を渡し、期待値が得られるかを確認したい。現段階ではどう考えてもテストは失敗するのだが、失敗させるのが重要なのでテストを追加してみる。

namespace TddStudyTest
{
    [TestClass]
    public class MoneyTest
    {
        [TestMethod]
        public void TestMultiplication()
        {
            Dollar five = new Dollar(5);
            five.times(2);
            Assert.AreEqual(10, five.amount);
            five.times(3);
            Assert.AreEqual(15, five.amount);
        }
    }
}

テストを実行し、失敗することを確認後、即座にグリーンバーを目指すため、times メソッドに対して以下の修正を行う。

  • 戻り値をDollarクラスに変更
  • multiplieramout を掛け合わせて新しい金額のDollarオブジェクトを返す
namespace TddStudy.Money
{
    public class Dollar
    {
        public int amount;

        public Dollar(int amount)
        {
            this.amount = amount;
        }

        public Dollar times(int multiplier)
        {
            return new Dollar(this.amount * multiplier);
        }
    }
}

上記修正に伴いテストは以下のようになる。

namespace TddStudyTest
{
    [TestClass]
    public class MoneyTest
    {
        [TestMethod]
        public void TestMultiplication()
        {
            Dollar five = new Dollar(5);
            Dollar product = five.times(2);
            Assert.AreEqual(10, product.amount);
            product = five.times(3);
            Assert.AreEqual(15, product.amount);
        }
    }
}

これでグリーンバーが復活した。

雑感

第1章ではベタ書きの値を徐々に変数に置き換えていく仮実装を行ったが、今回はいきなり実装に入る明白な実装を行った。具体例から徐々に抽象度を上げていく仮実装の方がセーフティーということか。

しかしテストコードの修正から入るというのにはまだまだ慣れそうにない。

『テスト駆動開発』第1部をC#で写経してみる(第1章)

はじめに

和田卓人さん訳の『テスト駆動開発』を以前に読了していたが、ふと思い立ったので復習がてら第1部の内容をC#で写経してみることにした。第1部は債権ポートフォリオ管理システムを多国通貨対応させる、というシナリオで話が進む。なお、写経に際して前提条件や細かい説明は省くので、詳細は実際に『テスト駆動開発』を読んで確認してみてほしい。

また、第1部は全部で17章あるので、実際にコードを書きながらチマチマ進めていきたい。

写経環境

言語

いわずもがなC#

IDE

Visual Studio 2017 Professional

テスティングフレームワーク

MSTest v2

第1章 仮実装 (Multi-Currency Money)

いきなりテストコードを書いてみる。

namespace TddStudyTest
{
    [TestClass]
    public class MoneyTest
    {
        [TestMethod]
        public void TestMultiplication()
        {
            Dollar five = new Dollar(5);
            five.times(2);
            Assert.AreEqual(10, five.amount);
        }
    }
}

この時点ではコンパイルエラーが発生する。Dollarクラスなど存在しないので当然だ。

そこでDollarクラスを作成し、times メソッドと amount フィールドを追加する。

namespace TddStudy.Money
{
    public class Dollar
    {
        public int amount;

        public Dollar(int amount)
        {
        }

        public void times(int multiplier)
        {
        }
    }
}

コンパイルエラーは取れたが、この状態でテストを実行させるとエラーになるので、最小限の対応を行ってみる。

namespace TddStudy.Money
{
    public class Dollar
    {
        public int amount = 10;

        public Dollar(int amount)
        {
        }

        public void times(int multiplier)
        {
        }
    }
}

10を2と5に分解し、テストコードと値を重複させてみる。

namespace TddStudy.Money
{
    public class Dollar
    {
        public int amount;

        public Dollar(int amount)
        {
        }

        public void times(int multiplier)
        {
            this.amount = 5 * 2;
        }
    }
}

仕上げにコンストラクタ内で amout の代入を行い、 times メソッド内で amout フィールドを参照するようにする。

namespace TddStudy.Money
{
    public class Dollar
    {
        public int amount;

        public Dollar(int amount)
        {
            this.amount = amount;
        }

        public void times(int multiplier)
        {
            this.amount *= multiplier;
        }
    }
}

これで一旦テストがパスできる状態になった。めでたしめでたし…ではないので、第2章に続く。

雑感

テスト対象クラスが存在しない状態からテストコードを書くことが非常に新鮮な体験だった。
小刻みな修正を行って一歩ずつ歩みを進めつつ、テストをパスしてグリーンバーを眺める安心感は何物にも代えがたいが、仮初めのグリーンバーなことも多々ある点に要注意。

プログラマの数学 第2版 雑感

再読

エンジニア界隈で絶大な知名度を誇る結城浩さんの名著、『プログラマの数学』の第2版が2018年1月に出版された。第2版では書籍サイズも小さくなり、付録として機械学習についての章が追加された。プログラミングを始めて2年目くらいの時期に第1版を購入して読んだ経験はあるが、すっかり内容を忘れていたため、読み直した上での雑感をメモしてみる。

“プログラマの数学 第2版 雑感” の続きを読む

クランズオブカレドニア開封レビュー

着弾

今年購入を決めていたボドゲの一つ、クランズオブカレドニアが先日届いた。昨年のスカウトアクションで第1位ということもあり買えるか心配だったが、テンデイズゲームスさんで無事購入できた。

開封

シュリンクを破ってみる。大きさ、厚さともにパンデミックと同じくらいか。(分かりづらい)箱を開けて中身をだしてみる。小さなコマがたくさんあるので適当に並べてみる。思ったよりも小さかったが、それがさらにコマの可愛さを増長させている。

牛乳とパン可愛すぎなのでは。

お預け

ルールブックは読んだが、まだプレイはできていない。一つ一つのルールはそれほど複雑なではないが、選択肢が多くて迷いそう。何にせよ早くプレイしたい。