mike-neckのブログ

Java or Groovy or Swift or Golang

クリーンアーキテクチャーの読書メモ(2)

表題の通り

f:id:mike_neck:20190312230053p:plain

§2 2つの価値

  • プログラマーステークホルダーに提供する2つの価値
    • 振る舞い
    • 構造
  • 振る舞い
    • 多くのプログラマーが価値だと思いこんでいるもの
    • 機能仕様書とか要求文書とか
  • 構造 = アーキテクチャ
    • 振る舞い = ソフトウェアを簡単に変更できる手段
    • システムが複雑になってシステムの形状が要件の形状に合わなくなっていく
  • 価値
    • 完璧な動作で変更が現実的でない(難易度的に/コスト的に)ソフトウェア = 価値がない
    • 間違っている動作だが変更が容易なソフトウェア = 価値がある
  • アーキテクチャーの戦い

クリーンアーキテクチャーの読書メモ(1)

以前からちょっとずつ読んでいたけど、そのまとめメモ

このメモもちょっとずつ更新予定

f:id:mike_neck:20190312230053p:plain


Clean Architecture

第一部

イントロダクション

  • 正しいソフトウェア
    • 少ない人数でソフトウェアを動かせる
    • 少ない人数で保守・開発できる

§1 設計とアーキテクチャ

  • 設計とアーキテクチャの違い
    • ない。同じ
    • アーキテクチャは上位、設計は下位と考えられがちだが、上位の構造、下位の詳細ともに全体の設計の一部であり、意思決定の連続
  • 決定の目的
    • ソフトウェア/システムを少ない人数で構築・保守する
  • ケーススタディ
    • リリースと共に生産性が低下/コストが上昇
  • 原因
    • コードが崩壊・汚い
  • あとでクリーンにする
    • あとでクリーンになんかしない
  • 結論 : 崩壊したコードを書くほうがクリーンなコードを書くよりも常に遅い
  • 早く進むための唯一の方法は、うまく進むこと

Swift Package Manager 5.0 のDevelop バージョンを利用する

swift-nio-ssl に PR を出して早7ヶ月、もはや Swift を忘れた頃に、「ごめんごめん、完全に忘れてた。最新の状態にあわせてくれれば取り込むよ」と言われて、準備をしようとしたところ、 swift-nio-ssl が使っている Swift Package Manager のバージョンが 5.0 にあがっていて、SwiftPM の 5.0 が使えるようになるまで途方に暮れたので、そのメモ。多分誰にも需要がないことであろうと思われる。というか、こんなブログに辿り着くよりも、GitHub の Swift Package Manager リポジトリーにアクセスしたほうが早いぞ。

f:id:mike_neck:20180609045321p:plain


まず、 こちら より、 Swift Package Manager 5.0 の develop バージョンを入手して、インストールします(画像省略)。

次にインストールされたディレクトリーを確認します。

$ ls /Library/Developer/Toolchains/
swift-4.1.3-RELEASE.xctoolchain             swift-5.0-DEVELOPMENT-SNAPSHOT-2019-02-28-a.xctoolchain
swift-4.2.1-RELEASE.xctoolchain             swift-latest.xctoolchain

インストールされたディレクトリーの Info.plistCFBundleIdentifier の値を読みます。

$ /usr/libexec/PlistBuddy -c "Print CFBundleIdentifier:"  /Library/Developer/Toolchains/swift-5.0-DEVELOPMENT-SNAPSHOT-2019-02-28-a.xctoolchain/Info.plist
org.swift.5020190228a

この値を環境変数 TOOLCHAINS に指定すれば、 Swift Package Manager はインストールされたバージョンを使うようになります。

$ export TOOLCHAINS=org.swift.5020190228a
$ swift package --version
Swift Package Manager - Swift 5.0.0 (3a57975e)
$ swift --version
Apple Swift version 5.0-dev (LLVM 3207a50965, Clang 107de882f4, Swift feacc3fd31)
Target: x86_64-apple-darwin18.2.0