{"componentChunkName":"component---src-modules-datocms-post-page-page-tsx","path":"/posts/43","result":{"data":{"post":{"title":"ScalaでDDD徹底入門講座","author":{"name":"reoring","images":{"r32":{"src":"https://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&fm=png&h=32&mask=ellipse&w=32","srcSet":"https://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=1&fm=png&h=32&mask=ellipse&w=32 1x,\nhttps://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=1.5&fm=png&h=32&mask=ellipse&w=32 1.5x,\nhttps://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=2&fm=png&h=32&mask=ellipse&w=32 2x,\nhttps://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=3&fm=png&h=32&mask=ellipse&w=32 3x"},"r48":{"src":"https://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&fm=png&h=48&mask=ellipse&w=48","srcSet":"https://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=1&fm=png&h=48&mask=ellipse&w=48 1x,\nhttps://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=1.5&fm=png&h=48&mask=ellipse&w=48 1.5x,\nhttps://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=2&fm=png&h=48&mask=ellipse&w=48 2x,\nhttps://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=3&fm=png&h=48&mask=ellipse&w=48 3x"}},"bio":"株式会社クラフトマンソフトウェア代表 | Schoo講師 | 分報発祥の会社 | YYPHP主催 | マンガでわかるDocker監修 | 実践ドメイン駆動設計レビュア | 自動受け入れテスト ShouldBee http://shouldbee.at/"},"date":"2015年10月13日","tags":["Scala","DDD"],"category":"プログラミング","body":"<a href=\"https://c16e-esa-io-public-files.s3-ap-northeast-1.amazonaws.com/uploads/production/attachments/15637/2020/05/28/18740/a58c2d30-3848-4a7a-9915-5ecb5b7623f1.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"1200\" alt=\"image.png (157.1 kB)\" src=\"https://c16e-esa-io-public-files.s3-ap-northeast-1.amazonaws.com/uploads/production/attachments/15637/2020/05/28/18740/a58c2d30-3848-4a7a-9915-5ecb5b7623f1.png\"></a>\n<p data-sourcepos=\"3:1-4:162\">クラフトマンソフトウェアでは、最近話題のScalaとDDDを使った徹底入門講座を開こうと考えています。<br>\n講師は、書籍「実践ドメイン駆動設計」の翻訳レビュアとして参加した、この記事を書いている私と、野澤の二名です。</p>\n<p data-sourcepos=\"6:1-6:160\">本講座のカリキュラムはまだ確定していないので、もし意見がありましたらガンガン言ってもらえるとありがたいです!</p>\n<p data-sourcepos=\"8:1-8:181\">もし参加したいという!という方がいらっしゃいましたら、記事下部のコメント欄やメールにてご連絡いただけると非常に助かります。</p>\n<p data-sourcepos=\"10:1-10:33\">以下、講座の内容です。</p>\n<h1 data-sourcepos=\"12:1-12:8\" id=\"1-0-0\" name=\"1-0-0\">\n<a class=\"anchor\" id=\"目的\" name=\"%E7%9B%AE%E7%9A%84\" href=\"#%E7%9B%AE%E7%9A%84\" data-position=\"1-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"目的\"> &gt; 目的</span></a>目的</h1>\n<p data-sourcepos=\"14:1-14:167\">このScalaでDDD徹底入門講座の目的は、「ソフトウェア開発の第一線で活躍するためのスキルを身につける」ことにあります。</p>\n<p data-sourcepos=\"16:1-16:62\">単にScalaでの記述方法を覚えるだけではなく、</p>\n<ul data-sourcepos=\"18:1-22:0\">\n<li data-sourcepos=\"18:1-18:112\">自分でソフトウェアの設計を考えるための設計方法概論（UML, オブジェクト指向）</li>\n<li data-sourcepos=\"19:1-19:99\">設計を効率的に作るための <a href=\"http://astah.change-vision.com/ja/\" target=\"_blank\" rel=\"noopener noreferrer\">Astah UML</a> の操作法</li>\n<li data-sourcepos=\"20:1-20:86\">変更に強いプログラムを記述するための考え方と具体的な手法</li>\n<li data-sourcepos=\"21:1-22:0\">汎用性の高いプログラムの基本構造</li>\n</ul>\n<p data-sourcepos=\"23:1-23:33\">などについて学びます。</p>\n<p data-sourcepos=\"25:1-25:176\">例えばScalaでプログラミングするには、Scalaの開発環境を適切に設定する必要があります。この様な基本的なことも1から教えます。</p>\n<p data-sourcepos=\"27:1-27:120\">こういったことは他の講座ではあまり教えることがなく、独自の強みだと思っています。</p>\n<h1 data-sourcepos=\"29:1-29:32\" id=\"2-0-0\" name=\"2-0-0\">\n<a class=\"anchor\" id=\"できるようになること\" name=\"%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%93%E3%81%A8\" href=\"#%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%93%E3%81%A8\" data-position=\"2-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"できるようになること\"> &gt; できるようになること</span></a>できるようになること</h1>\n<ul data-sourcepos=\"31:1-34:0\">\n<li data-sourcepos=\"31:1-31:92\">大規模なソフトウェアでも保守性を損わずに構築できるようになる</li>\n<li data-sourcepos=\"32:1-32:101\">取り扱いやすい粒度のモジュールを複数のチームで開発できるようになる</li>\n<li data-sourcepos=\"33:1-34:0\">本当に再利用が可能なソフトウェアが構築できる</li>\n</ul>\n<h1 data-sourcepos=\"35:1-35:20\" id=\"3-0-0\" name=\"3-0-0\">\n<a class=\"anchor\" id=\"授業について\" name=\"%E6%8E%88%E6%A5%AD%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6\" href=\"#%E6%8E%88%E6%A5%AD%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6\" data-position=\"3-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"授業について\"> &gt; 授業について</span></a>授業について</h1>\n<p data-sourcepos=\"37:1-37:69\">教材となるサンプルコードはGitHubにて公開します。</p>\n<p data-sourcepos=\"39:1-40:125\">授業のスタイルとしては、講師がスライドで説明をして終わりではなく、皆様と一緒に1ステップずつ理解していくスタイルを基本としています。<br>\n講師は2名体制ですので、ついていけない方がいた場合はもう1ひとりの講師がヘルプします。</p>\n<h1 data-sourcepos=\"42:1-42:14\" id=\"4-0-0\" name=\"4-0-0\">\n<a class=\"anchor\" id=\"授業内容\" name=\"%E6%8E%88%E6%A5%AD%E5%86%85%E5%AE%B9\" href=\"#%E6%8E%88%E6%A5%AD%E5%86%85%E5%AE%B9\" data-position=\"4-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"授業内容\"> &gt; 授業内容</span></a>授業内容</h1>\n<h2 data-sourcepos=\"44:1-44:14\" id=\"4-1-0\" name=\"4-1-0\">\n<a class=\"anchor\" id=\"Scala入門\" name=\"Scala%E5%85%A5%E9%96%80\" href=\"#Scala%E5%85%A5%E9%96%80\" data-position=\"4-1-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"Scala入門\"> &gt; Scala入門</span></a>Scala入門</h2>\n<p data-sourcepos=\"46:1-48:104\">例えば、正しいソフトウェアの設計をできるようになりたい場合、そのプログラミング言語の基礎について学ぶことなく設計の作り方だけを学ぶということは考えられません。<br>\n本講座では、設計の仕方の前にまずScalaの基礎について教えます。<br>\nScalaの基礎ができるようになると、簡単な処理が記述できるようになります。</p>\n<h2 data-sourcepos=\"50:1-50:36\" id=\"4-2-0\" name=\"4-2-0\">\n<a class=\"anchor\" id=\"オブジェクト指向の基礎\" name=\"%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%AE%E5%9F%BA%E7%A4%8E\" href=\"#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%AE%E5%9F%BA%E7%A4%8E\" data-position=\"4-2-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"オブジェクト指向の基礎\"> &gt; オブジェクト指向の基礎</span></a>オブジェクト指向の基礎</h2>\n<p data-sourcepos=\"52:1-53:211\">オブジェクト指向の基礎では、クラス、カプセル化、継承、ポリモフィズムなどのオブジェクト指向に頻出する用語と意味を教えます。<br>\nオブジェクト指向以前の考えかたと、オブジェクト指向がなぜソフトウェア開発で頻繁に利用されるようになったかといった背景も1から丁寧に説明します。</p>\n<h2 data-sourcepos=\"55:1-55:15\" id=\"4-3-0\" name=\"4-3-0\">\n<a class=\"anchor\" id=\"UMLの基礎\" name=\"UML%E3%81%AE%E5%9F%BA%E7%A4%8E\" href=\"#UML%E3%81%AE%E5%9F%BA%E7%A4%8E\" data-position=\"4-3-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"UMLの基礎\"> &gt; UMLの基礎</span></a>UMLの基礎</h2>\n<p data-sourcepos=\"57:1-58:129\">オブジェクト指向で考えた内容を、言葉を話すように伝えられるようにしたのがUMLです。<br>\nUMLの基礎コースでは、UMLを使ってオブジェクト指向設計のモデリングができるようになります。</p>\n<h2 data-sourcepos=\"60:1-60:15\" id=\"4-4-0\" name=\"4-4-0\">\n<a class=\"anchor\" id=\"DDDの基礎\" name=\"DDD%E3%81%AE%E5%9F%BA%E7%A4%8E\" href=\"#DDD%E3%81%AE%E5%9F%BA%E7%A4%8E\" data-position=\"4-4-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"DDDの基礎\"> &gt; DDDの基礎</span></a>DDDの基礎</h2>\n<p data-sourcepos=\"62:1-64:264\">DDDはDomain Driven Designの略です。日本語にするとドメイン駆動設計となります。<br>\nドメイン駆動設計とは、ソフトウェアが実現せんとする問題領域、つまりドメインを中心に据えて、そのドメインで設計や開発が駆動されるという意味です。<br>\nDDDの基礎では、ドメインにはどのような事柄がドメインになるのかといった基礎的なことから、ドメインを使った顧客とのコミュニケーションの方法など実際の業務に必要になる知識も教えます。</p>\n<h2 data-sourcepos=\"66:1-66:24\" id=\"4-5-0\" name=\"4-5-0\">\n<a class=\"anchor\" id=\"DDDでの実装方法\" name=\"DDD%E3%81%A7%E3%81%AE%E5%AE%9F%E8%A3%85%E6%96%B9%E6%B3%95\" href=\"#DDD%E3%81%A7%E3%81%AE%E5%AE%9F%E8%A3%85%E6%96%B9%E6%B3%95\" data-position=\"4-5-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"DDDでの実装方法\"> &gt; DDDでの実装方法</span></a>DDDでの実装方法</h2>\n<p data-sourcepos=\"68:1-68:160\">DDDで考えたドメインや設計をどうやって実装するかという方法をの基礎となる考えかたを1からしっかりと伝授します。</p>\n<h1 data-sourcepos=\"70:1-70:20\" id=\"5-0-0\" name=\"5-0-0\">\n<a class=\"anchor\" id=\"授業内容目次\" name=\"%E6%8E%88%E6%A5%AD%E5%86%85%E5%AE%B9%E7%9B%AE%E6%AC%A1\" href=\"#%E6%8E%88%E6%A5%AD%E5%86%85%E5%AE%B9%E7%9B%AE%E6%AC%A1\" data-position=\"5-0-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"授業内容目次\"> &gt; 授業内容目次</span></a>授業内容目次</h1>\n<div class=\"code-block\" data-sourcepos=\"72:5-135:42\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>オブジェクト指向の基本\n\tオブジェクト指向とは?\n\t用語\n\t\tクラス\n\t\tメソッド\n\t\t継承\n\t\tコンポジション\n\t\tポリモーフィズム\n\t依存関係逆転の法則\n\tリスコフの置換原則\nUMLの基礎\n\tクラス図の読み書き\n\tシーケンス図\nScala入門\n\t基本構文\n\t\t式指向\n\t\t制御構造\n\t\t\tif\n\t\t\tfor\n\t\t\twhile\n\t\t\tswitch\n\t\t\tmatch\n\t\t変数\n\t\t\tvarとvalの違い\n\t不変性\n\tパターンマッチング\n\t\tapply/unapply\n\tオプション\n\tパッケージ\n\tパッケージオブジェクト\n\tクラス\n\tケースクラス\n\tオブジェクト\n\tコンパニオンオブジェクト\n\t関数\nDDDの基礎\n\tドメインモデルとはなにか?\n\tユビキタス言語\n\t戦略デザイン\n\t\tコアドメイン\n\t\tサブドメイン\n\t\tコンテキストマップ\n\t戦術デザイン\n\t\tクラス設計\nDDDでの実装\n\tヘキサゴナルアーキテクチャ\n\tバウンデッドコンテキスト\n\t\tコアドメイン\n\t\tサブドメイン\n\t\t物理的なチーム編成\n\tバウンデッドコンテキストの連携\n\t\tメッセージング\n\t\tRESTfulリソース\n\tイベントソーシング\n\t\tステートソーシングとの違い\n\tドメインイベント\n\tCQRS\n\tエンティティ・値オブジェクト\n    不変表明\n\t集約\n\tレポジトリ\n\tアプリケーション\n\t\tトランザクション境界\n\t\tアプリケーションサービス\n</code></pre></div></div>\n"}},"pageContext":{"id":"DatoCmsPost-5142978-ja","description":"クラフトマンソフトウェアでは、最近話題のScalaとDDDを使った徹底入門講座を開こうと考えています。 講師は、書籍「実践ドメイン駆動設計」の翻訳レビュアとして参加した、この記事を書いている私と、野澤の二名です。 本講座のカリキュラムはまだ確定していないので、もし意見がありましたらガンガン言ってもらえるとありがたいです! もし参加したいという!という方がいらっしゃいましたら、記事下部のコメント欄やメールにてご連絡いただけると非常に助かります。 以下、講座の内容です。 目的 このScalaでDDD徹底入門講座の目的は、「ソフトウェア開発の第一線で活躍するためのスキルを身につける」ことにあります。","toc":[{"tag":"h1","depth":1,"href":"#%E7%9B%AE%E7%9A%84","text":"目的","html":"目的"},{"tag":"h1","depth":1,"href":"#%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%93%E3%81%A8","text":"できるようになること","html":"できるようになること"},{"tag":"h1","depth":1,"href":"#%E6%8E%88%E6%A5%AD%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6","text":"授業について","html":"授業について"},{"tag":"h1","depth":1,"href":"#%E6%8E%88%E6%A5%AD%E5%86%85%E5%AE%B9","text":"授業内容","html":"授業内容"},{"tag":"h2","depth":2,"href":"#Scala%E5%85%A5%E9%96%80","text":"Scala入門","html":"Scala入門"},{"tag":"h2","depth":2,"href":"#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%AE%E5%9F%BA%E7%A4%8E","text":"オブジェクト指向の基礎","html":"オブジェクト指向の基礎"},{"tag":"h2","depth":2,"href":"#UML%E3%81%AE%E5%9F%BA%E7%A4%8E","text":"UMLの基礎","html":"UMLの基礎"},{"tag":"h2","depth":2,"href":"#DDD%E3%81%AE%E5%9F%BA%E7%A4%8E","text":"DDDの基礎","html":"DDDの基礎"},{"tag":"h2","depth":2,"href":"#DDD%E3%81%A7%E3%81%AE%E5%AE%9F%E8%A3%85%E6%96%B9%E6%B3%95","text":"DDDでの実装方法","html":"DDDでの実装方法"},{"tag":"h1","depth":1,"href":"#%E6%8E%88%E6%A5%AD%E5%86%85%E5%AE%B9%E7%9B%AE%E6%AC%A1","text":"授業内容目次","html":"授業内容目次"}],"ogpImageUrl":"https://www.datocms-assets.com/29850/1593190022-pastedimage20200627146.png?fm=png&mark64=aHR0cHM6Ly93d3cuZGF0b2Ntcy1hc3NldHMuY29tLzI5ODUwLzE1OTMxNTQ2MzYtdHJhbnNwYXJlbnQtcGl4ZWwucG5nP3c9NDAwJmg9NjQmZml0PWNyb3AmYmxlbmQ2ND1hSFIwY0hNNkx5OTNkM2N1WkdGMGIyTnRjeTFoYzNObGRITXVZMjl0THpJNU9EVXdMekUxT1RFNE16TXhOVFF0TnpNMU9Ea3dMbXB3Wno5dFlYTnJQV1ZzYkdsd2MyVW1abTA5Y0c1bkpuYzlNalUySm1nOU1qVTImYmxlbmQtaD02NCZibGVuZC14PTAmYmxlbmQteT0wJmJsZW5kLW1vZGU9bm9ybWFsJm1hcms2ND1hSFIwY0hNNkx5OWhjM05sZEhNdWFXMW5hWGd1Ym1WMEwzNTBaWGgwUDNSNGRDMWhiR2xuYmoxdGFXUmtiR1VsTWtOc1pXWjBKblI0ZEMxbWIyNTBQWE5oYm5NdGMyVnlhV1lsTWtOaWIyeGtKblI0ZEMxamIyeHZjajB5TWpFNE1UWW1kSGgwTmpROVkyMVdkbU50YkhWYWR5WjBlSFF0YzJsNlpUMHpNQ1pvUFRZMCZtYXJrLXg9NjQmbWFyay1hbGlnbj1taWRkbGUlMkNsZWZ0&mark-align=bottom%2Cleft&mark-x=100&mark-y=496&blend64=aHR0cHM6Ly93d3cuZGF0b2Ntcy1hc3NldHMuY29tLzI5ODUwLzE1OTMxNTQ2MzYtdHJhbnNwYXJlbnQtcGl4ZWwucG5nP3c9MTIwMCZoPTYzMCZmaXQ9Y3JvcCZtYXJrNjQ9YUhSMGNITTZMeTkzZDNjdVpHRjBiMk50Y3kxaGMzTmxkSE11WTI5dEx6STVPRFV3THpFMU9UTXhOVEE1TkRBdFkzSmhablJ6YldGdUxUQXhMbkJ1WncmbWFyay1hbGlnbj10b3AlMkNjZW50ZXImbWFyay13PTI1MCZtYXJrLXk9ODAmYmxlbmQ2ND1hSFIwY0hNNkx5OWhjM05sZEhNdWFXMW5hWGd1Ym1WMEwzNTBaWGgwUDNSNGRDMWhiR2xuYmoxdGFXUmtiR1VsTWtOalpXNTBaWEltZEhoMExXWnZiblE5YzJGdWN5MXpaWEpwWmlVeVEySnZiR1FtZEhoMExYQmhaRDB4TURBbWRIaDBMV052Ykc5eVBUSXlNVGd4TmlaMGVIUTJORDFWTWs1b1lrZElhbWRoWkVWU1JWUnNkbkp1YkhWd1dHeG9ZVmh3Ykc5RWIzSktkbXgxY1dNbWRIaDBMWE5wZW1VOU5UVW1kejB4TWpBd0ptZzlOak13JmJsZW5kLW1vZGU9bm9ybWFs&blend-mode=normal","otherPost":{"type":"author","title":"Docker入門講座を開催しようと考えています!","slug":"/posts/45"}}}}