環境構築から始めるプログラミング入門の準備 ~健全なプログラミングは健全な環境に宿る~

はじめに

構成

まず、二つのメタファー(例え) で押さえておきたい概念と進め方を例え話を用いて解説します。

次に本記事の主題である 健全なプログラミングは健全な環境に宿る ことについて解説します。

環境の準備ができたら 健全なプログラミング が目指す 動作するきれいなコードで書かれた変更を楽で安全にできる十分によいソフトウェア について解説します。

最後に 十分によいソフトウェア へ向けた 熟練に向けた旅の始まり で発展的トピックについて解説します。

なお、本記事では引用を多用していますが興味のある人はいますぐでなくていいのでぜひとも原典を読んでみてください。

Read more
環境構築から始めるテスト駆動開発 ~.NET開発環境を構築する~

はじめに

これは 環境構築から始めるテスト駆動開発 ~ プログラミング環境の共通基盤を構築する ~ の開発言語セットアップ記事です。Windows 10 Home で共通基盤が構築されていることを前提としています。

Read more
環境構築から始めるテスト駆動開発 ~Java開発環境を構築する~

はじめに

これは 環境構築から始めるテスト駆動開発 ~ プログラミング環境の共通基盤を構築する ~ の開発言語セットアップ記事です。Windows 10 Home で共通基盤が構築されていることを前提としています。

Read more
環境構築から始めるテスト駆動開発 ~Python開発環境を構築する~

はじめに

これは 環境構築から始めるテスト駆動開発 ~ プログラミング環境の共通基盤を構築する ~ の開発言語セットアップ記事です。Windows 10 Home で共通基盤が構築されていることを前提としています。

Read more
環境構築から始めるテスト駆動開発 ~JavaScript開発環境を構築する~

はじめに

これは 環境構築から始めるテスト駆動開発 ~ プログラミング環境の共通基盤を構築する ~ の開発言語セットアップ記事です。Windows 10 Home で共通基盤が構築されていることを前提としています。

Read more
テスト駆動開発から始めるドメイン駆動設計入門 ~ドメインサービス~

初めに

この記事は書籍『ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本』で解説されているドメイン駆動設計パターンをテスト駆動開発で実装したものです。

言語は Ruby です。Ruby でのテスト駆動開発の詳細に関してはこちらの記事をご参照ください。Gitpodからブラウザ開発環境が利用できるのでお手軽に開発を始めることが出来ます。

Read more
テスト駆動開発から始めるドメイン駆動設計入門 ~エンティティ~

初めに

この記事は書籍『ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本』で解説されているドメイン駆動設計パターンをテスト駆動開発で実装したものです。

言語は Ruby です。Ruby でのテスト駆動開発の詳細に関してはこちらの記事をご参照ください。Gitpodからブラウザ開発環境が利用できるのでお手軽に開発を始めることが出来ます。

Read more
テスト駆動開発から始めるドメイン駆動設計入門 ~値オブジェクト~

初めに

この記事は書籍『ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本』で解説されているドメイン駆動設計パターンをテスト駆動開発で実装したものです。

言語は Ruby です。Ruby でのテスト駆動開発の詳細に関してはこちらの記事をご参照ください。Gitpodからブラウザ開発環境が利用できるのでお手軽に開発を始めることが出来ます。

Read more
テスト駆動開発から始めるRuby入門 ~6時間でオブジェクト指向のエッセンスを体験する~

Open in Gitpod

初めに

この記事は テスト駆動開発から始める Ruby 入門 -2 時間で TDD とリファクタリングのエッセンスを体験する- の続編です。

前提として エピソード1を完了して、テスト駆動開発から始める Ruby 入門 -ソフトウェア開発の三種の神器を準備する- で開発環境を構築したところから始まります。 別途、セットアップ済み環境 を用意していますのでこちらからだとすぐに始めることが出来ます。

本記事は一応オブジェクト指向プログラム入門者向けとなっていますが、入門者の方は用語についてはわからなくても結構です、コードを繰り返し写経することで感覚を掴んでもらえば自ずと書いてあることはわかるようになってきますので。あと、概要はオブジェクト指向プログラム経験者に向けて書いたのものなので読み飛ばしてもらって結構です(ネタバレ内容です)、経験者の方からのツッコミお待ちしております。

概要

本記事では、 オブジェクト指向プログラム から オブジェクト指向設計 そして モジュール分割テスト駆動開発 を通じて実践していきます。

オブジェクト指向プログラム

エピソード 1 で作成したプログラムの追加仕様を テスト駆動開発 で実装します。 次に 手続き型コード との比較から オブジェクト指向プログラム を構成する カプセル化 ポリモフィズム 継承 という概念をコードベースの リファクタリング を通じて解説します。

具体的には フィールドのカプセル から setter の削除 を適用することにより カプセル化 を実現します。続いて、 ポリモーフィズムによる条件記述の置き換え から State/Strategy によるタイプコードの置き換え を適用することにより ポリモーフィズム の効果を体験します。そして、 スーパークラスの抽出 から メソッド名の変更 メソッドの移動 の適用を通して 継承 の使い方を体験します。さらに 値オブジェクトファーストクラス というオブジェクト指向プログラミングに必要なツールの使い方も学習します。

オブジェクト指向設計

次に設計の観点から 単一責任の原則 に違反している FizzBuzz クラスを デザインパターン の 1 つである Command パターン を使ったリファクタリングである メソッドオブジェクトによるメソッドの置き換え を適用してクラスの責務を分割します。オブジェクト指向設計のイデオムである デザインパターン として Command パターン 以外に Value Object パターン Factory Method パターン Strategy パターンリファクタリング を適用する過程ですでに実現していたことを説明します。そして、オープン・クローズドの原則 を満たすコードに リファクタリング されたことで既存のコードを変更することなく振る舞いを変更できるようになることを解説します。

加えて、正常系の設計を改善した後 アサーションの導入 例外によるエラーコードの置き換え といった例外系の リファクタリング を適用します。最後に ポリモーフィズム の応用として 特殊ケースの導入 の適用による Null Object パターン を使った オープン・クローズドの原則 に従った安全なコードの追加方法を解説します。

モジュールの分割

仕上げは、モノリシック なファイルから個別のクラスモジュールへの分割を ドメインオブジェクト の抽出を通して ドメインモデル へと整理することにより モジュール分割 を実現することを体験してもらいます。最後に 良いコード良い設計 について考えます。

Before

diag-c63943e73aed75ba31adf85779eaf481.png

After

diag-84a49e2f281dfc169055d0bfc4b4aeb6.png

Read more
テスト駆動開発から始めるRuby入門 ~アルゴリズムのパフォーマンスチューニングとベンチマークを実践する~

Open in Gitpod

初めに

この記事は テスト駆動開発から始める Ruby 入門 -2 時間で TDD とリファクタリングのエッセンスを体験する- の外伝エピソードです。ちなみに前半の元ネタは テスト駆動開発付録 B フィボナッチを Ruby で実装したものです。後半はオリジナルエピソードでは言及できなかったアルゴリズムの プロファイリングベンチマーク の実施に関して解説しています。

前提として、テスト駆動開発から始める Ruby 入門 -ソフトウェア開発の三種の神器を準備する- で開発環境を構築したところから始まります。別途、セットアップ済み環境 を用意していますのでこちらからだとすぐに始めることが出来ます。

前半の用語の詳細については エピソード 1 で解説しています。後半の用語の詳細については エピソード 3 で解説していますので興味があれば御一読ください。

Read more