縣 俊貴 著
『[増補改訂]良いコードを書く技術 ── 読みやすく保守しやすいプログラミング作法』
(WEB+DB PRESS plus シリーズ)
技術評論社、2021年
-
WEB+DB PRESS plusシリーズ
https://wdpress.gihyo.jp/plus
このサンプルコードは増補改訂第2刷のものです。 過去のサンプルコードは以下にあります。
増補改訂第1刷 https://github.com/agata/goodcode/tree/v2
初版 https://github.com/agata/goodcode/tree/v1
サンプルコードはパブリックドメインですので、仕事や趣味のプログラムに自由にご利用ください。
サンプルコードの実行にはJava 15が必要です。 AdoptOpenJDK のページよりJava 15 JDKをダウンロードしてインストールしてください。
インストール後、以下のコマンドでJavaのバージョンが15と表示されればインストール成功です。
$ java --version第7章のサンプルコードの実行のみnodeの環境が必要です。 https://nodejs.org/ja/download/ よりnodeのバージョン14系をダウンロードしてインストールしてください。
インストール後、以下のコマンドでnodeのバージョンが表示されればインストール成功です。
$ node -vサンプルコードは、次のディレクトリごとに、Gradleのプロジェクトとして格納されています。 Gradleの実行ファイルは各ディレクトリに配置されているためインストールは不要です。
goodcode05第5章 コードの分割goodcode06第6章 コードの集約goodcode07第7章 データ構造goodcode08第8章 パフォーマンスgoodcode09第9章 ユニットテストgoodcode10第10章 抽象化goodcode11第11章 メタプログラミングgoodcode12-step1第12章 フレームワークを作ろう ステップ1goodcode12-step2第12章 フレームワークを作ろう ステップ2goodcode12-step3第12章 フレームワークを作ろう ステップ3goodcode12-step4第12章 フレームワークを作ろう ステップ4goodcode12-packaging-framework第12章 フレームワークを作ろう ステップ5 フレームワークgoodcode12-packaging-application第12章 フレームワークを作ろう ステップ5 アプリケーションgoodcode12-refrect-api第12章 Column:JavaのリフレクションAPI
各プロジェクトの構成はGradleの標準ディレクトリ構成に従っています。 基本的に次のディレクトリにそれぞれのファイルが配置されています。
srcmainjavaメインのソースファイルresourcesメインのリソースファイルwebappWebアプリケーションのリソース(JSP、CSS、JavaScript、web.xmlなど)
testjavaテストのJavaソースファイルresourcesテストのリソースファイル
build.gradleGradleの設定ファイル
コマンドプロンプト(Windows)かターミナル(Linux/Mac OS X)で goodcode05 ディレクトリに移動し、次のコマンドを実行します。
$ ./gradlew bootRunhttp://localhost:8080/ にブラウザでアクセスします。
本章のコードは説明用のサンプルです。動作させることはできません。
コマンドプロンプト(Windows)かターミナル(Linux/Mac OS X)で goodcode07 ディレクトリに移動し、次のコマンドを実行します。
ステップ1 データベースのデータ構造をそのまま利用する
$ npm run step1ステップ3 最適なデータ構造に変換して利用する
$ npm run step3コマンドプロンプト(Windows)かターミナル(Linux/Mac OS X)で goodcode08 ディレクトリに移動し、次のコマンドを実行します。
リスト8.1 国別の出現数をカウントするコード(breakなし)の実行
$ ./gradlew countryリスト8.1 国別の出現数をカウントするコード(breakあり)の実行
$ ./gradlew countryAfterリスト8.2 ArrayListとLinkedListの実行
$ ./gradlew listコマンドプロンプト(Windows)かターミナル(Linux/Mac OS X)で goodcode09 ディレクトリに移動し、次のコマンドを実行します。
ユニットテストを使わないテストコードの実行
$ ./gradlew calcユニットテストを使ったテストコードの実行
$ ./gradlew test --tests goodcode.calc.CalcTestお題 Webアプリケーションのセキュリティテストのテストコードの実行
$ ./gradlew test --tests goodcode.controllers.TodoControllerTestお題 Webアプリケーションのセキュリティテストのアプリケーションの実行
$ ./gradlew bootRunその後、 http://localhost:8080/ にブラウザでアクセスします。
考察 テストしにくい部分はどうする? モックオブジェクト
$ ./gradlew test --tests goodcode.controllers.TimelineControllerTestコマンドプロンプト(Windows)かターミナル(Linux/Mac OS X)で goodcode10 ディレクトリに移動し、次のコマンドを実行します。
$ ./gradlew bootRunhttp://localhost:8080/ にブラウザでアクセスします。
コマンドプロンプト(Windows)かターミナル(Linux/Mac OS X)で goodcode11 ディレクトリに移動し、次のコマンドを実行します。
ステップ1 ベタなコードで書いてみる
$ ./gradlew step1ステップ2 メタデータを内部DSLに移動する
$ ./gradlew step2ステップ3 変換ルールに対応する
$ ./gradlew step3考察 DSLの構文を改善するには?もっとDSLっぽくする
$ ./gradlew advancedコマンドプロンプト(Windows)かターミナル(Linux/Mac OS X)で goodcode12-step1 〜 goodcode12-step4 ディレクトリに移動し、次のコマンドを実行します。
$ ./gradlew appRunhttp://localhost:8080/goodcode12/ にブラウザでアクセスします。
コマンドプロンプト(Windows)かターミナル(Linux/Mac OS X)で goodcode12-packaging-framework ディレクトリに移動し、次のコマンドを実行します。
$ ./gradlew clean jarbuid/libs/goodcode12-0.0.1-SNAPSHOT.jar にJARファイルが生成されます。
JARファイルが生成できたら、次のようにアプリケーションコードのgoodcode12-packaging-applicationディレクトリに移動して実行します。
アプリケーションコード側のbuild.gradleには、先ほど生成したJARファイルに対して依存が追加されています。
$ cd ../goodcode12-packaging-application/
$ ./gradlew appRunhttp://localhost:8080/goodcode12/ にブラウザでアクセスします。
コマンドプロンプト(Windows)かターミナル(Linux/Mac OS X)で goodcode12-refrect-api ディレクトリに移動し、次のコマンドを実行します。
$ ./gradlew refrect