de:code 2019 [DT52] ベテラン技術者に聞く、「その .NET アプリ、クラウドでどうモダナイズするの!?」

Microsoft de:code 2019に参加した内容を紹介します。

Chalk Talkなので、スライド公開のみとなっています。
もし間違いなどあれば、ご指摘いただけますと助かります。

# [DT52] ベテラン技術者に聞く、「その .NET アプリ、クラウドでどうモダナイズするの!?」 / 2019年5月30日

# TL;DR（要約）

- 日本政府でも、クラウドネイティブ、デジタルファーストという考え方が進んでいる。クラウドが基本！である。
- しかし、クラウドネイティブではなくても、コンテナをベースとした、.NET Coreを進めたほうが良い。ロードマップが発表されたのは久しぶりのこと。勇気をもって、自分の命を懸けて！リアーキテクチャしてほしい！
    とりあえず塩漬け（Iaas）もよいが、Paasなどを採用し、良いコードを書く、という風に持っていってほしい
- 政府から出ている[ディスカッションペーパー](https://cio.go.jp/dp)、その中の[アプリケーションの設計・開発の考え方](https://cio.go.jp/sites/default/files/uploads/documents/dp2019_01-01.pdf)に沿った提案が出てくるのではないか。


# リソース

- [セッション詳細](https://www.microsoft.com/ja-jp/events/decode/2019session/detail.aspx?sid=DT52&kw=DT52)
- https://headlines.yahoo.co.jp/hl?a=20190619-00000005-ascii-sci

# タイトル

![](https://yzcfmw.bl.files.1drv.com/y4myx3uZAwVI7fL0ARr_zr71QjrGp5xVVeIOtPl3w-X78i170gOgYnb6NrvqN8ga_YpKgQp57c-NvNP-qfiKek18ZHeQZd4GPsKm7x4BxT5_eLPm-meFfmxct8j5y4mKVyl6qDnnAa4rYhez5hXzxGpFJaMmFmiItnHPj6VIsNhxFncQhMID3lNCuJOU9v3VmdzSIPVmNTS1PImdXZL0jU9rw?width=1280&height=692&cropmode=none)

# 初めに講師の方から

- .NET Coreを使用する技術者を育てないといけない
- [リアーキテクチャ]していかないといけない
- Javaと仲がいいのはいいが、Javaに書き換えないといけないんですか？という話になったのでこのセッションを開いた

# すべてのアプリのための統一プラットフォーム

![](https://yzcgmw.bl.files.1drv.com/y4m7Rszpt1jHmz3FfUQpHik7KKj90dXdMTHI_0e_zB8AAjkm3p7RAU3hCKFIG8f5pnjO7aum9soysa3OdxfZT1mWOWXZzAMGdIZqRYPfzqWlxufIhvotPA4E2dEYE_pnKSy1KxoKWRFku5dI3FlVtU3h70-6BEVIUf5KApEdnhcG597fhIXPQSNUS5ML6VI8XnFkvIoeXyCpmAtTFsbEY87Hg?width=1280&height=747&cropmode=none)

## なぜクラウドでモダナイズするのか

- サーバーメンテするのが面倒なので、サーバーを持ちたくないな、というのが、最近の業界の統一見解となっている。ハードウェアを持ちたくないのと、メンテナンスと検証の時間が面倒である。

# 日本政府の取り組みなどについて

## 世界最先端デジタル国家創造宣言

![](https://yzcdmw.bl.files.1drv.com/y4maXw_JnMPexX2JVIBCsTBpXsJ5QHPhMkB8ogthqyWsOX-bYJ1qat89Q9kTMQ-ZMwyIwKWloeTpHUy4xw5CL500d1hvHDFwYIiUs_Ug-APAJ2sSrE6BPwE1Q1h0JdtADl7lq4ScHzi8pOMU0HVAHGSs3QSrw8SDkB3BmYs5YqnLTQxfut2h_GXt_u-hV8dgX9xEe5s6AidZbFU6f0-GPpZdQ?width=1280&height=703&cropmode=none)

世界最先端デジタル国家創造宣言や、官民データ活用推進基本計画が立ち上げられている。現状としては、ハードウェアを持っているベンダーも多いためなかなか進まない

# [デジタルファースト法案、可決成立](https://www.nikkei.com/article/DGXMZO45208480U9A520C1MM0000/)

![](https://yzcemw.bl.files.1drv.com/y4mK5_QxPbYtjUh6nFUcpPLhm840RyqpshYYG_VMVsog2cfhO3dH6-ng4rVoThQO-nrfB3AXdNSUGtnaHky9YzJO9EzuQqJav1JFJydPiEP5p8Xl3AzU7eiEh6XVYYd21raH701FnB13TUgz1lcKRcnOPuS5mhQUaRpL_aFq56kAGHzPa8pc6cbV7fTMnkt8OLaiFE6Es8ax8Mr7ExBy3E2sA?width=1280&height=715&cropmode=none)

[日経新聞の記事](https://www.nikkei.com/article/DGXMZO45208480U9A520C1MM0000/)
> 行政手続きを原則、電子申請に統一するデジタルファースト法が24日、参院本会議で可決、成立した。引っ越しや相続などの手続きがインターネット上で完結できるようになる。2019年度から順次実施する。利用者の利便性を高めるとともに、行政の効率化につなげる。
マイナンバー法と公的個人認証法、住民基本台帳法などを一括改正する。(1)手続きをIT（情報技術）で処理する「デジタルファースト」(2)同一の情報提供は求めない「ワンスオンリー」(3)手続きを一度に済ます「ワンストップ」――の3つの原則が柱となる

パスポート取得についても、ワンストップサービスでないといけない、ということを義務付ける。今までは、国の基盤の中で進めていたが、民間クラウドを使っていこう、という流れになっている。**クラウドが基本！**

## どうやって**クラウドが基本！**という流れに、顧客に勧めていくのか？

# .NET アプリケーション最適化モデル

今日提案しようと思っているのが、Paasを使用した既存.NETアプリのクラウド最適化である

順番に持っていこうということではなくて現在のアプリの種別ごとに落としていこうという形

## ここで演者の1人から！

単純な[リフトアンドシフト](https://www.atmarkit.co.jp/ait/articles/1808/31/news015.html)には反対。別にクラウドをやりたいわけではなくて、デベロッパーを増やさなければいけないはず


### リフト＆シフト（リフトアンドシフト）とは

https://www.atmarkit.co.jp/ait/articles/1808/31/news015.html
> リフト＆シフトという言葉は、当初は「オンプレミスからアプリケーションをリフトして、クラウドにシフトする」といった意味合いで理解されていましたが、最近は「クラウドにリフトして、クラウドネイティブな仕組みにシフトする」という意味に解釈されています。

## 本題に戻って

### コンテナをベースとした、.NET Coreを

クラウドネイティブではなくても、コンテナをベースとした、.NET Coreを進めたほうが良い。

ロードマップが発表されたのは久しぶりのこと。ASPも含めてアーキテクチャはだいぶ違っている。

### 勇気をもって、自分の命を懸けて！リアーキテクチャしてほしい！

中心となるのはデベロッパーなので、.NET Coreをベースとしてほしい！
コードを書き換えることを恐れないでほしい！

## コードをに手を入れるということについて

いわゆるアプリケーションの機能要件が変わらないのに、コードをに手を入れるということについて、なかなか理解が得られない。

アプリケーションの業務要件が変わらないのにコードを変更する、そこをデベロッパは恐れないでほしいし、偉い人に押せるようにしてほしい

とりあえず塩漬けで持っていく（Iaas）ということもよいが、それだけではなくて、Paasなどを採用し、良いコードを書く、という風に持っていってほしい

# クラウドバイデフォルトの推進

![](https://yzcbmw.bl.files.1drv.com/y4mJw2401RmJ46bR5PdoAxvM83W8NItj9nnV5ru6jW1tRSlZmNL2AwqvC4G0N04IoKz6RpTZ0ObcW91rtgIBqDQiqZJS5C5oftEpZZLq2O--1VL3tTZwzt2imTEKvIpftpdShLNV0-BPLOqG5dvxWHVojYp0VEx4ShQexlgsgsmgZO1Abdir8vlMglHIGG8DXDptXfG4kza-IQq5WOSi5gHYg?width=1280&height=712&cropmode=none)

クラウドバイデフォルトを推進するという流れになっているため、公共関係は予算がとれる。では、民間相手にはどうやって予算が下りるのか

# .NET アプリケーション最適化モデル

![](https://upckmw.bl.files.1drv.com/y4m_oGJe6F2e-9p01qj8PuWLyrIhYJHKpQ2j9lakutzqvo8MQya7TKeqrlBVP3Kv-wfdbocGZOdpEvglZfYzwJaSLkuP7f_g0XuWWlTcBhI45lTRBu1TTbw49xnbclBDUxQ6DPN0GuKPJysAU5DQ3u0UXuWMhmTJDbD_ZaVoTj1AsLS8VJ-eOZF9jySxCXCjyJQvV9obyKem4SU3tleMWLcJg?width=1280&height=686&cropmode=none)

今からやるなら、ASP.NET Coreである。

.NET Frameworkも残るけどメンテナンスモード、新機能はのせないよ！という話となる。新しい機能が出てきた場合に、.NET Frameworkに入ることはない。

もう1つ考えればよいのは、WebFormsを使っている人が多いが、.NET Coreでは、Web Formsがメンテナンスモードになってしまった。

その場合の行き先としては、Blazor。SPAもできるし、サーバーサイドでやっていた人が行くものとしては良い移行パスである

# [ディスカッションペーパー](https://cio.go.jp/dp)

![](https://upcimw.bl.files.1drv.com/y4m_HuK3vJx0C2fIwtONPkBqIRyzaqErZni2w5JdSRprK-y1XJzvFLg6h48suTiLZ-hkundT6YjbV5GHxRADmlC7o-jMqCEYbnMvejnbzfjpgkMQEz3iSQ9p42FYnJCUgvIOC2LDt4Ca0yp9nL78CxBU37Q4SfR59X1Di67yzUNlN8JaUcma_54q1_wwL7jM5lujI03StkE31R5QjG8ucNyzw?width=1280&height=721&cropmode=none)

## [アプリケーションの設計・開発の考え方](https://cio.go.jp/sites/default/files/uploads/documents/dp2019_01-01.pdf)

![](https://upcdmw.bl.files.1drv.com/y4mdz0_BZkbePU4aHRGoGB5yHHVIrrYSj-slt69BFZ_3hmaA9o0Evb4HGWclJuhMezkUdY38-3CjlKuOmd0A7ZlY40BmYHL8sLgMX3ZnTVRfFBr8t5s5cKMNjDob6CVRWdrYq6KnjiYXQVgS176hrM7JXbEee-7b8SULO6d8noqnx3fP6auul1U8tsPDfKsooQ1Ufn62zDX-3wsDPqlesPSmg?width=1280&height=713&cropmode=none)


政府から方針がでている。政府のペーパーに沿った提案が出てくるのではないか

# クラウドの非機能要件・運用管理

![](https://upcgmw.bl.files.1drv.com/y4mqDE39XdD1a6modihFzbZbfyl87mCaERmrLtkvb2UnEc1UTFAZAAndi1puWs8oB8gbl_DWHj7MtMfTDtdO6aO6ZqitBsOfFFh4idyyoPBm5KLcZXWxYtcZDD0Bf7tKmDgmyzQUL_RLAm9Qz8WwAgdH9oCAYuWiqvP9gjcdvArZ9HM2SuEPvdeQmG3DOcaQXIbv3xyn_Do_HmCaqcyeqKgLQ?width=1280&height=702&cropmode=none)

運用管理について、オンプレとクラウドに違いがあるのではないか。

おすすめとしては、Azure アーキテクチャセンターである。24時間365日自動監視　障害一次対応を行ってくれる。

![](https://upcemw.bl.files.1drv.com/y4mybHVHlIoZnuXW0kePFuCIimRqcCmQspCHHRgeCAXlvlCHTeNwjflX9k7RlmImbY6vrjgJXONo-fqq87R1qyOgeE9QurRpsGrbXAA2FvjmU0EOqAP1xrxdRN5FNgyjlWVuQ5aP1fGcBVDsbMnAc4wuUcwHIFg39WNCjcKJB3lYiSbu01aVC-R4OOn-ZJLtivMRm97oy-h_KRZty07VIA3mQ?width=1280&height=720&cropmode=none)

### Paas運用管理の仕組み

![](https://upcbmw.bl.files.1drv.com/y4mDR5RMMVwXPzNZPWSLlKUjM0hjbL_32Y3h2bDs51VumOvV_ZgcgA2soQH3VW7BQARl8EBaBlEvdY1_q6XL4RVxqJXJGesfd5NPM0h9_jHyAwRYqp5frfarykQnJ5aIeevVHsYZEjZauEFx-kFlhttMXMbzcGS1UN18wlTQDg54XlqYClL5j-yCMMk3FqczJ7oSdLVZgcrzRYqeKCDrQW6AA?width=1280&height=674&cropmode=none)

# 聴講者とのQA

## クラウドにおける運用管理で困っていることは？

### Q:顧客がSQLサーバーを買うという形態の場合はどうすればよいか

ライセンス的な話かと思います。サブスクリプションで売れるということがあるので、セッションの後で紹介します。

### Q:ログが分散したときにコンテナ間のログをどのように見ていけばよいのかがわからない

1つ1つの監視をするかKubernetesに任せていく方向が良い。

モニタリングツールをどうするか、という問題が出てくる

- OSSでやり続けるのか、クラウドの監視サービスを使うのか
- 迷ったときには実際に運用するメンバーも考えて選択したほうが良い。開発者の視点だと分かりにくいが、実際には運用するベンダーを探すという方法も考えるか、APIのホップ数を減らすということも考える。やりすぎると、追いづらいしパフォーマンスも遅くなる。

アプリケーションについては、FailSafeに設計しておけば、気が付かないうちに復活していく。具体的には[Chaos Monkey](https://www.publickey1.jp/blog/12/chaos_monkeynetflix.html)を使用する。

### Q:うちでやっている案件で、マイクロサービスを使うと依存性が多くなってしまう

障害が発生したときに、発生個所以外が本当の原因ということがある。

- 最初に関係図を作成する

- サービスが停止することよりも、データが消えることのほうがクリティカルな障害
  - SLAも大事だけど、データが消えないように設計を行っておくことが大事
  - 冗長性をとるとデータが二重になる。データが2重になってもよいようにユニーク性を考えたほうが良い

マイクロサービスを細かくしすぎない。

- 結果性を保つことはできない。マイクロサービスの中で完結したほうが良い。連動して動くようにすると難易度が多いし、デッドキュー

- ちょうどよい粒度というのは、アクターベースで作っていくとよいのではないか。データの整合性だけを考えると、マイクロサービスに切れない。進化するユースケースを書き込んで、自己完結するサービス

- 大きくしすぎると、わかりにくい

  - 出荷できるサイズがマイクロサービスのサイズ。出荷できるサイズをチームで決めてやっていく

アジャイルすると早くなるというのは幻想

- 戦略を考えてどういうサービスにしていくのが大事。どういう戦略をするとき（全体戦略、システムあーきてくちゃ）ということを考えて、設計していくことが大事

コンテキストマップについて

- ユースケースという話が出てきたが、[ドメイン駆動開発](https://www.google.co.jp/search?ei=y5oJXc7RDPuKr7wP4ZGf6AE&q=DDD+%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA&oq=DDD+%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA&gs_l=psy-ab.3..0i4.2732.7123..7376...4.0..0.277.5981.0j1j24......0....1..gws-wiz.......0j0i4i30.whwG2NeZcYI)を採用するのが良いと思う

- コンテキストマップ
  - コンテキストマップこそが戦略なので、こういうユースケースを作るためのシステムである。レガシーはボックスにまとめて、古いシステムをラッピングする

# まとめ

![](https://u5chmw.bl.files.1drv.com/y4ml6lHIkl6q0RFQTAAYrNYp9FgWPTQC-HgTTxsHb5mv71zn9VqKA-VD72N27Pi0EIF108cARJfr_DFu8ZR5tMH8uXAC-qxUQCWkGz_auIfURAkoz6RU2-Jd-rkAGEa0klKWVlxUDn1F1dQ3ZxFhOBdiPzXGomAB89gvsN0AfuShzerhGy_diRjHAFSc7wozxwaOjjZpxxlIba5V20tXs4pzQ?width=1280&height=722&cropmode=none)

# この続きはオンラインで！

![](https://u5ckmw.bl.files.1drv.com/y4mTfIU_TeEobhSYocpMDq1dAXT2GkYCnR6wgquqaF8asdRauEHP0MaEVsv6NcUoXM6aO3nGNtZz4Y5PeG_YeR_jqFlFsZOJ9yNmO5xvgM3kfZZtLfyeJzjJOCNQFxByLpNHutvIDRB0uPYiEZAcpPSbSYl_XQdI2DqfbIpbJjWVPtrQqnvTeoXK5-sFR_EEdM8qtQ8iFpcoMXGXwEFQYTiBA?width=1280&height=720&cropmode=none)