Ubuntu 24.04に Microsoftの C#の開発が出来る .NET8をインストールします。
2023年11月に .NET待望の LTSの新バージョンである 8 がリリースされまして、今後しばらくはこのバージョンがスタンダードになっていくはずです。
.NET7から 8になって、WEB開発フレームワークの Blazor Serverと Blazor WebAssemblyが統合されたのが大きいと聞きます。
でも、何が良いって、LTSなのが良いですね。
.NETになってからも、.NET7まではまだ暫定って感じでしたから、これでやっと本気で取り組むバージョンになったって思っています。
2022年8月に Microsoftと Canonical(Ubuntuを作ってるところ)が提携して、Ubuntuはネィティブに .NETをサポートするという発表をしました。
しかし、その後しばらく snapパッケージで提供される .NET SDKが上手く動かないので、いつの間にか Microsoftの aptリポジトリを使うようになったりで、モヤモヤ感がありましたね。
以降 Ubuntu Server 24.04にインストールする例ですが Desktopでも同じです。
2025年4月20日時点では Ver.9も出ていますがこれは LTSではありませんのでスルーし、LTSの最新バージョンは 8.0.115です。
Ubuntu 24.04へのインストールについては Microsoftの公式に手順があります。
Ubuntu に .NET SDK または .NET ランタイムをインストールする
上記リンクでは .NET9がデフォルト表示になっているので、以下のところで [.NET 8]タブを選択しましょう。
Ubuntuではこれまで以下の方法でのインストールが提供されてきました。
- Ubuntuのリポジトリから snapパッケージでインストール
- Microsoftのリポジトリから aptパッケージでインストール
どっちにすりゃい〜の?については、上記のページからの引用です。
.NET は Ubuntu パッケージ マネージャー フィードで提供されています。 Microsoft パッケージ リポジトリに Ubuntu 用の .NET パッケージは含まれなくなりました。
今はもう 2の方法は提供されなくなっていました。
「では snapパッケージになるのか? バージョン管理に難が…」と思っていたら、どうやらUbuntuの aptリポジトリからの提供になっているようです。
1.インストール
手順はこちら。
SDK のインストール
ではインストールします。
subro@UbuntuServer2404-1:~$ sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-8.0
〜〜〜 省略 〜〜〜
何の問題も無くインストールできました。
バージョンを確認してみましょう。
subro@UbuntuServer2404-1:~$ dotnet --info
.NET SDK:
Version: 8.0.115
Commit: 9c0387c3ea
Workload version: 8.0.100-manifests.b0a64abb
ランタイム環境:
OS Name: ubuntu
OS Version: 24.04
OS Platform: Linux
RID: ubuntu.24.04-x64
Base Path: /usr/lib/dotnet/sdk/8.0.115/
インストール済みの .NET ワークロード:
Workload version: 8.0.100-manifests.b0a64abb
表示するインストール済みワークロードはありません。
Host:
Version: 8.0.15
Architecture: x64
Commit: 50c4cb9fc3
.NET SDKs installed:
8.0.115 [/usr/lib/dotnet/sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 8.0.15 [/usr/lib/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 8.0.15 [/usr/lib/dotnet/shared/Microsoft.NETCore.App]
Other architectures found:
None
Environment variables:
Not set
global.json file:
Not found
Learn more:
https://aka.ms/dotnet/info
Download .NET:
https://aka.ms/dotnet/download
SDK全体のセットが 8.0.15、SDKが 8.0.115、ランタイムが 8.0.15ってことですかね。
2.試しに Webサーバーアプリを作る
これで C#の開発ができるようになりましたので、試しに Blazorを使った WEBアプリケーションを作ってみます。
以下のコマンドで、開発プロジェクトのテンプレートにどんなものがあるか一覧できます。
subro@UbuntuServer2404-1:~$ dotnet workload update
.NET 8.0 へようこそ!
---------------------
SDK バージョン: 8.0.115
----------------
ASP.NET Core HTTPS 開発証明書をインストールしました。
証明書を信頼するには、次の手順を参照してください: https://aka.ms/dotnet-https-linux
----------------
最初のアプリを作成するには、https://aka.ms/dotnet-hello-world を参照してください
最新情報については、https://aka.ms/dotnet-whats-new を参照してください
ドキュメントを探すには、https://aka.ms/dotnet-docs を参照してください
GitHub で問題の報告とソースの検索を行うには、https://github.com/dotnet/core を参照してください
'dotnet --help' を使用して使用可能なコマンドを確認するか、https://aka.ms/dotnet-cli にアクセスしてください
--------------------------------------------------------------------------------------
これらのテンプレートは、入力: と一致しました
テンプレート名 短い名前 言語 タグ
----------------------------------------------- -------------------------- ---------- --------------------------
API コントローラー apicontroller [C#] Web/ASP.NET
ASP.NET Core (空) web [C#],F# Web/Empty
ASP.NET Core gRPC サービス grpc [C#] Web/gRPC/API/Service
ASP.NET Core Web API webapi [C#],F# Web/Web API/API/Service
ASP.NET Core Web API (native AOT) webapiaot [C#] Web/Web API/API/Service
ASP.NET Core Web アプリ webapp,razor [C#] Web/MVC/Razor Pages
ASP.NET Core Web アプリ (Model-View-Controller) mvc [C#],F# Web/MVC
Blazor Web アプリ blazor [C#] Web/Blazor/WebAssembly
Blazor WebAssembly アプリ blazorwasm [C#] Web/Blazor/WebAssembly/PWA
dotnet gitignore ファイル gitignore,.gitignore Config
dotnet ローカル ツール マニフェスト ファイル tool-manifest Config
EditorConfig ファイル editorconfig,.editorconfig Config
global.json ファイル globaljson,global.json Config
MSBuild Directory.Build.props ファイル buildprops MSBuild/props
MSBuild Directory.Build.targets ファイル buildtargets MSBuild/props
MSTest Playwright Test Project mstest-playwright [C#] Test/MSTest/Playwright
MSTest Test Project mstest [C#],F#,VB Test/MSTest
MVC ViewImports viewimports [C#] Web/ASP.NET
MVC ViewStart viewstart [C#] Web/ASP.NET
MVC コントローラー mvccontroller [C#] Web/ASP.NET
NuGet Config nugetconfig,nuget.config Config
NUnit 3 Test Item nunit-test [C#],F#,VB Test/NUnit
NUnit 3 Test Project nunit [C#],F#,VB Test/NUnit
NUnit Playwright Test Project nunit-playwright [C#] Test/NUnit/Playwright
Razor クラス ライブラリ razorclasslib [C#] Web/Razor/Library
Razor コンポーネント razorcomponent [C#] Web/ASP.NET
Razor ビュー view [C#] Web/ASP.NET
Razor ページ page [C#] Web/ASP.NET
Web 構成 webconfig Config
xUnit Test Project xunit [C#],F#,VB Test/xUnit
クラス ライブラリ classlib [C#],F#,VB Common/Library
コンソール アプリ console [C#],F#,VB Common/Console
ソリューション ファイル sln,solution Solution
プロトコル バッファー ファイル proto Web/gRPC
ワーカー サービス worker [C#],F# Common/Worker/Web
お目当てのテンプレートは「Blazor Web アプリ」の気がします。
ワーキングディレクトリ [~/c#/] に移ってから、[blazortest]プロジェクトを作ります。
subro@UbuntuServer2404-1:~/c#$ dotnet new blazor -o blazortest
テンプレート "Blazor Web アプリ" が正常に作成されました。
このテンプレートには、Microsoft 以外のパーティのテクノロジーが含まれています。詳しくは、https://aka.ms/aspnetcore/8.0-third-party-notices をご覧ください。
作成後の操作を処理しています...
/home/subro/work/c#/blazortest/blazortest.csproj を復元しています:
Determining projects to restore...
Restored /home/subro/work/c#/blazortest/blazortest.csproj (in 1.72 sec).
正常に復元されました。
[blazortest]プロジェクトができました。
作られたプロジェクトのディレクトリの中身はこんな感じです。
ssubro@UbuntuServer2404-1:~/c#$ tree blazortest
locales-launch: Data of ja_JP locale not found, generating, please wait...
blazortest/
├── Components
│ ├── App.razor
│ ├── Layout
│ │ ├── MainLayout.razor
│ │ ├── MainLayout.razor.css
│ │ ├── NavMenu.razor
│ │ └── NavMenu.razor.css
│ ├── Pages
│ │ ├── Counter.razor
│ │ ├── Error.razor
│ │ ├── Home.razor
│ │ └── Weather.razor
│ ├── Routes.razor
│ └── _Imports.razor
├── Program.cs
├── Properties
│ └── launchSettings.json
├── appsettings.Development.json
├── appsettings.json
├── blazortest.csproj
├── obj
│ ├── blazortest.csproj.nuget.dgspec.json
│ ├── blazortest.csproj.nuget.g.props
│ ├── blazortest.csproj.nuget.g.targets
│ ├── project.assets.json
│ └── project.nuget.cache
└── wwwroot
├── app.css
├── bootstrap
│ ├── bootstrap.min.css
│ └── bootstrap.min.css.map
└── favicon.png
8 directories, 25 files
Webアプリの開発をしたことがある人は何となく分かる階層とネーミングですよね。
このままサンプルが動くので実行してみます。
subro@UbuntuServer2404-1:~/c#$ cd blazortest
subro@UbuntuServer2404-1:~/c#/blazortest$ dotnet run
ビルドしています...
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
No XML encryptor configured. Key {700395ab-b05f-4411-9c22-6652192ff1ec} may be persisted to storage in unencrypted form.
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5047
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: /home/subro/work/c#/blazortest
動き出しました。
[5047/tcp]で待ち受けているようですが localhostだけかも。
他のターミナルでもう一つ sshログインして、ssコマンドで確認してみます。
subro@UbuntuServer2404-1:~$ ss -ltp | grep -E 'State|5047'
State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 512 127.0.0.1:5047 0.0.0.0:* users:(("blazortest",pid=4750,fd=260))
LISTEN 0 512 [::1]:5047 [::]:* users:(("blazortest",pid=4750,fd=261))
やはり localhostだけに公開されています。
これではクライアントの Webブラウザからアクセスできませんので [0.0.0.0(IP_ALL)]で公開するようにします。
先のプログラムはCtrl+cで終わらせます。
プロジェクトの中にある Properties/launchSettings.json ってファイルの [applicationUrl] の値がそれっぽい。
Linux環境では使わなそうな IIS関連のセッティングもありそうだけど [localhost] と書いてあるところを一律 [0.0.0.0] と変えてしまいました。
subro@UbuntuServer2404-1:~/c#/blazortest$ cat Properties/launchSettings.json
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://0.0.0.0:28637",
"sslPort": 44349
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://0.0.0.0:5047",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://0.0.0.0:7153;http://0.0.0.0:5047",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
ピンクの箇所は元々 [localhost] って書いてありましたので、[0.0.0.0] に変えました。
改めてプロジェクトを実行してみます。
subro@UbuntuServer2404-1:~/c#/blazortest$ dotnet run
ビルドしています...
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://0.0.0.0:5047
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: /home/subro/work/c#/blazortest
動き出しました。
2回目のビルドは速かったです。
ssコマンドの結果はこの通り。
subro@UbuntuServer2404-1:~$ ss -ltp | grep -E 'State|5047'
State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 512 0.0.0.0:5047 0.0.0.0:* users:(("blazortest",pid=4976,fd=257))
良さげですので Webブラウザでアクセスしてみます。
私の環境では [http://UbuntuServer2404-1:5047] となります。
いつもの画面が出ましたよ!\(^o^)/
.NET8の Blazorでは以前のバージョンの「最初のロード時に WebAssemblyのプログラムコードをダウンロードするから時間かかる」っていうウィークポイントをある程度克服していると誰かのブログに書いてありました。
WebAssemblyと統合された 新Blazorで Single Page Application(SPA)を C#で開発する環境が進化しました。
いよいよ React一強も危ういか?
C#プログラマに幸あれです。