メモ自分が本格的に設計を意識するようになったのは、2015年の夏に現職であるFringe81株式会社で開催されていたサマーインターンに参加してからだ。インターンではDDDとクリーン・アーキテクチャ*1を一から勉強してAPIサーバーに実装する、というカリキュラムであったが、いま思うと2週間という比較的長いインターンで僕が学べたことと言えば本当に微々たるものだった。つまるところ、それくらいには設計というものは奥が深い。常になんらか特定のデザイン・パターンなりアーキテクチャ・パターンを適用することでアプリケーション開発がうまくいくということはなく、それらの様々な知識から少しづつ応用されたものが最終的なアプリケーションの設計に対して真の洞察を与えてくれるものというのが、僕自身のいまの認識である。多くを知れば知るほど、アプリケーション開発において遭遇する問題に対しての適切な解決策が思いつく。知識としての設計だけでは不十分だが、知識がなければ設計はできない。知識をつけるためにはこれまでの様々なソフトウェア・エンジニアが書き残してきた書物を読むことが一番だ。見るこの本は現時点で僕にとってのアプリケーション設計のバイブル。具体的な実装レベルで設計を学べる本といえば、特にこれだ。これまで僕にとってのオブジェクト指向はとても捉えどころのない概念だった。インターネットで検索をすると、大抵動物や車の例えとJavaのコード例が現れ、結局OOPがどのようなケースで有用なのか、という根本的なメリットがあまり明示されないケースが多い。一方で、この「オブジェクト指向設計実践ガイド」はどちらかといえば大学の授業で学ぶような雰囲気を避け、アプリケーション開発とスケーラビリティを意識した実践的な内容のOOPを、Rubyという比較的とっつきやすい言語と共に紹介する。一般的なOOPのサンプルはJavaが多い印象があるが、その中でRubyを使ってOOPを学ぶこの本は圧倒的に分かりやすい。Rubyを使っているのかは分からないが、動的型付言語をサンプルコードとして使うことで、JavaやGolangのインターフェイスがなぜ便利なのか、という点の理解がより深まってくる。一方で、言語仕様としてのインターフェイスを持たない動的型付言語のダックタイピングの柔軟さも理解が深まる。単行本この商品を含むブログを見る日本語訳が出た今でこそ、比較的膾炙し始めたクリーン・アーキテクチャであるが、この本が日本語訳されるまではインターネットにとても情報が少なかった。それだけに、ボブおじさんのこの本が日本語訳として登場したのは、とても喜ばしいことであるし、これが多くの人に読まれているというのはすごく素晴らしいことだ。一貫してボブおじさんがこの本の中で主張しているのは、実装とインターフェイスを分離すること、そして依存の方向を統一すること、このふたつだ。奥花子が歌っていたように*2、我々はアプリケーションの中で「変わらないもの」を探さねばならない。それがすなわち我々のビジネスルールであり、外部世界と分離して守らねばならない。則ってない実装になっていたり*3、本当にクリーン・アーキテクチャの原典を読んで実装しているのかが疑わしいものがいくつもある。この本を手にとる各位においては、インターネットに転がるクリーン・アーキテクチャの真贋を一読した上でぜひ見極めてもらいたい。単行本(ソフトカバー)この商品を含むブログを見る嘘偽りなく現代のWebアプリケーション開発に必要なことが全部書いてあるバイブル。業務でアプリケーションを作るというのは、大規模なデータ(ビッグデータではない)やトラフィックと常に戦い続けることだ。自分は文系大学出身かつ学生時代はさほど大きなアプリケーションに携わる経験がなかったこともあり、この本で説明されるような知識を全く持って持ち合わせていなかった。NoSQLが生まれたのか、結果整合性*4とはなにか、ACID、CAP定理、CORBA、二層コミット、などなど。ソフトウェア・エンジニアとしてこれらのフレーズを一度も聞いたことがない、というのであれば今すぐにでも読むべきだと思う。自分はWebアプリケーション開発をRailsから始め、データベースといえばPostgresQLかMySQLくらしか触ったことがなかった。AzureのCosmosDBやGCPのSpanner、そしてAmazonのDynamoDB、FacebookのCassandraなど、一般的なRDBMSとは異なる特徴をもつミドルウェアがある。それらがなぜ生まれ、どのようなアプリケーションに向いているのかを知るためには、彼らのもつ特徴や歴史背景などを知らねばならない。アプリケーションの規模が大きくなればなるほど、ビジネスの性質に応じて適切な道具を選ぶことで、コストの削減やパフォーマンスの向上が期待できる。その取捨選択が行えるのがアーキテクトたるソフトウェア・エンジニアの姿であるし、僕が目指すものでもある。この本を読むまで、せいぜい親しいものといえば伊藤直也氏による「大規模サービス技術入門」だったが、どちらかというとこの本は低レイヤの知識をベースにどうスケーラビリティを獲得するかについて語るものだったと言える。データ指向アプリケーションデザインはより広いユースケースをカバーしており、ステップアップとしてはとても最適な本になっている。どちらも良書なので両方読むのがベターだろう。千葉に引っ越してから、渋谷...2019-03-23社会人エンジニアに求められたもの去年の4月から社会人としてエンジニアをやっている。(8)はてなブログをはじめよう!IzumiSyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。