Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コンテナDojo #3:[入門者歓迎] .NET 7の概要、MAUI, Web, コンテナ

コンテナDojo #3:[入門者歓迎] .NET 7の概要、MAUI, Web, コンテナ

米国Microsoft社は2022年11月8日(米国時間)に .NET 7をリリースしました。このセッションでは、.NET 7の概要を知り、特にクライアントアプリ、Web APIの開発、サーバーアプリをコンテナ化して利用していく上での技術や新機能を確認していきます。

(セッション内容)

.NET 超概要
ブラウザーで.NET / C# 体験
C# 11の新機能
パフォーマンスの改善
.NET MAUI: デスクトップ、モバイル、マルチプラットフォーム対応アプリ開発
ASP.NET Core と 簡単なWeb APIの開発
dotnetコマンドによるコンテナイメージ作成

(事前準備) 参加前に、下記のセットアップを終えておくと、セッション中/セッション後に新しい技術を試せますので、ご準備ください。

.NET 7のインストール(https://dotnet.microsoft.com/ja-jp/download)
Visual Studio または Visual Studio for Mac またはVisual Studio Codeのインストール (https://visualstudio.microsoft.com/)
Docker Desktop for Windows または Docker Desktop for Mac (https://www.docker.com/products/docker-desktop/)

Akira Onishi (IBM)

December 12, 2022
Tweet

More Decks by Akira Onishi (IBM)

Other Decks in Programming

Transcript

  1. ೔ຊΞΠɾϏʔɾΤϜגࣜձࣾ ςΫϊϩδʔࣄۀຊ෦ ΧελϚʔɾαΫηε ϓϦϯγύϧɾϚωʔδϟʔ ݉ 8JOEPXT$POUBJOFS1PSUJOH1SPHSBNਪਐϦʔμʔ େ੢ জ "LJSB0OJTIJ!JCNDPN 5XJUUFS!POJBL

     IUUQTXXXGBDFCPPLDPNBLJSBPOJTIJ IUUQTXXXMJOLFEJODPNJOPOJBL ίϯςφ %PKPୈճ <ೖ໳ऀ׻ܴ> /&5֓ཁ ."6* 8FC ίϯςφ
  2. ࣗݾ঺հ 1SPQFSUZ 7BMVF ࢯ໊ େ੢ জ 5XJUUFS-JOLFE*O POJBL *5ۀքྺ ೥໨

    ௚ۙͷ৬ྺ Microsoft ೥ *#.೥໨ )BTI5BH ͍͍Ͷ͐੩Ԭੜ׆ ࠲ӈͷ໏ ౿·Εͯ΋ͳ্ཱ͓͕ͪΔಓͷ૲ Α͘࢖͏ٕ ೴಺ม׵Ͱࣗ෼ΛϙδςΟϒʹ IUUQTXXXGBDFCPPLDPNBLJSBPOJTIJ 'BDFCPPLʮ͓ʹ͋͘ʯͰݕࡧ
  3. ࠓ೔ͷ࿩୊ /&5ͷ֓ཁΛ஌ΓɺΞϓϦ։ൃͷೖΓޱʹཱͪɺ /&5ͷ׆༻Λ૝૾͠·͢ Θ͔Βͳ͍ݴ༿͕ग़͖ͯͨΒɺ·ͣ͸ݕࡧ ϋʔυ΢ΣΞ -JOVY04 ίϯςφϓϥοτϑΥʔϜ ίϯςφ /&5 αʔόʔ

    ΞϓϦ" ίϯςφ /&5 αʔόʔ ΞϓϦ# ϋʔυ΢ΣΞ 8JOEPXT.BD-JOVY04 /&5ϓϥοτϑΥʔϜ σόΠε ΞϓϦ" ϋΠϒϦου ΞϓϦ#
  4. $ ൃԻγʔγϟʔϓ ͱ͸ ΦϒδΣΫτࢦ޲ϓϩάϥϛϯάݴޠ ΦʔϓϯιʔεɺϚϧν04ରԠ /&5ͷڞ௨ݴޠϥϯλΠϜ $-3 ্Ͱ࣮ߦ https://learn.microsoft.com/ja-jp/dotnet/csharp/tour-of-csharp/ C#

    ソースコード 中間⾔語(IL) リソース (ビット マップや⽂字列など) アセンブリ (dllファイル) 共通⾔語ランタイム (CLR) ネイティブ コード JIT コンパイル コンパイル
  5. /&5  ถࠃ࣌ؒ ϦϦʔε ϓϩάϥϛϯάݴޠͷਐԽɺ$ɺ' Y "3. TY *#.; QQDMF

    *#.1PXFS ύϑΥʔϚϯεͷվળɺωΠςΟϒίϯύΠϧ /&5."6*ɺΫϩεϓϥοτϑΥʔϜରԠ6* "41/&5$PSFɺ࠷খݶͷ"1*ͷػೳڧԽͳͲ EPUOFUQVCMJTIίϚϯυ͔Βͷίϯςφൃߦ https://learn.microsoft.com/ja-jp/dotnet/core/whats-new/dotnet-7
  6. $ͷ৽ػೳ ະՃ޻ͷจࣈϦςϥϧ δΣωϦοΫܕ਺஋ԋࢉͷαϙʔτ ൚༻ଐੑ 65'ͷจࣈྻϦςϥϧ จࣈྻิؒࣜͷվߦ Ϧετ ύλʔϯ ϑΝΠϧϩʔΧϧܕ ඞਢϝϯόʔ

    BVUPEFGBVMUߏ଄ମ TUSJOHఆ਺Ͱͷ 4QBODIBSͷύλʔϯ Ϛον ֦ு OBNFPGείʔϓ ਺஋ *OU1US SFGϑΟʔϧυͱ TDPQFESFG վળ͞Εͨɺϝιου άϧʔϓ͔ΒσϦήʔτ΁ͷม׵ ܯࠂ΢Σʔϒ  https://learn.microsoft.com/ja-jp/dotnet/csharp/whats-new/csharp-11 $ͷྺ࢙
  7. $δΣωϦοΫܕ਺஋ԋࢉ // ίʔυྫ using System.Globalization; using System.Numerics; static T Add<T>(T

    left, T right) where T : INumber<T> { return left + right; } static T ParseInvariant<T>(string s) where T : IParsable<T> { return T.Parse(s, CultureInfo.InvariantCulture); } Console.WriteLine("Hello, World!"); Console.Write("First number: "); var left = ParseInvariant<float>(Console.ReadLine()); Console.Write("Second number: "); var right = ParseInvariant<float>(Console.ReadLine()); Console.WriteLine($"Result: {Add<float>(left, right)}"); Console.WriteLine("hit any keys..."); Console.ReadKey(); https://learn.microsoft.com/ja-jp/dotnet/standard/generics/math ܕύϥϝʔλʔ͕਺஋ʹࣅͨܕ Where T : INumber<T> ʹ੍ݶ͞ΕΔ ୯ҰͷδΣωϦοΫ ϝιουΛهड़Ͱ͖Δ static T Add<T>(T left, T right) where T : INumber<T> { return left + right; } ͦΕͧΕͷܕ͝ͱʹϝιουΛॻ͔ͳͯ͘ྑ͍ͷͰ ίʔυྔ͕ݮΔʢؒҧ͍ͷՄೳੑ΋ݮΔʣ $·Ͱ͸ɺͦΕͧΕͷܕʹԠͯ͡ɺԼهͷΑ͏ͳ ϝιουͷΦʔόʔϩʔυΛ௥Ճ͢Δඞཁ͕͋ͬͨ static int Add(int first, int second) static float Add(float first, float second)
  8. /&5."6* .VMUJQMBUGPSN"QQ6* ΫϩεϓϥοτϑΥʔϜରԠΞϓϦ6*ϑϨʔϜϫʔΫ $ͱ9".-ͰΞϓϦͷ6*ͱಈ࡞Λهड़ Φʔϓϯιʔε 8JOEPXTҎ߱ 8JOEPXT NBD04Ҏ߱ NBD$BUBMZTU J04Ҏ߱

    ΞϓϦͷϏϧυʹNBDσόΠεඞਢ "OESPJE "1* Ҏ߱ ˞/&5."6*#MB[PSΞϓϦ͸ NBD04Ҏ߱ɺJ04Ҏ߱"OESPJE "1* Ҏ͕߱ඞཁ ϓϥοτϑΥʔϜݻ༗ͷίʔυΛݺͼग़͢͜ͱͰɺσόΠεͷػೳΛ׆༻Ͱ͖Δ͜ͱʹ஫໨ QBSUJBMDMBTTΛར༻ͯ͠ɺϓϥοτϑΥʔϜݻ༗ͷϝιουΛ͏·͘෼཭ https://github.com/dotnet/maui https://learn.microsoft.com/ja-jp/dotnet/maui/what-is-maui?view=net-maui-7.0
  9. 9".-ը໘࡞੒ɺ$ϩδοΫ <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="macmaui01.MainPage"> <ScrollView>

    <VerticalStackLayout Spacing="25" Padding="30,0" VerticalOptions="Center"> <Image Source="dotnet_bot.png" SemanticProperties.Description="Cute dot net bot waving hi!" HeightRequest="200" HorizontalOptions="Center" /> <Label Text="Hello, World!" SemanticProperties.HeadingLevel="Level1" FontSize="32" HorizontalOptions="Center" /> <Label Text="Welcome to .NET Multi-platform App UI" SemanticProperties.HeadingLevel="Level2" SemanticProperties.Description="Welcome to .NET MAUI App" FontSize="18" HorizontalOptions="Center" /> <Button x:Name="CounterBtn" Text="Click me" SemanticProperties.Hint="Counts the number of times you click" Clicked="OnCounterClicked" HorizontalOptions="Center" /> </VerticalStackLayout> </ScrollView> </ContentPage> // MainPage.xaml.cs (コードビハインド) namespace macmaui01; public partial class MainPage : ContentPage { int count = 0; public MainPage() { InitializeComponent(); } // CounterBtnがクリックされた時のイベントハンドラー private void OnCounterClicked(object sender, EventArgs e) { count++; if (count == 1) CounterBtn.Text = $"Clicked {count} time"; else CounterBtn.Text = $"Clicked {count} times"; SemanticScreenReader.Announce(CounterBtn.Text); } } * XAML: eXtensible Application Markup Language
  10. "41/&5$PSFͰ؆୯ͳ8FC"1*Λ࡞Δ // ۭͷASP.NET CoreϓϩδΣΫτΛ࡞ΓɺProgram.csʹԼهͷίʔυΛίϐʔ var builder = WebApplication.CreateBuilder(args); var app

    = builder.Build(); app.MapGet("/", () => "Hello World!"); app.MapGet("/net", () => "Hello .NET!"); app.MapGet("/now", () => { var now = DateTime.Now; var currDate = now.ToLocalTime().ToLongDateString(); var currTime = now.ToLocalTime().ToLongTimeString(); return $"ࠓͷ೔෇͸{currDate}ɺ࣌ࠁ͸{currTime}Ͱ͢ɻ"; }); app.Run();
  11. 3B[PSߏจ 8FCϖʔδ಺Ͱɺ!ه߸Λ࢖͍ɺ $ͷίʔυ΍ΦϒδΣΫτΛ࣮ߦ࣌ʹධՁ͠ ݁ՌΛ)5.-ϖʔδʹग़ྗ͢Δํ๏ Q-BTUXFFLUIJTUJNF! %BUF5JNF/PX  5JNF4QBO'SPN%BZT  Q

    !\ WBSKPFOFX1FSTPO z+PF   ^ Q"HF! KPF"HF Q https://learn.microsoft.com/ja-jp/aspnet/core/mvc/views/razor?view=aspnetcore-6.0
  12. 3B[PSߏจʹΑΔ)5.-ͱ$ͷࠞࡏ !QBHFGFUDIEBUB 1BHF5JUMF8FBUIFSGPSFDBTU1BHF5JUMF !VTJOHCT%BUB !JOKFDU8FBUIFS'PSFDBTU4FSWJDF 'PSFDBTU4FSWJDF I8FBUIFSGPSFDBTUI Q5IJTDPNQPOFOUEFNPOTUSBUFTGFUDIJOHEBUBGSPNBTFSWJDFQ !JG GPSFDBTUTOVMM

    \ QFN-PBEJOHFNQ ^ FMTF \ UBCMFDMBTTUBCMF UIFBE US UI%BUFUI UI5FNQ $ UI UI5FNQ ' UI UI4VNNBSZUI US UIFBE UCPEZ !GPSFBDI WBSGPSFDBTUJOGPSFDBTUT \ US UE!GPSFDBTU%BUF5P4IPSU%BUF4USJOH UE UE!GPSFDBTU5FNQFSBUVSF$UE UE!GPSFDBTU5FNQFSBUVSF'UE UE!GPSFDBTU4VNNBSZUE US ^ UCPEZ UBCMF ^ !DPEF\ QSJWBUF8FBUIFS'PSFDBTU<> GPSFDBTUT QSPUFDUFEPWFSSJEFBTZOD5BTL0O*OJUJBMJ[FE"TZOD \ GPSFDBTUTBXBJU'PSFDBTU4FSWJDF(FU'PSFDBTU"TZOD %BUF5JNF/PX  ^ ^
  13. /&5ΞϓϦͷίϯςφԽ  /&5ΞϓϦΛ࡞੒͢Δ  EPUOFUBEEQBDLBHF.JDSPTPGU/&5#VJME$POUBJOFST Λ࣮ߦ͢Δ  ֦ுࢠ DTQSPK ϑΝΠϧΛΤσΟλͰ։͖ɺ

    1SPQFSUZ(SPVQཁૉ಺ʹ $POUBJOFS*NBHF/BNFίϯςφΠϝʔδ໊$POUBJOFS*NBHF/BNF $POUBJOFS*NBHF5BHίϯςφΠϝʔδλά໊$POUBJOFS*NBHF5BH Λࢦఆ ྫ$POUBJOFS*NBHF/BNFEPUOFUXPSLFSJNBHF$POUBJOFS*NBHF/BNF $POUBJOFS*NBHF5BHBMQIB$POUBJOFS*NBHF5BH $POUBJOFS*NBHF5BHTBMQIBMBUFTU$POUBJOFS*NBHF5BHT  EPUOFUQVCMJTIίϚϯυʹ U1VCMJTI$POUBJOFS Λࢦఆ͢Δ EPUOFUQVCMJTIPT MJOVY BSDIYU1VCMJTI$POUBJOFS D3FMFBTF ˞ ϩʔΧϧͷ%PDLFSϨδετϦʹൃߦ https://learn.microsoft.com/ja-jp/dotnet/core/docker/publish-as-container
  14. ハイブリッド クラウド 環境 /&5Λ࢖ͬͨΞϓϦͷ࿈ܞ .NET MAUI クライアントアプリ開発 σεΫτοϓ ϞόΠϧ End

    Point1 JSON REST ASP.NET Core アプリ開発 End Point2 gRPC マイクロサービス開発 End Point3 SignalR Windows 10, Windows 11 macOS iOS, iPadOS Android Windows Server/Linux + Container Platform
  15. ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独⾃の⾒解を反映したものです。それらは情報 提供の⽬的のみで提供されており、いかなる参加者に対しても法律的またはその他の指導や助⾔を意図したものではなく、またそのような結果を⽣むも のでもありません。本講演資料に含まれている情報については、完全性と正確性を期するよう努⼒しましたが、「現状のまま」提供され、明⽰または暗 ⽰にかかわらずいかなる保証も伴わないものとします。本講演資料またはその他の資料の使⽤によって、あるいはその他の関連によって、いかなる損害 が⽣じた場合も、IBMは責任を負わないものとします。 本講演資料に含まれている内容は、IBMまたはそのサプライヤーやライセンス交付者からいかな る保証または表明を引きだすことを意図したものでも、IBMソフトウェアの使⽤を規定する適⽤ライセンス契約の条項を変更することを意図したもので もなく、またそのような結果を⽣むものでもありません。 本講演資料でIBM製品、プログラム、またはサービスに⾔及していても、IBMが営業活動を⾏っているすべての国でそれらが使⽤可能であることを暗⽰ するものではありません。本講演資料で⾔及している製品リリース⽇付や製品機能は、市場機会またはその他の要因に基づいてIBM独⾃の決定権をもっ

    ていつでも変更できるものとし、いかなる⽅法においても将来の製品または機能が使⽤可能になると確約することを意図したものではありません。本講 演資料に含まれている内容は、参加者が開始する活動によって特定の販売、売上⾼の向上、またはその他の結果が⽣じると述べる、または暗⽰すること を意図したものでも、またそのような結果を⽣むものでもありません。 パフォーマンスは、管理された環境において標準的なIBMベンチマークを使⽤し た測定と予測に基づいています。ユーザーが経験する実際のスループットやパフォーマンスは、ユーザーのジョブ・ストリームにおけるマルチプログラ ミングの量、⼊出⼒構成、ストレージ構成、および処理されるワークロードなどの考慮事項を含む、数多くの要因に応じて変化します。したがって、 個々のユーザーがここで述べられているものと同様の結果を得られると確約するものではありません。 記述されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使⽤したか、またそれらのお客様が達成した結果の実例として⽰された ものです。実際の環境コストおよびパフォーマンス特性は、お客様ごとに異なる場合があります。 IBM、IBM ロゴ、ibm.com、IBM Cloud、IBM Cloud Paksは、 世界の多くの国で登録されたInternational Business Machines Corporationの商標です。他 の製品名およびサービス名等は、それぞれIBMまたは各社の商標である場合があります。現時点での IBM の商標リストについては、 www.ibm.com/legal/copytrade.shtmlをご覧ください。 Microsoft, Windows, Windows Server, .NET Framework, .NET, .NET Coreは、Microsoft Corporationの商標または登録商標です。