CINXE.COM
ソフトウェアアーキテクチャの基礎 - O'Reilly Japan
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>ソフトウェアアーキテクチャの基礎 - O'Reilly Japan</title> <link rel="stylesheet" type="text/css" href="/assets/css/font-face.css"> <link rel="stylesheet" type="text/css" href="/assets/css/layout.css"> <link rel="stylesheet" type="text/css" href="/assets/css/layout-books.css"> <link rel="icon" type="image/png" href="https://www.oreilly.com/favicon.ico"> <meta name="format-detection" content="telephone=no"> <meta property="og:title" content="ソフトウェアアーキテクチャの基礎" /> <meta property="og:type" content="article" /> <meta property="og:image" content="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-982-3.jpeg" /> <meta property="og:image:secure_url" content="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-982-3.jpeg" /> <meta property="og:url" content="https://www.oreilly.co.jp/books/9784873119823/" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:site" content="O'Reilly Japan" /> <meta name="twitter:creator" content="oreilly_japan" /> <link href="http://www.oreilly.co.jp/sales/atom.xml" type="application/atom+xml" rel="alternate" title="Sales Information" /> <meta property="og:description" content="ソフトウェアアーキテクチャとは、ソフトウェアシステムの成功に欠かせない重要な土台です。そのためソフトウェア開発者には、効果的なアーキテクチャを実現するスキルが求められます。本書は、そうした効果的なアーキテクチャを設計、構築、維持するアーキテクトになるために必要なスキルや知識を、現代的な視点から整理して包括的に解説する書籍です。 ソフトウェアアーキテクチャの定義から、アーキテクトの役割、モジュールや結合、アーキテクチャスタイルといったアーキテクチャ設計の基礎、チームやステークホルダーと効果的にコラボレーションしていくために必要なソフトスキルまで、さまざまなトピックについて実践的な例とともに説明します。" /> <link rel="canonical" href="https://www.oreilly.co.jp//books/9784873119823/" /> <link rel="amphtml" href="https://www.oreilly.co.jp//books/9784873119823/mobile.html"> <!-- Google Tag Manager --> <script>(function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-KR9JFVC');</script> <!-- End Google Tag Manager --> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-M7QE72H4KS"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'G-M7QE72H4KS'); </script> <style> .collapsible { background-color: white; border: 0; border-bottom: 1px solid rgb(246, 246, 246); margin: 0; padding: 0; cursor: pointer; width: 100%; text-align: left; outline: none; font-size: 1.5rem; font-weight: 700; line-height: 1.5em; } .collapsible:after { content: '\02795'; /* Unicode character for "plus" sign (+) */ font-size: 1.0rem; margin-left: 5px; float: right; } .collapsible-active:after { content: "\2796"; /* Unicode character for "minus" sign (-) */ } .collapsible:hover { box-shadow: 2px0 4px 8px rgb(0, 0, 0, .1); transition: box-shadow .2s; cursor: pointer; } .collapsible+section { padding: 0; margin-bottom: 30px; background-color: white; max-height: 0; overflow: hidden; transition: max-height 0.05s ease-out; } </style> </head> <body> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KR9JFVC" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <div id="skipToMain" class="nav__SkipToMain"><a href="#maincontent">Skip to main content</a></div> <header role="banner" class="nav__GlboalHeader"> <div class="pageWidth"> <nav role="navigation" aria-label="site sections" class="nav__GlobalNav"> <a aria-current="page" title="Go to home page" class="nav__Logo" href="/"><img src="/assets/images/logo_oreilly_japan.svg" alt="O'Reilly logo"></a> <div class="nav__NavItems" id="nav__NavItems"> <div class="nav__NavGroup"> <a class="nav__Link" href="/blog/">Blog</a> <a class="nav__Link active" href="/books/">Books</a> <a class="nav__Link" href="/ebook/">Ebooks</a> <a class="nav__Link" href="/online-learning/">Learning platform</a> <a class="nav__Link" href="/order/">Order</a> <a class="nav__Link" href="/company/">About</a> </div> <div class="nav__CTA"> <a href="/ebook/cart" class="nav__Cart">Cart</a> </div> </div> <button id="nav__MobileBtn" aria-expanded="false" aria-controls="menuList" class="nav__MobileBtn"><span><span></span></span></button> </nav> </div> </header> <main id="maincontent"> <div class="pageWidth"> <h1 itemprop="name"> ソフトウェアアーキテクチャの基礎 </h1> <p class='sub_title'> ―エンジニアリングに基づく体系的アプローチ</p> <span itemprop="publisher" content="オライリー・ジャパン"></span> <div class="contributers"> <span itemprop="author"> Mark Richards、Neal Ford 著、島田 浩二 訳 </span> </div> <section class="detail" itemscope itemtype="http://schema.org/Book"> <div class="detail-cover"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-982-3.jpeg" class="cover-photo" alt="[cover photo]" /> </div> <dl class="item-props"> <dt>TOPICS</dt> <dd> <a href="/books/sysad/"> System/Network </a> </dd> <dt>発行年月日</dt> <dd itemprop="datePublished" content="2022-03-08"> 2022年03月 </dd> <dt>PRINT LENGTH</dt> <dd itemprop="numberOfPages"> 436 </dd> <dt>ISBN</dt> <dd itemprop="isbn"> 978-4-87311-982-3 </dd> <dt>原書</dt> <dd><a href="https://www.oreilly.com/library/view/fundamentals-of-software/9781492043447/"> Fundamentals of Software Architecture </a></dd> <dt>FORMAT</dt> <dd> Print PDF EPUB <div class="buying-options"> <div class="option-item"> <div class="option-name">Ebook</div> <div> 4,180円 </div> <a href="/ebook/cart?id=978-4-87311-982-3&mode=add" class="update-button secondary-button"> Ebookを購入する </a> </div> <div class="option-item"> <div class="option-name">Print</div> <div> 4,180円 </div> <div class="link-book-order">書籍のご注文は<a href="https://www.ohmsha.co.jp/book/9784873119823/">オーム社サイト</a>へ </div> </div> </div> </dd> </dl> <div id="detail" class="content"> <p itemprop="description"> ソフトウェアアーキテクチャとは、ソフトウェアシステムの成功に欠かせない重要な土台です。そのためソフトウェア開発者には、効果的なアーキテクチャを実現するスキルが求められます。本書は、そうした効果的なアーキテクチャを設計、構築、維持するアーキテクトになるために必要なスキルや知識を、現代的な視点から整理して包括的に解説する書籍です。<br /> ソフトウェアアーキテクチャの定義から、アーキテクトの役割、モジュールや結合、アーキテクチャスタイルといったアーキテクチャ設計の基礎、チームやステークホルダーと効果的にコラボレーションしていくために必要なソフトスキルまで、さまざまなトピックについて実践的な例とともに説明します。 </p> </div> <h2 class="collapsible">正誤表</h2> <section> <p> ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。 </p> <h3> 第3刷正誤表 </h3> <div class="errata"> ※2023年3月更新<br> <br> ■p.345 2-4行目<br> 【誤】アーキテクトは、チェックリストが実際に開発チームをより効果的にしてくれることに気付くと、いわゆる「リターン逓減の法則」を利用して、あらゆるものをチェックリストにするようになる。<br> 【正】アーキテクトは、チェックリストが実際に開発チームをより効果的にしてくれることに気付くと、あらゆるものをチェックリストにするようになる。その結果、いわゆる「リターン逓減の法則」に陥ってしまう。<br> </div> </section> <h2 class="collapsible">目次</h2> <section> <div id="toc"> <pre>本書への推薦の言葉 はじめに:公理を疑う 1章 イントロダクション 1.1 ソフトウェアアーキテクチャの定義 1.2 アーキテクトへの期待 1.2.1 アーキテクチャ決定を下す 1.2.2 アーキテクチャを継続的に分析する 1.2.3 最新のトレンドを把握し続ける 1.2.4 決定の順守を徹底する 1.2.5 さまざまなものに触れ、経験している 1.2.6 事業ドメインの知識を持っている 1.2.7 対人スキルを持ち合わせている 1.2.8 政治を理解し、かじ取りをする 1.3 アーキテクチャと交わるもの 1.3.1 エンジニアリングプラクティス 1.3.2 運用とDevOps 1.3.3 プロセス 1.3.4 データ 1.4 ソフトウェアアーキテクチャの法則 第I部 基礎 2章 アーキテクチャ思考 2.1 アーキテクチャと設計 2.2 技術的な幅 2.3 トレードオフを分析する 2.4 ビジネスドライバーを理解する 2.5 アーキテクティングとコーディングのバランスを取る 3章 モジュール性 3.1 定義 3.2 モジュール性の計測 3.2.1 凝集度 3.2.2 結合度 3.2.3 抽象度、不安定度、主系列からの距離 3.2.4 主系列からの距離 3.2.5 コナーセンス 3.2.6 結合度とコナーセンスのメトリクスを統合する 3.3 モジュールからコンポーネントへ 4章 アーキテクチャ特性 4.1 アーキテクチャ特性の(部分的な)リスト 4.1.1 アーキテクチャの運用特性 4.1.2 アーキテクチャの構造特性 4.1.3 アーキテクチャの横断的特性 4.2 トレードオフと少なくとも最悪でないアーキテクチャ 5章 アーキテクチャ特性を明らかにする 5.1 アーキテクチャ特性をドメインの関心事から捉える 5.2 要件からアーキテクチャ特性を抽出する 5.3 事例:シリコンサンドイッチ 5.3.1 明示的な特性 5.3.2 暗黙的な特性 6章 アーキテクチャ特性の計測と統制 6.1 アーキテクチャ特性の計測 6.1.1 運用面の計測 6.1.2 構造面の計測 6.1.3 プロセス面の計測 6.2 統制と適応度関数 6.2.1 アーキテクチャ特性の統制 6.2.2 適応度関数 7章 アーキテクチャ特性のスコープ 7.1 結合とコナーセンス 7.2 アーキテクチャ量子と粒度 7.2.1 事例:Going、Going、Gone 8章 コンポーネントベース思考 8.1 コンポーネントの分類 8.2 アーキテクトの役割 8.2.1 アーキテクチャの分割 8.2.2 事例:シリコンサンドイッチにおける分割 8.3 開発者の役割 8.4 コンポーネントを識別する流れ 8.4.1 初期コンポーネントを識別する 8.4.2 コンポーネントに要件を割り当てる 8.4.3 ロールや責務を分析する 8.4.4 アーキテクチャ特性を分析する 8.4.5 コンポーネントを再構成する 8.5 コンポーネントの粒度 8.6 コンポーネント設計 8.6.1 コンポーネントの発見 8.7 事例:「Going、Going、Gone」におけるコンポーネントの発見 8.8 アーキテクチャ量子再び:モノリシックアーキテクチャと分散アーキテクチャの選択 第II部 アーキテクチャスタイル 9章 基礎 9.1 基礎的なパターン 9.1.1 巨大な泥団子 9.1.2 ユニタリーアーキテクチャ 9.1.3 クライアント/サーバー 9.2 モノリシックアーキテクチャと分散アーキテクチャ 9.2.1 誤信1:ネットワークは信頼できる 9.2.2 誤信2:レイテンシーがゼロ 9.2.3 誤信3:帯域幅は無限 9.2.4 誤信4:ネットワークは安全 9.2.5 誤信5:トポロジーは決して変化しない 9.2.6 誤信6:管理者は一人だけ 9.2.7 誤信7:転送コストはゼロ 9.2.8 誤信8:ネットワークは均一 9.2.9 分散コンピューティングにおけるその他の考慮事項 10章 レイヤードアーキテクチャ 10.1 トポロジー 10.2 層の分離 10.3 レイヤーの追加 10.4 その他の考慮事項 10.5 このアーキテクチャスタイルを採用する理由 10.6 アーキテクチャ特性の評価 11章 パイプラインアーキテクチャ 11.1 トポロジー 11.1.1 パイプ 11.1.2 フィルター 11.2 事例 11.3 アーキテクチャ特性の評価 12章 マイクロカーネルアーキテクチャ 12.1 トポロジー 12.1.1 コアシステム 12.1.2 プラグインコンポーネント 12.2 レジストリ 12.3 コントラクト 12.4 事例とユースケース 12.5 アーキテクチャ特性の評価 13章 サービスベースアーキテクチャ 13.1 トポロジー 13.2 トポロジーの種類 13.3 サービスの設計と粒度 13.4 データベース分割 13.5 アーキテクチャ例 13.6 アーキテクチャ特性の評価 13.7 このアーキテクチャスタイルがふさわしいとき 14章 イベント駆動アーキテクチャ 14.1 トポロジー 14.2 ブローカー 14.3 メディエーター 14.4 非同期の能力 14.5 エラー処理 14.6 データロスの防止 14.7 ブロードキャスト能力 14.8 リクエスト・リプライ 14.9 リクエストベースとイベントベースの間を取る 14.10 ハイブリッドなイベント駆動アーキテクチャ 14.11 アーキテクチャ特性の評価 15章 スペースベースアーキテクチャ 15.1 一般的なトポロジー 15.1.1 処理ユニット 15.1.2 仮想ミドルウェア 15.1.3 データポンプ 15.1.4 データライター 15.1.5 データリーダー 15.2 データ衝突 15.3 クラウドとオンプレミス 15.4 レプリケーションキャッシュと分散キャッシュ 15.5 ニアキャッシュの考慮 15.6 実装例 15.6.1 コンサートチケット販売システム 15.6.2 オンラインオークションシステム 15.7 アーキテクチャ特性の評価 16章 オーケストレーション駆動サービス指向アーキテクチャ 16.1 歴史と哲学 16.2 トポロジー 16.3 分類 16.3.1 ビジネスサービス 16.3.2 エンタープライズサービス 16.3.3 アプリケーションサービス 16.3.4 インフラストラクチャサービス 16.3.5 オーケストレーションエンジン 16.3.6 メッセージフロー 16.4 再利用...と結合 16.5 アーキテクチャ特性の評価 17章 マイクロサービスアーキテクチャ 17.1 歴史 17.2 トポロジー 17.3 分散 17.4 境界づけられたコンテキスト 17.4.1 粒度 17.4.2 データ分離 17.5 API層 17.6 運用面での再利用 17.7 フロントエンド 17.8 通信 17.8.1 コレオグラフィとオーケストレーション 17.8.2 トランザクションとサーガ 17.9 アーキテクチャ特性の評価 17.10 参考文献 18章 適切なアーキテクチャスタイルを選ぶ 18.1 アーキテクチャにおけるトレンドの変遷 18.2 判断基準 18.3 モノリスの事例:シリコンサンドイッチ 18.3.1 モジュラーモノリス 18.3.2 マイクロカーネル 18.4 分散型のケーススタディ:Going、Going、Gone 第III部 テクニックとソフトスキル 19章 アーキテクチャ決定 19.1 アーキテクチャ決定に関するアンチパターン 19.1.1 資産防御アンチパターン 19.1.2 グラウンドホッグデーアンチパターン 19.1.3 メール駆動アーキテクチャアンチパターン 19.2 アーキテクチャ上重要なもの 19.3 アーキテクチャデシジョンレコード 19.3.1 基本構造 19.3.2 ADRを保存する 19.3.3 ドキュメントとしてのADR 19.3.4 標準のためにADRを用いる 19.3.5 事例 20章 アーキテクチャ上のリスクを分析する 20.1 リスクマトリックス 20.2 リスクアセスメント 20.3 リスクストーミング 20.3.1 特定 20.3.2 合意 20.3.3 軽減 20.4 ユーザーストーリーリスク分析 20.5 リスクストーミング例 20.5.1 可用性 20.5.2 弾力性 20.5.3 セキュリティ 21章 アーキテクチャの図解やプレゼンテーション 21.1 図解 21.1.1 ツール 21.1.2 標準ダイアグラム:UML、C4、ArchiMate 21.1.3 図解ガイドライン 21.2 プレゼンテーション 21.2.1 時間を操る 21.2.2 段階的な構築 21.2.3 インフォデッキとプレゼンテーション 21.2.4 スライドは物語の半分 21.2.5 不可視化 22章 効果的なチームにする 22.1 チーム境界 22.2 アーキテクトのパーソナリティ 22.2.1 コントロールフリーク 22.2.2 アームチェアアーキテクト 22.2.3 効果的なアーキテクト 22.3 どうやって管理する? 22.4 チームの警告サイン 22.5 チェックリストの活用 22.5.1 開発者のコード完成チェックリスト 22.5.2 ユニットテストと機能テストのためのチェックリスト 22.5.3 ソフトウェアリリースのためのチェックリスト 22.6 ガイダンスの提供 22.7 まとめ 23章 交渉とリーダーシップのスキル 23.1 交渉とファシリテーション 23.1.1 ビジネスステークホルダーとの交渉 23.1.2 他のアーキテクトとの交渉 23.1.3 開発者との交渉 23.2 リーダーとしてのソフトウェアアーキテクト 23.2.1 アーキテクチャの4つのC 23.2.2 プラグマティックでありながらもビジョナリーであること 23.2.3 手本を示してチームをリードする 23.3 開発チームに溶け込む 23.4 まとめ 24章 キャリアパスを開く 24.1 20分ルール 24.2 パーソナルレーダーの開発 24.2.1 ThoughtWorksテクノロジーレーダー 24.2.2 オープンソースのビジュアライゼーションビット 24.3 ソーシャルメディアの使用 24.4 別れの挨拶 付録A 自己評価のためのチェックリスト 参考文献 訳者あとがき 索引 </pre> </div> </section> </section> <div class="related-items"> <div class="sectionRow__Heading"> <h3>関連書籍</h3> </div> <div class="sectionRow__Content"> <div class="sectionRow__BestLarge" id="bestEbooks"> <div class="sectionRow__Best" id="bestEbook1"> <a class="sectionRow__BestCover" href="/books/9784873118956/"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-895-6.jpeg" alt="Design It!"> </a> </div> <div class="sectionRow__Best hidden" id="bestEbook2"> <a class="sectionRow__BestCover" href="/books/9784814400911/"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0091-1.jpeg" alt="Tidy First?"> </a> </div> <div class="sectionRow__Best hidden" id="bestEbook3"> <a class="sectionRow__BestCover" href="/books/9784814400331/"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0033-1.jpeg" alt="オブジェクト設計スタイルガイド"> </a> </div> <div class="sectionRow__Best hidden" id="bestEbook4"> <a class="sectionRow__BestCover" href="/books/9784873119885/"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-988-5.jpeg" alt="カオスエンジニアリング"> </a> </div> <div class="sectionRow__Best hidden" id="bestEbook5"> <a class="sectionRow__BestCover" href="/books/9784814400072/"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0007-2.jpeg" alt="詳解 システム・パフォーマンス 第2版"> </a> </div> <div class="sectionRow__Best hidden" id="bestEbook6"> <a class="sectionRow__BestCover" href="/books/9784873118567/"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-856-7.jpeg" alt="進化的アーキテクチャ "> </a> </div> <div class="sectionRow__Best hidden" id="bestEbook7"> <a class="sectionRow__BestCover" href="/books/9784814400867/"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0086-7.jpeg" alt="スタッフエンジニアの道"> </a> </div> <div class="sectionRow__Best hidden" id="bestEbook8"> <a class="sectionRow__BestCover" href="/books/9784814400607/"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0060-7.jpeg" alt="ソフトウェアアーキテクチャメトリクス"> </a> </div> <div class="sectionRow__Best hidden" id="bestEbook9"> <a class="sectionRow__BestCover" href="/books/9784814400065/"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0006-5.jpeg" alt="ソフトウェアアーキテクチャ・ハードパーツ"> </a> </div> <div class="sectionRow__Best hidden" id="bestEbook10"> <a class="sectionRow__BestCover" href="/books/9784814400799/"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0079-9.jpeg" alt="脳に収まるコードの書き方"> </a> </div> <div class="sectionRow__Best hidden" id="bestEbook11"> <a class="sectionRow__BestCover" href="/books/9784873119311/"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-931-1.jpeg" alt="モノリスからマイクロサービスへ "> </a> </div> </div> <div class="sectionRow__BestThumbnails" id="bestEbookThumbnails"> <button class="sectionRow__bestBookThumbnailsItem" data-for="bestEbook1" aria-selected="true" title="Design It!"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-895-6.jpeg" alt="94561296322632"> </button> <button class="sectionRow__bestBookThumbnailsItem" data-for="bestEbook2" title="Tidy First?"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0091-1.jpeg" alt="94561302518880"> </button> <button class="sectionRow__bestBookThumbnailsItem" data-for="bestEbook3" title="オブジェクト設計スタイルガイド"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0033-1.jpeg" alt="94561304052624"> </button> <button class="sectionRow__bestBookThumbnailsItem" data-for="bestEbook4" title="カオスエンジニアリング"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-988-5.jpeg" alt="94561304232256"> </button> <button class="sectionRow__bestBookThumbnailsItem" data-for="bestEbook5" title="詳解 システム・パフォーマンス 第2版"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0007-2.jpeg" alt="94561305235800"> </button> <button class="sectionRow__bestBookThumbnailsItem" data-for="bestEbook6" title="進化的アーキテクチャ "> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-856-7.jpeg" alt="94561305537888"> </button> <button class="sectionRow__bestBookThumbnailsItem" data-for="bestEbook7" title="スタッフエンジニアの道"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0086-7.jpeg" alt="94561306535600"> </button> <button class="sectionRow__bestBookThumbnailsItem" data-for="bestEbook8" title="ソフトウェアアーキテクチャメトリクス"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0060-7.jpeg" alt="94561306899184"> </button> <button class="sectionRow__bestBookThumbnailsItem" data-for="bestEbook9" title="ソフトウェアアーキテクチャ・ハードパーツ"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0006-5.jpeg" alt="94561306899208"> </button> <button class="sectionRow__bestBookThumbnailsItem" data-for="bestEbook10" title="脳に収まるコードの書き方"> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-8144-0079-9.jpeg" alt="94561308450648"> </button> <button class="sectionRow__bestBookThumbnailsItem" data-for="bestEbook11" title="モノリスからマイクロサービスへ "> <img src="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-931-1.jpeg" alt="94561311149760"> </button> </div> </div> </div> </div> </main> <footer class="footer__FooterSection"> <div class="pageWidth"> <div class="footer__FooterTop"> <div class="footer__List"> <h3><a href="https://www.oreilly.co.jp/company/">About</a></h3> <a href="https://www.oreilly.co.jp/company/">会社概要</a> <a href="https://www.oreilly.co.jp/orj/privacypolicy.shtml">個人情報について</a> <a href="http://www.oreilly.com/">O’Reilly Media</a> </div> <div class="footer__List"> <h3><a href="https://www.oreilly.co.jp/company/">Support</a></h3> <a href="https://www.oreilly.co.jp/feedback/">Contact us</a> <a href="https://www.oreilly.co.jp/bookclub/">Bookclub</a> <a href="https://www.oreilly.co.jp/order/">書籍注文</a> </div> <div class="footer__Apps"> <h3>Download the O’Reilly app</h3> <p>Take O’Reilly with you and learn anywhere, anytime on your phone <span class="nowrap">and tablet.</span> </p> <div class="footer__DownloadLinks"> <a href="https://itunes.apple.com/us/app/safari-to-go/id881697395"><img src="https://cdn.oreillystatic.com/oreilly/images/app-store-logo.png" alt="Apple app store"></a> <a href="https://play.google.com/store/apps/details?id=com.safariflow.queue"><img src="https://cdn.oreillystatic.com/oreilly/images/google-play-logo.png" alt="Google play store"></a> </div> </div> </div> <div class="footer__FooterBase"> <a aria-current="page" class="footer__Logo" title="Go to home page" href="/"><img src="/assets/images/logo_oreilly_japan.svg" alt="O'Reilly logo"></a> <p>© 2022, O’Reilly Japan, Inc. oreilly.co.jpに掲載されているすべてのトレードマークおよび登録商標は、それぞれの所有者に帰属します。</p> </div> </div> </footer> <script src="/assets/scripts/cookies-policy.6d8dcbae.js"></script> <script> let coll = document.getElementsByClassName('collapsible'); for (let i = 0; i < coll.length; i++) { let button = document.createElement('button'); button.setAttribute('type', 'button'); button.setAttribute('class', 'collapsible'); button.textContent = coll[i].textContent; coll[i].replaceWith(button) coll[i].addEventListener('click', function () { this.classList.toggle('collapsible-active'); let content = this.nextElementSibling; if (content.style.maxHeight) { content.style.maxHeight = null; } else { content.style.maxHeight = content.scrollHeight + 'px'; } }); } </script> <script src="/assets/scripts/scripts.js"></script> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-6009404-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'UA-6009404-1'); </script> </body> </html>