オルターブースが実践する
.NET Core “ガチ” 開発
2018/09/29 Fukuoka.NET Conf 2018
@tsubakimoto_s
松村優大 (MLBお兄さん)
• 株式会社オルターブース
業務執行役員/CTA
• C#/PHP/Azure/AWS
• 島根県出身 31歳
2
つまらない世界からもっと刺激のある世界へ変化させよう!
今日お話しすること
オルターブースの開発現場
アプリケーションチームがどのようなテ
クノロジーやプラットフォームを採用し、
プロダクト開発を進めているかをご紹介
します。
4
DevOpsの実現に必要なテクノロジーを使っている
5
Application
6
GitHub で Microsoft および .NET コミュニティに
よって管理されるオープンソースの一般的な開発
プラットフォームです。
クロスプラットフォームであり、Windows、
macOS、Linux をサポートし、デバイス、クラウ
ド、および IoT アプリケーションで使用できます。
7
8
Cross-platform
Consistent across
architectures
Command-line tools Flexible deployment
Compatible Open source
Supported by Microsoft
9
.NET Coreのバージョンとサポート計画
バージョン レベル リリース日 サポート終了日
1.0 LTS 2016/06/27 2019/06/27
1.1 LTS 2016/11/16 2019/06/27
2.0 Current 2017/08/14 2018/10/01
2.1 LTS 2018/05/30
At least three years
from LTS declaration
(August 21, 2018)
2.2.0-preview2 Preview 2018/09/12 -
10
.NET Coreのバージョンとサポート計画
バージョン レベル リリース日 サポート終了日
1.0 LTS 2016/06/27 2019/06/27
1.1 LTS 2016/11/16 2019/06/27
2.0 Current 2017/08/14 2018/10/01
2.1 LTS 2018/05/30
At least three years
from LTS declaration
(August 21, 2018)
2.2.0-preview2 Preview 2018/09/12 -
11
Current (現在のリリース)
新機能を含むが将来的な変更の可能性あり
継続的なアップデートが必要
LTS (Long Term Support/長期的サポート)
安定的な機能やコンポーネントを提供
更新頻度を減らしたいアプリケーション向き
.NET Coreの最新を追いかける
バグを怖がらず、Issue投げるくらいの気持ちで。
12
なぜ頻繁にアップデートできるか?
根拠
• 単体テストを書いている(≠DDD)
• CI/CD環境が確立されている
方法
• アップデートのキャッチアップ
• 技術知識、ノウハウの社内共有
13
今日書いたコードは
今日テストを書く
どうやってキャッチアップする?
とにかく公式ドキュメントや公式ブログ
を読む。FeedlyやSlackに流している。
GitHubの公式リポジトリも見る。ただし
全てをチェックするのは無理。
dotnetやAzureは「アナウンス用のリポジ
トリ」があり、最新情報はIssueとして登
録されるからそれを読む。
14
15
16
オルターブースが.NET Coreを使う理由
• OSを限定しなくて済む(開発者的に)
• ただしIDEはVisual Studio一択
• Azureの多くのサービスはC#で実装可能
• コンテナーやマイクロサービスな構成を実
現しやすい
• Microsoftが言語とフレームワークをサポー
トしている
• かつOSSであるため情報を探しやすい
17
I. Codebase
II. Dependencies
III. Config
IV. Backend services
V. Build, release, run
VI. Processes
VII.Port binding
VIII.Concurrency
IX. Disposability
X. Dev/prod parity
XI. Logs
XII.Admin processes
この12の原則に沿うことで、クラウドや
コンテナーといった環境で実行すること
に適したアプリケーションを実装できる。
Codebase
Gitなどを使用して変更を管理しましょう。
オルターブースではGitHub Flowを適用し
ている。
Dependencies
NuGetなどでライブラリを導入して使用
する。
自分たちで作ったライブラリもNuGetと
してプライベートに配布し利用する。
(プロジェクト参照はダメ)
Config
設定はコードから厳密に分離すること。
環境変数や専用のJSONファイルを使う。
Application Architecture
• ASP.NET Core 2.1
• Entity Framework Core 2.1 → Model First Migration
• .NET Standard 2.0 → プロジェクト間の共通機能
• Repository Pattern, Service Layer Pattern
• xUnit
• Log → Azure Application Insights
• Serverlessの活用
23
.NET FRAMEWORK
24
UsersController
IUserService
IUserRepositoryUserService
UserRepository
DbContext
etc
DI
実装
実装
DI
DI
DI : Dependency Injection (依存性注入)
リソースを
操作するクラス
Repositoryを操作す
るビジネスロジック
単体テストで
差し替える
単体テストで
差し替える
Application Architecture
• ASP.NET Core 2.1
• Entity Framework Core 2.1 → Model First Migration
• .NET Standard 2.0 → プロジェクト間の共通機能
• Repository Pattern, Service Layer Pattern
• xUnit
• Log → Azure Application Insights
• Serverlessの活用
25
Serverless Services on
Microsoft Azure
26
27https://www.youtube.com/watch?v=cOFlSvnupQM
28
Azure Functions
Logic Apps
Event Grid
29
Platform as a Service
アプリケーション
コード
ロジック
トリガー
Azure
Functions
30
イベントドリブン型のコードを実行でき
るサービス。従来のホスティングプラン
の他、実行時間・実行回数に対する従量
課金プランが提供されている。
Webhookをはじめ、Microsoft Azure、
Microsoft Graph、サードパーティの
サービスと連携することができる。
Functionsの使いどころ
• アプリケーション本体から分離できる
• アプリケーションと非同期で実行できる
• 処理の粒度(規模)が小さい/小さくできる
• Azureリソースが処理の起点となる
• Azureリソースに結果/データを出力する
• SaaS同士をWebhookで連携したい
31
32
33
マイソースファクトリーの変遷
バージョン レベル リリース日
1.0 LTS 2016/06/27
1.1 LTS 2016/11/16
2.0 Current 2017/08/14
2.1 LTS 2018/05/30
2.2.0-preview2 Preview 2018/09/12
34
当然ながら常に
アップデート
35
ASP.NET Core 2.2で
機能化される予定
Appendix
36
• 公式ドキュメント
• https://docs.microsoft.com/ja-jp/dotnet/core/
• https://docs.microsoft.com/ja-jp/aspnet/core/
• https://docs.microsoft.com/ja-jp/ef/core/
• https://blogs.msdn.microsoft.com/dotnet
• https://blogs.msdn.microsoft.com/webdev
• https://azure.microsoft.com/ja-jp/overview/serverless-computing/
• https://azure.microsoft.com/ja-jp/campaigns/serverless/
• GitHub
• https://github.com/dotnet-presentations/home
• https://github.com/dotnet/core
• https://github.com/dotnet/announcements
• https://github.com/aspnet/Announcements
• https://github.com/Azure/app-service-announcements
• https://github.com/dotnet-architecture/HealthChecks
37
ご清聴ありがとうございました
38

オルターブースが実践する .NET Core “ガチ” 開発