概要
諸事情あってタイトルのことをしたいのだけど、家には手頃な Windows 環境が無いので Mac でやってみる。ちなみに実環境は .Net Core ではない。
Install dotnet
$ brew install --cask dotnet-sdk ==> Downloading https://download.visualstudio.microsoft.com/download/pr/4332c16b-5a65-4adf-b25d-f6a46ef2b335/1a1edc2dab547161e2448390c3d4f56d/dotnet-sdk-6.0.202-osx-x64.pkg ######################################################################## 100.0% ==> Installing Cask dotnet-sdk ==> Running installer for dotnet-sdk; your password may be necessary. Package installers may write to any location; options such as `--appdir` are ignored. Password: installer: Package name is Microsoft .NET SDK 6.0.202 (x64) installer: Upgrading at base path / installer: The upgrade was successful. ==> Linking Binary 'dotnet' to '/usr/local/bin/dotnet' 🍺 dotnet-sdk was successfully installed!
実行
$ dotnet Usage: dotnet [options] Usage: dotnet [path-to-application] Options: -h|--help Display help. --info Display .NET information. --list-sdks Display the installed SDKs. --list-runtimes Display the installed runtimes. path-to-application: The path to an application .dll file to execute.
サンプルを動かす
$ dotnet new webapp -o aspnetcoreapp .NET 6.0 へようこそ! --------------------- SDK バージョン: 6.0.202 テレメトリ --------- .NET ツールは、エクスペリエンスの向上のために利用状況データを収集します。データは Microsoft によって収集され、コミュニティと共有されます。テレメトリをオプトアウトするには、好みのシェルを使用して、DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1' または 'true' に設定できます。 .NET CLI ツールのテレメトリの詳細をご覧ください: https://aka.ms/dotnet-cli-telemetry ---------------- ASP.NET Core の HTTPS 開発証明書をインストールしました。 証明書を信頼するには、'dotnet dev-certs https --trust' (Windows および macOS のみ) を実行します。 HTTPS の詳細については、https://aka.ms/dotnet-https を参照してください ---------------- 最初のアプリを作成するには、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 にアクセスしてください -------------------------------------------------------------------------------------- テンプレート "ASP.NET Core Web App" が正常に作成されました。 このテンプレートには、Microsoft 以外のパーティのテクノロジが含まれています。詳しくは、https://aka.ms/aspnetcore/6.0-third-party-notices をご覧ください。 作成後の操作を処理しています... /Users/user/repos/dotnet/dotnet-samples/tutorial1/aspnetcoreapp/aspnetcoreapp.csproj で ' dotnet restore ' を実行しています... 復元対象のプロジェクトを決定しています... /Users/user/repos/dotnet/dotnet-samples/tutorial1/aspnetcoreapp/aspnetcoreapp.csproj を復元しました (101 ms)。 正常に復元されました。
$ dotnet dev-certs https --trust Trusting the HTTPS development certificate was requested. If the certificate is not already trusted we will run the following command: 'sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain <<certificate>>' This command might prompt you for your password to install the certificate on the system keychain. A valid HTTPS certificate is already present.
$ cd aspnetcoreapp $ ls Pages Properties appsettings.json obj Program.cs appsettings.Development.json aspnetcoreapp.csproj wwwroot
$ dotnet watch run watch : Hot reload enabled. For a list of supported edits, see https://aka.ms/dotnet/hot-reload. Press "Ctrl + R" to restart. watch : Building... 復元対象のプロジェクトを決定しています... /Users/user/repos/dotnet/dotnet-samples/aspnetcoreapp/aspnetcoreapp.csproj を復元しました (137 ms)。 aspnetcoreapp -> /Users/user/repos/dotnet/dotnet-samples/aspnetcoreapp/bin/Debug/net6.0/aspnetcoreapp.dll watch : Started warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35] No XML encryptor configured. Key {aa4d01cd-b71d-4a04-a865-f6d68a688bad} may be persisted to storage in unencrypted form. info: Microsoft.Hosting.Lifetime[14] Now listening on: https://localhost:7013 info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5263 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: /Users/user/repos/dotnet/dotnet-samples/aspnetcoreapp/
実行結果
vim
vim + omnisharp-lsp を使おうとしたけど、cpu を使いまくるが動かないので削除・・・vscode に切り替える。
dotnet watch run
で実行していると vscode で保存するとコンパイルが走って反映される (保存した後、正式にビルドをする方法が分からない)。
Go でリバースプロキシ
流用させてもらって・・・
※ ワイルドカードの使い方が分からなくてゴリゴリ。
package main // Go 言語でリバースプロキシ // https://qiita.com/penguinshunya/items/93f4609459e5cb97836e import ( "net/http/httputil" "net/url" "time" "github.com/gin-gonic/gin" ) func main() { // サーバーを作成する sv := gin.Default() sv.GET("/", makeReverseProxy("7013")) sv.GET("/_framework/aspnetcore-browser-refresh.js", makeReverseProxy("7013")) sv.GET("/aspnetcoreapp.styles.css", makeReverseProxy("7013")) sv.GET("/css/site.css", makeReverseProxy("7013")) sv.GET("/favicon.ico", makeReverseProxy("7013")) sv.GET("/js/site.js", makeReverseProxy("7013")) sv.GET("/lib/bootstrap/dist/css/bootstrap.min.css", makeReverseProxy("7013")) sv.GET("/lib/bootstrap/dist/js/bootstrap.bundle.min.js", makeReverseProxy("7013")) sv.GET("/lib/jquery/dist/jquery.min.js", makeReverseProxy("7013")) // 非同期にサーバーを立ち上げる go sv.Run(":10000") // プログラムが終わらないようにする time.Sleep(time.Hour) } func makeReverseProxy(port string) func(*gin.Context) { return func(c *gin.Context) { remote, _ := url.Parse("https://localhost:" + port) proxy := httputil.NewSingleHostReverseProxy(remote) proxy.ServeHTTP(c.Writer, c.Request) } }
ホストを取りたい
リバースプロキシの localhost:10000 ではなく、実際に処理するサーバーの localhost:7013 を取りたい。ドメインも同様に。
httpContext の Request.Uri.Authority を見れば取れてたんだけど、今回の環境では API が無いのでどう取っていいのか分からない。取れないことは無いと思うんだけど。
残念。
vscode
久しぶりに vscode 使った。もちろん vim plugin 入りで。それ以外にもキー設定はしているのだけど、普通にプログラミングできるなと思うなど (あまり違和感を感じなかった)。