SlideShare a Scribd company logo
1 of 37
.NET Core と
マルチ プラットフォーム
荒井 省三
日本マイクロソフト株式会社
アジェンダ
• .NET Core 概要
• CLI ランタイムの仕組み
• 標準化
• マルチプラットフォームでは
• .NET CLI と .NET Framework
• まとめ
.NET Core とは
.NET Framework .NET Core XAMARIN
アプリ
モデル
ベース
ライブラリ
.NET Core とは
.NET Framework .NET Core XAMARIN
アプリ
モデル
ベース
ライブラリ
CLI のプログラムを動かす仕組み
プログラム
実行エンジン
ホスト OS
ライブラリ参照
ロード
アセンブリ (Assembly )
• プログラムの入れ物
• Portable Executable フォーマット
PE ヘッダー
PE 拡張ヘッダー
メタデータ
ヘッダー
メタデータ
CLI で規定された
ファイル フォーマット
標準化
• Common Language Infrastructure
ISO/IEC 2721
ECMA-335
JIS X3016
• Microsoft Open Promise
• Microsoft Reference Source
• .NET Core - MIT License
CLI とは (※)
• 第1章 概念とアーキテクチャ
• 第2章 メタデータ定義及び意味論
• 第3章 CIL 命令集合
• 第4章 プロファイル及びライブラリ
• 第5章 デバッグ情報交換形式
• 第6章 付属書
適用範囲、見本プログラム、CIL アセンブラの実装、
クラス ライブラリの設計ガイドライン、可搬性に関する考察、
厳密でない違反、並列ライブラリ
※JIS X3016 より引用
第 1 章 概念とアーキテクチャ (※)
• 6. 共通言語基盤の概要
型安全との関係、管理下駆動実行との関係
• 7. 共通言語仕様 (CLS)
• 8. 共通型システム (CTS)
• 9. メタデータ
• 10. 共通言語仕様のための名前及び型の規則
※JIS X3016 より引用
6. 共通言語基盤の概要 (※)
• 共通型システム (CTS)
• メタデータ
• 共通言語仕様 (CLS)
• 仮想実行システム (VES)
仮想実行システム(VES)はCTSモデルを実装し強制する。VESは,
CLIのために書かれたプログラムのロード及び実行を行う。
• CLIのこれらの側面は,分散コンポーネント及びアプリケーション
を設計し,開発し,配置し,実行するための統一フレームワークを
形作る。
※JIS X3016 より引用
第 2 章 メタデータ及び意味論 (※)
• 24. メタデータの物理的な配置
PE (Portable Executable) フォーマット
※JIS X3016 より引用
CLI と仮想実行システムの関係
CLI
VES
CTS
CLS
CLI と実装系の関係とは
CLI/VES
CoreCLRCLR
Mono
Runtime
VES の仕組みを考えてみる
アセンブリ メタデータ
ローダー 実行時クラス情報
EEClass
クラス
ローダー
フィールド データ
インスタンス
メソッド テーブル
メソッドA
メソッドB
メソッドC
…
CIL テーブル
実装A
実装B
実装C
…
Native Cache
実装A
実装B
実装C
…
JIT
実行時クラス
インスタンス
VES の特徴
• ターゲットを特定していない仮想実行システム
• アセンブリ (PE フォーマット) をロードする
• 管理下データ (Managed Data) = GC
• 型安全 (Type Safe) = スタック ウォークなど
• アプリケーション ドメインが実行単位
CLRは、アプリ、Shared、System の 3ドメイン
• コードの最適化 = JIT による実行時の最適化
ターゲット プラットフォームごとに異なる JIT 実装が可能
AOT や NGEN は、実行時の最適化ではない
マルチプラットフォームで同じか?
.NET Framework .NET Core XAMARIN
アプリ
モデル
ベース
ライブラリ
同じコードか?
• 仮想実行システム (VES)
• 同じサービスを提供できれば問題ない
• プラットフォームごとに、システム コールなどが違っている
• ライブラリ
• 同じサービスを提供できれば問題ない = API セット
• プラットフォームに依存するものは、異なる実装
• コンパイラ
• 同じサービスを提供できれば問題ない
• コードの最適化はプラットフォームごとに違っているもの
同じコードでないのに配布可能なのは?
• .NET CLI では、publish オプション を使用
• Publish オプションは何かをしている
• Framework や Runtime オプションがある
• 指定しなければ、全てのプラットフォームがターゲット
• Runtime オプションを指定すれば、目的のプラットフォームのみ
.NET Standard とは何か
• CLI のおける FCL(Framework Class Library) に相当?
• .NET Framework における BCL(Base Class Library) に相
当?
• CoreFX とは違うもの
• Mscorlib + に相当
• 実体は何か?
• メタ パッケージ
• NETStandard.Library によって記述されるパッケージは、プラット
フォームのベースに位置するので、特別に扱われます(※)。
※doc.microsoft.com より引用
パッケージ (※)
• メタパッケージ
• NETStandard.Library
• Microsoft.NETCore.App
• フレームワーク
• フレームワーク バージョンは、新しい API が追加されると更新され
ます。
• netcoreapp
• netstandard
• ランタイム識別子 (RID)
• ターゲットのプラットフォームを識別する
※doc.microsoft.com より引用
新規プロジェクト
• dotnet new console –o test
• test フォルダ
• Test.csproj
• Program.cs
test.csproj
• フレームワークが 「netcoreapp1.1」と定義
• Microsoft.NET.Sdk が、.NET Core SDK を意味する
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
</Project>
パッケージのリストア
• dotnet restore
• Obj フォルダ
project.assets.json Nuget パッケージの構成ファイル
test.csproj.nuget.g.props プロジェクト プロパティの構成ファイル
test.csproj.nuget.g.targets Msbuild の targets ファイル
project.assets.json 抜粋 1/4
{
"version": 2,
"targets": {
".NETCoreApp,Version=v1.1": {
"Libuv/1.9.1": {
"type": "package",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.0.1"
},
"runtimes/fedora-x64/native/libuv.so": {
"assetType": "native",
"rid": "fedora-x64"
},
"runtimes/win7-x64/native/libuv.dll": {
"assetType": "native",
"rid": "win7-x64"
},
}
}
},
project.assets.json 抜粋 続き 2/4
"projectFileDependencyGroups": {
".NETCoreApp,Version=v1.1": [
"Microsoft.NETCore.App >= 1.1.2"
]
},
"packageFolders": {
"C:Usersshozoa.nugetpackages": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": 省略
"frameworks": {
"netcoreapp1.1": {
"dependencies": {
"Microsoft.NETCore.App": {
"target": "Package",
"version": "1.1.2"
}
project.assets.json 抜粋 続き 3/4
"Microsoft.NETCore.App/1.1.2": {
"type": "package",
"dependencies": {
"Libuv": "1.9.1",
"Microsoft.CSharp": "4.3.0",
"Microsoft.CodeAnalysis.CSharp": "1.3.0",
"Microsoft.CodeAnalysis.VisualBasic": "1.3.0",
"Microsoft.DiaSymReader.Native": "1.4.1",
"Microsoft.NETCore.DotNetHostPolicy": "1.1.2",
"Microsoft.NETCore.Runtime.CoreCLR": "1.1.2",
省略
"NETStandard.Library": "1.6.1",
},
"compile": {
"lib/netcoreapp1.0/_._": {}
},
"runtime": {
"lib/netcoreapp1.0/_._": {}
}
},
project.assets.json 抜粋 続き 4/4
"NETStandard.Library/1.6.1": {
"type": "package",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.Win32.Primitives": "4.3.0",
"System.AppContext": "4.3.0",
"System.Collections": "4.3.0",
"System.Collections.Concurrent": "4.3.0",
"System.Console": "4.3.0",
省略
"System.Runtime": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Text.Encoding.Extensions": "4.3.0",
"System.Text.RegularExpressions": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"System.Threading.Timer": "4.3.0",
"System.Xml.ReaderWriter": "4.3.0",
"System.Xml.XDocument": "4.3.0"
}
プロジェクトの実行
• dotnet run
• もしくは
dotnet binDebugnetcoreapp1.1test.dll
objDebugnetcoreapp1.1 ビルドの中間モジュール
binDebugnetcoreapp1.1 ビルド結果
アセンブリの依存関係
アセンブリの依存関係
• 実行したアセンブリは、test.dll
• 拡張子は「exe」ではない
• アセンブリ依存関係では、.NET Framework へ移送している
• 実際に動作しているランタイムは何か?
System.Runtime 4.1.0.0
System.Console 4.0.0.0
Windows における実行時のランタイム
donet
アセンブリ dll
ランタイム CoreCLR
.NET
Framework
exe
CLRBCL
CoreFX
型を参照するとは何か
using System;
namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var s = Console.ReadLine();
}
}
}
メタデータ 1/2
Token Version Flags PublicKey Name Culture HashValue
23000001 4.1.0.0 0 b03f5f7f11d50a3a System.Runtime
23000002 4.0.0.0 0 b03f5f7f11d50a3a System.Console
AssemblyRef(0x23)
Token ResolutionScope Name Namespace
01000003 23000001 DebuggableAttribute System.Diagnostics
…
01000008 23000001 Object System
01000009 23000002 Console System
TypeRef(0x01)
TypeRef メタデータは、ResolusionScope によってアセンブリを特定する
AssemblyRef メタデータは、アセンブリ識別子を記録している
メタデータ 2/2
Token ResolutionScope Name Namespace
01000003 23000001 DebuggableAttribute System.Diagnostics
…
01000008 23000001 Object System
01000009 23000002 Console System
TypeRef(0x01)
Token MemberRefParent Name Signature
0a000001 01000001 .ctor 0x20010108 (引数1、I4、void)
…
0a000007 01000009 WriteLine 0x0001010e (引数1、string、void)
0a000008 01000009 ReadLine 0x00000e (引数無し、string)
MemberRef(0x0a)
シグネチャは、メソッドの呼び出し規約、パラメータ、戻り値などを符号化した値
シグネチャによって、オーバーロードされたメソッドを特定できる
Bait and Switch
• 型を参照することをメタデータでは
• アセンブリ参照(アセンブリ識別子)
• 型(クラス)名
• メソッド名とメソッド シグネチャ
• パッケージ システムを使ったテクニック
• コンパイル時は、メタデータのみを解決
• 配布時にプラットフォーム固有のアセンブリに置き換える
• メタデータの特徴を活用したテクニック
• AssemblyRef, TypeRef, MemberRef
ASP.NET Core
• ASP.NET MVC
• .NET Framework に対する追加の Web フレームワーク
• HTTP モジュールと組み合わせて、MVC を実現
• モデル、コントローラー、ビュー (ビュー エンジンを提供)
• ASP.NET Core として、オープンソース化
• ミドルウェア パイプライン
• HTTP モジュール パイプラインの OSS 実装
• 実装したサーバーが、Kestrel
libuv (node.js が使用している非同期ライブラリ)
実運用には、リバース プロキシを推奨
まとめ
• .NET Core とは CLI を実装したもの
• CLI に完全に準拠はできていない
• AppContext – AppDomain
• マルチ プラットフォーム対応
• Bait and Switch テクニックによる
• .NET Standard ライブラリ
• API セットによる依存関係管理の仕組み
• バージョン番号による互換性管理

More Related Content

What's hot

20170624 interact2017 open shift on azure
20170624 interact2017 open shift on azure20170624 interact2017 open shift on azure
20170624 interact2017 open shift on azureTakayoshi Tanaka
 
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-Takakiyo Tanaka
 
PowerShell の基本操作とリモーティング&v3のご紹介 junichia
PowerShell の基本操作とリモーティング&v3のご紹介 junichiaPowerShell の基本操作とリモーティング&v3のご紹介 junichia
PowerShell の基本操作とリモーティング&v3のご紹介 junichiajunichi anno
 
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugOpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugYuji Kubota
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortemtamtam180
 
Open Liberty / WebSphere Liberty
Open Liberty / WebSphere LibertyOpen Liberty / WebSphere Liberty
Open Liberty / WebSphere LibertyTakakiyo Tanaka
 
Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51
Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51
Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51Takakiyo Tanaka
 
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51Takakiyo Tanaka
 
JJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめようJJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめようNorito Agetsuma
 
.NET 5 勉強会 ~.NET Framework から .NET へ~
.NET 5 勉強会 ~.NET Framework から .NET へ~.NET 5 勉強会 ~.NET Framework から .NET へ~
.NET 5 勉強会 ~.NET Framework から .NET へ~Fujio Kojima
 
Panamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶPanamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶYasumasa Suenaga
 
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumiリアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumiYuta Okamoto
 
ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発Takakiyo Tanaka
 
最近の PowerShell のお話
最近の PowerShell のお話最近の PowerShell のお話
最近の PowerShell のお話Kazuki Takai
 
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? WayOpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Wayロフト くん
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2tamtam180
 
Java EE 6で復活するエンタープライズJavaの世界
Java EE 6で復活するエンタープライズJavaの世界Java EE 6で復活するエンタープライズJavaの世界
Java EE 6で復活するエンタープライズJavaの世界Takakiyo Tanaka
 
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57Toshiaki Maki
 

What's hot (20)

20170624 interact2017 open shift on azure
20170624 interact2017 open shift on azure20170624 interact2017 open shift on azure
20170624 interact2017 open shift on azure
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
.NET Core 1.0
.NET Core 1.0.NET Core 1.0
.NET Core 1.0
 
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
IBMが新しいJava EEコンテナを作っているらしい -Libertyプロファイルとは-
 
PowerShell の基本操作とリモーティング&v3のご紹介 junichia
PowerShell の基本操作とリモーティング&v3のご紹介 junichiaPowerShell の基本操作とリモーティング&v3のご紹介 junichia
PowerShell の基本操作とリモーティング&v3のご紹介 junichia
 
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugOpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjug
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
Open Liberty / WebSphere Liberty
Open Liberty / WebSphere LibertyOpen Liberty / WebSphere Liberty
Open Liberty / WebSphere Liberty
 
Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51
Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51
Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51
 
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51WebSphere Application Server V8.5.5Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
WebSphere Application Server V8.5.5 Libertyプロファイルのご紹介 #jjug_ccc #ccc_r51
 
JJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめようJJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめよう
 
.NET 5 勉強会 ~.NET Framework から .NET へ~
.NET 5 勉強会 ~.NET Framework から .NET へ~.NET 5 勉強会 ~.NET Framework から .NET へ~
.NET 5 勉強会 ~.NET Framework から .NET へ~
 
Panamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶPanamaを先取り!? JVMCIでJITと遊ぶ
Panamaを先取り!? JVMCIでJITと遊ぶ
 
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumiリアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
 
ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発
 
最近の PowerShell のお話
最近の PowerShell のお話最近の PowerShell のお話
最近の PowerShell のお話
 
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? WayOpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Way
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
Java EE 6で復活するエンタープライズJavaの世界
Java EE 6で復活するエンタープライズJavaの世界Java EE 6で復活するエンタープライズJavaの世界
Java EE 6で復活するエンタープライズJavaの世界
 
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
 

Similar to Dot netcore multiplatform 2

CLI と BCL
CLI と BCLCLI と BCL
CLI と BCLshozon
 
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~Akira Inoue
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
ASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうDevTakas
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-PE-BANK
 
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線Akira Inoue
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにAtsuhiro Kubo
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShiftEtsuji Nakai
 
20121115 fukuoka sublime0_kuroneko
20121115 fukuoka sublime0_kuroneko20121115 fukuoka sublime0_kuroneko
20121115 fukuoka sublime0_kuronekoKohki Nakashima
 
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~Akira Inoue
 
ソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドToru Tamaki
 
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説Akira Inoue
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッションYuichi Hasegawa
 
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来decode2016
 
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!Akira Inoue
 
Azure Infrastructure as Code 体験入隊
Azure Infrastructure as Code 体験入隊Azure Infrastructure as Code 体験入隊
Azure Infrastructure as Code 体験入隊Toru Makabe
 
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境Katsutoshi Nagaoka
 

Similar to Dot netcore multiplatform 2 (20)

CLI と BCL
CLI と BCLCLI と BCL
CLI と BCL
 
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
 
Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
ASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おう
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
 
sveltekit-ja.pdf
sveltekit-ja.pdfsveltekit-ja.pdf
sveltekit-ja.pdf
 
qmake入門
qmake入門qmake入門
qmake入門
 
試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift試して学べるクラウド技術! OpenShift
試して学べるクラウド技術! OpenShift
 
20121115 fukuoka sublime0_kuroneko
20121115 fukuoka sublime0_kuroneko20121115 fukuoka sublime0_kuroneko
20121115 fukuoka sublime0_kuroneko
 
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
 
ソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルド
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
 
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
ASP.NET 新時代に向けて ~ ASP.NET 5 / Visual Studio 2015 基礎解説
 
Jjug springセッション
Jjug springセッションJjug springセッション
Jjug springセッション
 
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
 
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
 
Azure Infrastructure as Code 体験入隊
Azure Infrastructure as Code 体験入隊Azure Infrastructure as Code 体験入隊
Azure Infrastructure as Code 体験入隊
 
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
 

Recently uploaded

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 

Recently uploaded (8)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 

Dot netcore multiplatform 2

  • 1. .NET Core と マルチ プラットフォーム 荒井 省三 日本マイクロソフト株式会社
  • 2. アジェンダ • .NET Core 概要 • CLI ランタイムの仕組み • 標準化 • マルチプラットフォームでは • .NET CLI と .NET Framework • まとめ
  • 3. .NET Core とは .NET Framework .NET Core XAMARIN アプリ モデル ベース ライブラリ
  • 4. .NET Core とは .NET Framework .NET Core XAMARIN アプリ モデル ベース ライブラリ
  • 6. アセンブリ (Assembly ) • プログラムの入れ物 • Portable Executable フォーマット PE ヘッダー PE 拡張ヘッダー メタデータ ヘッダー メタデータ CLI で規定された ファイル フォーマット
  • 7. 標準化 • Common Language Infrastructure ISO/IEC 2721 ECMA-335 JIS X3016 • Microsoft Open Promise • Microsoft Reference Source • .NET Core - MIT License
  • 8. CLI とは (※) • 第1章 概念とアーキテクチャ • 第2章 メタデータ定義及び意味論 • 第3章 CIL 命令集合 • 第4章 プロファイル及びライブラリ • 第5章 デバッグ情報交換形式 • 第6章 付属書 適用範囲、見本プログラム、CIL アセンブラの実装、 クラス ライブラリの設計ガイドライン、可搬性に関する考察、 厳密でない違反、並列ライブラリ ※JIS X3016 より引用
  • 9. 第 1 章 概念とアーキテクチャ (※) • 6. 共通言語基盤の概要 型安全との関係、管理下駆動実行との関係 • 7. 共通言語仕様 (CLS) • 8. 共通型システム (CTS) • 9. メタデータ • 10. 共通言語仕様のための名前及び型の規則 ※JIS X3016 より引用
  • 10. 6. 共通言語基盤の概要 (※) • 共通型システム (CTS) • メタデータ • 共通言語仕様 (CLS) • 仮想実行システム (VES) 仮想実行システム(VES)はCTSモデルを実装し強制する。VESは, CLIのために書かれたプログラムのロード及び実行を行う。 • CLIのこれらの側面は,分散コンポーネント及びアプリケーション を設計し,開発し,配置し,実行するための統一フレームワークを 形作る。 ※JIS X3016 より引用
  • 11. 第 2 章 メタデータ及び意味論 (※) • 24. メタデータの物理的な配置 PE (Portable Executable) フォーマット ※JIS X3016 より引用
  • 14. VES の仕組みを考えてみる アセンブリ メタデータ ローダー 実行時クラス情報 EEClass クラス ローダー フィールド データ インスタンス メソッド テーブル メソッドA メソッドB メソッドC … CIL テーブル 実装A 実装B 実装C … Native Cache 実装A 実装B 実装C … JIT 実行時クラス インスタンス
  • 15. VES の特徴 • ターゲットを特定していない仮想実行システム • アセンブリ (PE フォーマット) をロードする • 管理下データ (Managed Data) = GC • 型安全 (Type Safe) = スタック ウォークなど • アプリケーション ドメインが実行単位 CLRは、アプリ、Shared、System の 3ドメイン • コードの最適化 = JIT による実行時の最適化 ターゲット プラットフォームごとに異なる JIT 実装が可能 AOT や NGEN は、実行時の最適化ではない
  • 16. マルチプラットフォームで同じか? .NET Framework .NET Core XAMARIN アプリ モデル ベース ライブラリ
  • 17. 同じコードか? • 仮想実行システム (VES) • 同じサービスを提供できれば問題ない • プラットフォームごとに、システム コールなどが違っている • ライブラリ • 同じサービスを提供できれば問題ない = API セット • プラットフォームに依存するものは、異なる実装 • コンパイラ • 同じサービスを提供できれば問題ない • コードの最適化はプラットフォームごとに違っているもの
  • 18. 同じコードでないのに配布可能なのは? • .NET CLI では、publish オプション を使用 • Publish オプションは何かをしている • Framework や Runtime オプションがある • 指定しなければ、全てのプラットフォームがターゲット • Runtime オプションを指定すれば、目的のプラットフォームのみ
  • 19. .NET Standard とは何か • CLI のおける FCL(Framework Class Library) に相当? • .NET Framework における BCL(Base Class Library) に相 当? • CoreFX とは違うもの • Mscorlib + に相当 • 実体は何か? • メタ パッケージ • NETStandard.Library によって記述されるパッケージは、プラット フォームのベースに位置するので、特別に扱われます(※)。 ※doc.microsoft.com より引用
  • 20. パッケージ (※) • メタパッケージ • NETStandard.Library • Microsoft.NETCore.App • フレームワーク • フレームワーク バージョンは、新しい API が追加されると更新され ます。 • netcoreapp • netstandard • ランタイム識別子 (RID) • ターゲットのプラットフォームを識別する ※doc.microsoft.com より引用
  • 21. 新規プロジェクト • dotnet new console –o test • test フォルダ • Test.csproj • Program.cs
  • 22. test.csproj • フレームワークが 「netcoreapp1.1」と定義 • Microsoft.NET.Sdk が、.NET Core SDK を意味する <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp1.1</TargetFramework> </PropertyGroup> </Project>
  • 23. パッケージのリストア • dotnet restore • Obj フォルダ project.assets.json Nuget パッケージの構成ファイル test.csproj.nuget.g.props プロジェクト プロパティの構成ファイル test.csproj.nuget.g.targets Msbuild の targets ファイル
  • 24. project.assets.json 抜粋 1/4 { "version": 2, "targets": { ".NETCoreApp,Version=v1.1": { "Libuv/1.9.1": { "type": "package", "dependencies": { "Microsoft.NETCore.Platforms": "1.0.1" }, "runtimes/fedora-x64/native/libuv.so": { "assetType": "native", "rid": "fedora-x64" }, "runtimes/win7-x64/native/libuv.dll": { "assetType": "native", "rid": "win7-x64" }, } } },
  • 25. project.assets.json 抜粋 続き 2/4 "projectFileDependencyGroups": { ".NETCoreApp,Version=v1.1": [ "Microsoft.NETCore.App >= 1.1.2" ] }, "packageFolders": { "C:Usersshozoa.nugetpackages": {} }, "project": { "version": "1.0.0", "restore": { "projectUniqueName": 省略 "frameworks": { "netcoreapp1.1": { "dependencies": { "Microsoft.NETCore.App": { "target": "Package", "version": "1.1.2" }
  • 26. project.assets.json 抜粋 続き 3/4 "Microsoft.NETCore.App/1.1.2": { "type": "package", "dependencies": { "Libuv": "1.9.1", "Microsoft.CSharp": "4.3.0", "Microsoft.CodeAnalysis.CSharp": "1.3.0", "Microsoft.CodeAnalysis.VisualBasic": "1.3.0", "Microsoft.DiaSymReader.Native": "1.4.1", "Microsoft.NETCore.DotNetHostPolicy": "1.1.2", "Microsoft.NETCore.Runtime.CoreCLR": "1.1.2", 省略 "NETStandard.Library": "1.6.1", }, "compile": { "lib/netcoreapp1.0/_._": {} }, "runtime": { "lib/netcoreapp1.0/_._": {} } },
  • 27. project.assets.json 抜粋 続き 4/4 "NETStandard.Library/1.6.1": { "type": "package", "dependencies": { "Microsoft.NETCore.Platforms": "1.1.0", "Microsoft.Win32.Primitives": "4.3.0", "System.AppContext": "4.3.0", "System.Collections": "4.3.0", "System.Collections.Concurrent": "4.3.0", "System.Console": "4.3.0", 省略 "System.Runtime": "4.3.0", "System.Text.Encoding": "4.3.0", "System.Text.Encoding.Extensions": "4.3.0", "System.Text.RegularExpressions": "4.3.0", "System.Threading": "4.3.0", "System.Threading.Tasks": "4.3.0", "System.Threading.Timer": "4.3.0", "System.Xml.ReaderWriter": "4.3.0", "System.Xml.XDocument": "4.3.0" }
  • 28. プロジェクトの実行 • dotnet run • もしくは dotnet binDebugnetcoreapp1.1test.dll objDebugnetcoreapp1.1 ビルドの中間モジュール binDebugnetcoreapp1.1 ビルド結果
  • 30. アセンブリの依存関係 • 実行したアセンブリは、test.dll • 拡張子は「exe」ではない • アセンブリ依存関係では、.NET Framework へ移送している • 実際に動作しているランタイムは何か? System.Runtime 4.1.0.0 System.Console 4.0.0.0
  • 32. 型を参照するとは何か using System; namespace ConsoleApplication { public class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); var s = Console.ReadLine(); } } }
  • 33. メタデータ 1/2 Token Version Flags PublicKey Name Culture HashValue 23000001 4.1.0.0 0 b03f5f7f11d50a3a System.Runtime 23000002 4.0.0.0 0 b03f5f7f11d50a3a System.Console AssemblyRef(0x23) Token ResolutionScope Name Namespace 01000003 23000001 DebuggableAttribute System.Diagnostics … 01000008 23000001 Object System 01000009 23000002 Console System TypeRef(0x01) TypeRef メタデータは、ResolusionScope によってアセンブリを特定する AssemblyRef メタデータは、アセンブリ識別子を記録している
  • 34. メタデータ 2/2 Token ResolutionScope Name Namespace 01000003 23000001 DebuggableAttribute System.Diagnostics … 01000008 23000001 Object System 01000009 23000002 Console System TypeRef(0x01) Token MemberRefParent Name Signature 0a000001 01000001 .ctor 0x20010108 (引数1、I4、void) … 0a000007 01000009 WriteLine 0x0001010e (引数1、string、void) 0a000008 01000009 ReadLine 0x00000e (引数無し、string) MemberRef(0x0a) シグネチャは、メソッドの呼び出し規約、パラメータ、戻り値などを符号化した値 シグネチャによって、オーバーロードされたメソッドを特定できる
  • 35. Bait and Switch • 型を参照することをメタデータでは • アセンブリ参照(アセンブリ識別子) • 型(クラス)名 • メソッド名とメソッド シグネチャ • パッケージ システムを使ったテクニック • コンパイル時は、メタデータのみを解決 • 配布時にプラットフォーム固有のアセンブリに置き換える • メタデータの特徴を活用したテクニック • AssemblyRef, TypeRef, MemberRef
  • 36. ASP.NET Core • ASP.NET MVC • .NET Framework に対する追加の Web フレームワーク • HTTP モジュールと組み合わせて、MVC を実現 • モデル、コントローラー、ビュー (ビュー エンジンを提供) • ASP.NET Core として、オープンソース化 • ミドルウェア パイプライン • HTTP モジュール パイプラインの OSS 実装 • 実装したサーバーが、Kestrel libuv (node.js が使用している非同期ライブラリ) 実運用には、リバース プロキシを推奨
  • 37. まとめ • .NET Core とは CLI を実装したもの • CLI に完全に準拠はできていない • AppContext – AppDomain • マルチ プラットフォーム対応 • Bait and Switch テクニックによる • .NET Standard ライブラリ • API セットによる依存関係管理の仕組み • バージョン番号による互換性管理