旅の途中、興味深いオアシスを見つけた。忘れないうちに、この羊皮紙に記しておくとしよう。
前回の旅で、我々はWindowsという文明化された大地に、NLogの魔法を宿した.NETのゴーレムを錬成した。しかし、.NET Coreの真価は、その魂が、特定の大地に縛られないことにある。ならば、その魂を、WSL2/Ubuntuという、より原生的な大地へ移植し、果たして同じように力強く鼓動するのか、確かめてみようではないか。
これは、Windowsで創り上げたプロジェクトを、Linux(WSL2/Ubuntu)の大地へコピーし、再び命を吹き込む、クロスプラットフォーム(複数のOS環境で動作する特性)という名の、驚くほど簡単な儀式の記録である。.NET Core(マイクロソフトの新世代開発フレームワーク)の真価は、その魂が、特定のOS(オペレーティングシステム)に縛られないことにある。
この羊皮紙のあらまし
- この羊皮紙のあらまし
- この羊皮紙が導く者
- 砂漠の道標
- 第一の儀式:魂の移植(プロジェクトのコピー)
- 第二の儀式:大地を整える(.NET SDKインストール)
- 最終儀式:魂の再起動と、対話
- 羊皮紙を巻く前に
- 砂漠で見つけた魔法のランプ
- ラクダの独り言
この羊皮紙が導く者
- NLog(高機能ロギングライブラリ)という、強力なログの魔法に興味がある者
- WindowsとLinux、二つの世界を股にかける、クロスプラットフォーム開発に挑む者
- Linuxで動く魂の声を、Windowsという故郷で聴きたいと願う探求者
- .NET Coreの真のクロスプラットフォーム性能を体感したい開発者
- WSL2環境でのC#開発に興味を持つ冒険者
砂漠の道標
- .NET Core - マイクロソフトが開発した、Windows・Linux・macOSで動作するクロスプラットフォーム開発フレームワーク。
- NLog - C#/.NETアプリケーションのログ出力を強力に制御するライブラリ。複数の出力先へ柔軟に対応。
- WSL2 (Windows Subsystem for Linux 2) - Windows上でLinux環境をネイティブに近い速度で実行できる仕組み。
- Ubuntu - 最も普及しているLinuxディストリビューション。WSL2でも標準的に使用される。
- dotnet run - .NET Coreアプリケーションをビルド&実行する統一コマンド。OS問わず同じ呪文で動作。
- .NET SDK - .NET Coreでアプリケーションを開発・実行するために必要なソフトウェア開発キット。
- Log2Console - ネットワーク経由でログを受信・表示するWindows用デバッグツール。
- クロスプラットフォーム - 一つのソースコードが、複数の異なるOS環境で動作する特性。.NET Coreの最大の強み。
第一の儀式:魂の移植(プロジェクトのコピー)
儀式は、驚くほどシンプルだ。 Windowsのエクスプローラ(ファイル管理ツール)に現れる「Linux」という名の異世界への扉を開き、前回創り上げたNLogSampleのプロジェクトフォルダ(ソースコード一式)を、Ubuntuの故郷(ホームディレクトリ)へと、ただドラッグ&ドロップするだけ。
第二の儀式:大地を整える(.NET SDKインストール)
もし、あんたのUbuntuの大地が、まだ.NETの魔法を知らないなら、まずはその力を授ける必要がある。Microsoft(マイクロソフト社)という名の神々の古文書庫(パッケージリポジトリ)から、署名とリポジトリを授かり、dotnet-sdk(.NET開発キット)をインストールする。
# 神々の古文書庫と契約を結ぶ $ wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb ... # .NETの魔法を、この大地に根付かせる $ sudo apt update && sudo apt install -y dotnet-sdk-5.0
最終儀式:魂の再起動と、対話
さあ、いよいよ、Linuxの大地で、魂を再び呼び覚ます時だ。
移植したプロジェクトのディレクトリ(フォルダ)へ移動し、dotnet runという、万国共通の召喚呪文(実行コマンド)を唱える。
$ cd ./NLogSample/NLogSample $ dotnet run 2021-11-06 19:34:13.4325 TRACE Trace ログです。 ... 2021-11-06 19:34:13.4925 ERROR エラーが発生しました。
見よ。Windowsで見たのと全く同じ魂の声(ログ出力)が、Linuxの大地にも響き渡ったではないか。
異世界からの声:Log2Consoleとの対話
さらに、我々は、Linuxの大地で叫ぶ魂の声を、Windowsの世界で聴くことさえできる。
ipconfig(Windows用ネットワーク情報表示コマンド)でWindowsのIPアドレス(ネットワーク上の住所)を調べ、NLog.config(NLogの設定ファイル)に記された羅針盤の向きを、その座標へと修正する。
<!-- localhostを、WindowsのIPアドレスへ --> <target name="tcpOutlet" xsi:type="NLogViewer" address="tcp4://172.18.175.105:4505"/>
そして再び、Linuxで魂を呼び覚ませば、Windows側で待ち構えるLog2Console(ログ可視化ツール)という名の真実の鏡に、その声が、リアルタイムで映し出されるのだ。
この魔法こそ、Docker(コンテナ型仮想化技術)コンテナのような、さらに深淵なる異世界でゴーレムを操る際の、最強のデバッグ術(問題解析手法)となるだろう。
羊皮紙を巻く前に
Windowsで創り上げた.NETの魂は、いとも簡単に、Linuxの大地で再びその目を開いた。ソースコードの変更は、一切不要。これこそ、.NET Coreが持つ、クロスプラットフォームという名の、偉大なる力の証明だ。
.NET Coreのクロスプラットフォーム性能
- ソースコード変更不要 - Windows版のコードが、そのままLinuxで動作する驚異の互換性。
- 開発環境の自由 - VS CodeとWSL2の組み合わせで、一つのマシンで両OS環境を自在に扱える。
- デバッグの柔軟性 - Log2ConsoleとNLogの組み合わせで、Linux実行中のログをWindowsでリアルタイム監視可能。
- 統一されたコマンド体系 -
dotnet runなど、OS問わず同じコマンドで開発できる効率性。
より現代的な開発の作法
今回は、Windowsで創ったプロジェクトをコピーしたが、本来の旅路は、Linux側でdotnet new(新規プロジェクト作成)から始め、VS Code(統合開発エディタ)という魔法の窓から、二つの世界を自在に行き来するのが、より現代的な作法だろう。Remote-WSL拡張機能を使えば、WindowsのVS CodeからLinux環境を直接編集・実行できる。
まとめ
この羊皮紙が、同じように、二つの大地を股にかける、自由な旅を夢見る、未来の冒険者の助けとなることを願う。
東の空が白んできた。次のオアシスへ向けて、そろそろ荷造りを始めるとしよう。
砂漠で見つけた魔法のランプ
- そのWriteLineは、呪いの言葉 ~なぜNLogという聖剣を選ぶのか~ | 前回の冒険の記録。NLogの基本導入手順を詳述。
- .NET SDK on Ubuntu(Microsoft公式) | Ubuntu環境への.NET SDK導入手順を記した、神々の古文書。
- Visual Studio Code(公式) | 二つの世界を繋ぐ、最強の魔法の窓。クロスプラットフォーム開発の必須ツール。
- Remote - WSL(拡張機能) | VS CodeからWSL環境へ直接アクセスする、異世界への扉を開く魔法。
- Log2Console 日本語対応版(GitHub) | 私が文字化けの呪いを解いた、真実の鏡。ネットワークログの可視化に最適。
ラクダの独り言
ご主人が、窓の世界で創ったゴーレムを、今度はペンギンの世界に連れて行って、自慢げに動かしている。「何も変更せずに動いた!」なんて喜んでいるが、俺に言わせりゃ、どっちの世界で動こうが、どうせ荷物は運んでくれねえんだ。そんなことより、そろそろ俺の餌の時間をだな…。まったく、やれやれだぜ。