旅の途中、興味深いオアシスを見つけた。忘れないうちに、この羊皮紙に記しておくとしよう。
前回の旅で、我々はWindowsという文明化された大地に、gRPCのゴーレムを錬成した。しかし、真の冒険者は、安住の地に留まらない。今回は、WSL2/Ubuntuという、より原生的な、しかし無限の可能性を秘めた大地で、再び同じゴーレムを創り出す儀式に挑む。
プログラムの魂そのものは同じだ。しかし、大地が違えば、儀式の作法もまた、微妙に異なってくる。これは、Linuxという新たな大地で、.NET 6の魔法を使いこなし、IPアドレスという光の糸で、二つの世界を繋ぐまでの、一人の魔法使いの冒険の記録である。
この羊皮紙のあらまし
- この羊皮紙のあらまし
- この羊皮紙が導く者
- 第一の儀式:大地を整える(事前準備)
- 第二の儀式:Linuxの大地に、ゴーレムを召喚する
- 最終儀式:二つの世界を繋ぐ
- 羊皮紙を巻く前に
- 砂漠で見つけた魔法のランプ
- ラクダの独り言
この羊皮紙が導く者
- gRPCという名のゴーレムを、Windowsだけでなく、Linuxの大地でも錬成したいと願う者
- HTTP/2という光の道を、異なるOS間で繋ぐことに興味がある探求者
第一の儀式:大地を整える(事前準備)
まず、我々が今立っているWindowsという大地と、これから旅するLinuxという大地の、正確な座標を知る必要がある。ipconfigの呪文で、Windows側のIPv4アドレスを読み解き、それをnlog.configという名の羅針盤に刻み込む。これが、二つの世界を繋ぐための、最初の重要な儀式だ。
第二の儀式:Linuxの大地に、ゴーレムを召喚する
WSL2/Ubuntuという祭壇で、dotnet new grpcという短い呪文を唱える。すると、大地は応え、gRPCゴーレムの素体が、我々の目の前に現れる。
$ mkdir GrpcGreeter $ cd GrpcGreeter $ dotnet new grpc
NLogという、ゴーレムの声を聴くための魔法の耳を追加し、儀式の準備は整った。
魂の設計図を書き換える
Windows版と違い、Linux版のゴーレムに外界の声を届けさせるには、launchSettings.jsonという名の魂の設計図を、自らの手で書き換える必要がある。
applicationUrlに記されたlocalhostという内なる言葉を、0.0.0.0という、全世界に向けた開かれた言葉へと書き換えるのだ。
{ "profiles": { "GrpcGreeter": { "applicationUrl": "http://0.0.0.0:5045;https://0.0.0.0:7045", // ... } } }
儀式の執行
dotnet buildで魂を練り上げ、dotnet runで命を吹き込む。
コンソールに響き渡る「Now listening on...」という神託こそが、ゴーレムがLinuxの大地で確かに息づいている、何よりの証だ。
$ dotnet run Building... INFO : Now listening on: http://0.0.0.0:5045 INFO : Now listening on: https://0.0.0.0:7045 INFO : Application started. Press Ctrl+C to shut down. ...
Log2Consoleという真実の鏡を覗き込めば、その魂の鼓動を、より詳細に感じ取ることもできる。
最終儀式:二つの世界を繋ぐ
Windowsの世界から、gRPCクライアントという名の魔法で、Linuxの大地にいるゴーレムと対話する。
ip a show dev eth0で突き止めた、Ubuntuの座標(IPアドレス)を正確に指定する。
# Ubuntuの座標を突き止める $ ip a show dev eth0 inet 172.18.126.178/20 ...
そして、クライアントのプログラムに、その座標を刻み込む。自己署名証明書という結界を信頼する、という誓いを立てることを忘れずに。
// 異世界の座標 var server = "https://172.18.126.178:7045"; var option = new GrpcChannelOptions() { HttpClient = new HttpClient(new HttpClientHandler { // 自己署名証明書という結界を、信頼する ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator, }) }; var channel = GrpcChannel.ForAddress(server, option); // ...
呪文を唱えれば、「Hello World」という、二つの世界が繋がった証の言葉が返ってくるだろう。
羊皮紙を巻く前に
Windows版に続き、WSL2/UbuntuというLinuxの大地でも、無事にgRPCのゴーレムを錬成することができた。
IPアドレスでアクセスするためのlaunchSettings.jsonの書き換えなど、大地が違えば作法も変わる。しかし、その違いを知ることこそが、我々冒険者の知恵となる。
この旅で得た知見は、次の冒険、すなわち「Docker」という異次元の箱庭でのゴーレム錬成へと繋がっていく。
この羊皮紙が、同じようにWindowsの安住の地から、Linuxという広大な荒野へ旅立とうとする、未来の冒険者の助けとなることを願う。
おっと、どうやら相棒が腹を空かせたようだ。今日はこのへんで筆を置くとしよう。
砂漠で見つけた魔法のランプ
- 第一章:古の魔法は死んだ。王の帰還だ。 ~WCFからgRPCへ、魂の継承儀式~ | 前回の冒険の記録(Windows版)
- ASP.NET Core gRPC チュートリアル | 公式の古文書
- NLog with ASP.NET Core 6 | 賢者の言葉
ラクダの独り言
ご主人が、この前は窓の世界でゴーレムを創っていたかと思えば、今度はペンギンの世界で同じことをやっている。俺に言わせりゃ、どっちの世界で創ろうが、どうせ荷物は運んでくれねえんだ。そんなことより、そろそろ俺の餌の時間をだな…。まったく、やれやれだぜ。