縣 俊貴 著
『[増補改訂]良いコードを書く技術 ── 読みやすく保守しやすいプログラミング作法』
(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の標準ディレクトリ構成に従っています。 基本的に次のディレクトリにそれぞれのファイルが配置されています。
src
main
java
メインのソースファイルresources
メインのリソースファイルwebapp
Webアプリケーションのリソース(JSP、CSS、JavaScript、web.xmlなど)
test
java
テストのJavaソースファイルresources
テストのリソースファイル
build.gradle
Gradleの設定ファイル
コマンドプロンプト(Windows)かターミナル(Linux/Mac OS X)で goodcode05
ディレクトリに移動し、次のコマンドを実行します。
$ ./gradlew bootRun
http://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 bootRun
http://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 appRun
http://localhost:8080/goodcode12/ にブラウザでアクセスします。
コマンドプロンプト(Windows)かターミナル(Linux/Mac OS X)で goodcode12-packaging-framework
ディレクトリに移動し、次のコマンドを実行します。
$ ./gradlew clean jar
buid/libs/goodcode12-0.0.1-SNAPSHOT.jar
にJARファイルが生成されます。
JARファイルが生成できたら、次のようにアプリケーションコードのgoodcode12-packaging-application
ディレクトリに移動して実行します。
アプリケーションコード側のbuild.gradle
には、先ほど生成したJARファイルに対して依存が追加されています。
$ cd ../goodcode12-packaging-application/
$ ./gradlew appRun
http://localhost:8080/goodcode12/ にブラウザでアクセスします。
コマンドプロンプト(Windows)かターミナル(Linux/Mac OS X)で goodcode12-refrect-api
ディレクトリに移動し、次のコマンドを実行します。
$ ./gradlew refrect