【10/5 更新】技術書典5にサークルとして参加します。

技術書典5にサークルとして参加することになったので、
書籍の詳細についてまとめました。

techbookfest.org

[追記] BOOTHから購入できるようにしました。
pospome.hatenablog.com


書籍のざっくり情報は以下です。

  • 書籍の目次はこちら
  • サーバサイドのアプリケーションアーキテクチャに関する書籍
  • ページ数は155ページ
  • PDF版のみ
  • 価格は1冊1000円
  • 購入していただけるとその場でQRコードが印刷されている紙を渡すので、そこからPDFをDLしてください。
  • サンプルコードはGo言語ですが、サーバサイドのアプリケーションアーキテクチャがメインなのでサーバサイドのアプリケーションエンジニアであればGo言語に関わらず役に立つはず
  • かんたん後払いには対応していません

当日まで可能な限り内容を精査するので、内容が一部変更されるかもしれません。
当日は見本誌を用意するので、実際に内容を確認してから購入してください。
詳しくは以下です。

概要

サーバサイドのアプリケーションアーキテクチャに関する書籍です。
サンプルコードはGo言語ですが、
アプリケーションアーキテクチャに関する内容がメインなので、
普段はGo言語以外の言語を利用している方も理解できると思います。
Go言語に特化した章も存在します。

かんたん後払い未対応

後払いの存在を忘れていて申請するのを忘れてしまいました・・・。
すみません・・・。

単なるポエム

普段自分が考えていることをアウトプットしたので、正しいとは限りません。
そもそもアプリケーションアーキテクチャは数値や実際の動作で正しさを保証しづらいものなので、
単なるポエムでしかないです。

参考にした書籍が2,3冊あるくらいでしょうか・・・。
ネットでもいろいろと調べようとしたのですが、
今回の書籍で扱う内容がネットに載っていない掘り下げたものであったり、
ネットだと言ってることが皆違うので参考にならなかったりしたので、
すぐに諦めて自分の考えをアウトプットするだけにしました。

そのため正しさを保証することはできません。
間違ってたらごめんなさい。

技術書典5以外での販売について

技術書典以外での販売は考えていません。
というのも、どの程度需要があるか分からないからです。
需要がないのに販売しても意味ないので、
技術書典5が終わっても需要ありそうだなと思ったら技術書典以外での販売を検討しようかと思っています。

書籍の内容をブログで公開することもありません。

勉強会などの登壇資料として書籍の内容を取り上げるかもしれませんが、
登壇資料としてまとめられるボリュームでもないので、
取り上げるとしても一部の内容のみになると思います。

PDF版のみ

以下の理由により物理本は用意していません。

  • サークル初参加なので、どのくらい用意すればよいのかが分からなかった。
  • スケジュールを守れなさそうだった。
  • 準備するのが面倒だった。

QRコードからのDL

購入していただけるとその場でPDFファイルへのQRコードが印刷されている紙を渡すので、そこからDLしてください。
本当はそれっぽいカードみたいなのを作ろうと思ったのですが、
執筆に追われ、そんなことしている余裕がなかったので紙になりました。
紙でもカードでもDLできるという点は一緒なので問題はなさそうだと思っています。

読むと頭が疲れる

実装パターンの書籍なので読むと頭が疲れます。
ポエムということもあり、わけわからんと思うかもしれません。
自分が普段書くブログくらいのクオリティです。

擬似コード

サンプルコードはGo言語ですが擬似コードです。
一部の実装を省略していたりします。
以下が実際に書籍に載せているコードです。

type UserRepository interface {
	InsertUser(user *User) error
}

type userRepository struct {
	conn *memcache.Conn
}

func NewUserRepository(conn *memcache.Conn) UserRepository {
	return &userRepository{
		conn: conn,
	}
}

func (u *userRepository) InsertUser(user *User) error { 
        //省略
        //memcache へ User を永続化する
}

擬似コードだからといって内容が理解できないことはないと思いますが、
当日は見本誌で具体的なコードを確認してみてください。

目次

目次は以下です。
内容は変わる可能性があります。

第1章 Webアプリケーションにおけるレイヤ構造パターン集
	はじめに ... 7
	レイヤとは? ... 7
	レイヤ構造のメリットとデメリット ... 8
	コントローラーパターン ... 9
		パッケージ構成
		レイヤの責務
		メリット
		デメリット
		使い所
	MVCパターン ... 12
		パッケージ構成
		レイヤ同士の依存関係
		レイヤの責務
		メリット
		デメリット
	MVC+サービスレイヤパターン ... 20
		パッケージ構成
		レイヤ同士の依存関係
		レイヤの責務
		サービスレイヤの実装
		メリット
		デメリット
	レイヤードアーキテクチャ ... 33
		パッケージ構成
		レイヤ同士の依存関係
		レイヤの責務
		レイヤ依存パターン
		メリット
		デメリット
	ヘキサゴナルアーキテクチャ ... 41
		レイヤ同士の依存関係
		ヘキサゴナルアーキテクチャの目的
		アプリケーションと技術を分離する仕組み
		パッケージ構成
		レイヤの責務
		ヘキサゴナルアーキテクチャの本質
	クリーンアーキテクチャ ... 54
		レイヤ同士の依存関係
		パッケージ構成
		レイヤの責務
		インプットポートとアウトプットポート
		インプットポートとアウトプットポート以外のポート
		クリーンアーキテクチャの本質
		ちゃんとしたクリーンアーキテクチャ実装は少ない
		メリット
		デメリット
	レイヤードアーキテクチャ+ポート ... 74
	その他のレイヤ紹介 ... 82
	レイヤの肥大化と正当性 ... 85
	レイヤ内をどう実装するのか ... 86
	どのレイヤを採用すべきか ... 88
	おわりに ... 88

第2章 WebアプリケーションにおけるGo言語のパッケージ構成
	はじめに ... 89
	なぜ分からないのか? ... 89
	Go言語のパッケージ構成 ... 90
		フラットパッケージとは
		シングルパッケージとは
	フラットパッケージの実装 ... 93
	フラットパッケージ vs レイヤ構造 ... 98
		テスト
		初期学習コスト
		継続的な学習コスト
		新規開発
		OSS開発
		パッケージのインポートとIDEの補完
		コードの質
	おわりに ... 105

第3章 レイヤ構造で学ぶパッケージの横割りと縦割り
	はじめに ... 106
	パッケージの横割りとは ... 106
	パッケージの縦割りとは ... 107
	パッケージの縦割りが抱える問題 ... 111
		共通実装
		機能間の依存
	縦割りを扱う際のポイント ... 119
		共通実装の扱い
		各レイヤ内実装
	縦割りとDB設計 ... 128
		依存関係のコントロール
		マイクロサービスへの切り出し
	パッケージの縦割りにおける機能パッケージの分割粒度 ... 129
	Go言語におけるフラットパッケージと縦割り ...130
	おわりに ... 131

第4章 詳解リポジトリパターン
	はじめに ... 132
	リポジトリパターンとは ... 132
	リポジトリパターンとDAOの違い ... 135
	複数のデータソースを扱う ... 137
	モデルの部分的なCRUD操作 ... 138
	Read操作におけるモデル以外の戻り値 ... 141
	実装に対する依存 ... 142
	ビジネスロジック ... 143
	トランザクション境界 ... 145
	トランザクションの抽象化 ... 145
	Go言語におけるグローバル変数を利用したDIの欠点 ... 151
	おわりに ... 154