たびとの旅路 ~電脳砂漠の冒険譚~

フロッピー頼りに歩き、クラウドの地平を見つめる今日まで。見つけたオアシス、迷い込んだ砂の迷宮、全てこの羊皮紙に。

魂は、大地を選ばず ~Windowsで創りし.NETの魂を、Linuxで呼び覚ます~

旅の途中、興味深いオアシスを見つけた。忘れないうちに、この羊皮紙に記しておくとしよう。

前回の旅で、我々はWindowsという文明化された大地に、NLogの魔法を宿した.NETのゴーレムを錬成した。しかし、.NET Coreの真価は、その魂が、特定の大地に縛られないことにある。ならば、その魂を、WSL2/Ubuntuという、より原生的な大地へ移植し、果たして同じように力強く鼓動するのか、確かめてみようではないか。

これは、Windowsで創り上げたプロジェクトを、Linux(WSL2/Ubuntu)の大地へコピーし、再び命を吹き込む、クロスプラットフォーム(複数のOS環境で動作する特性)という名の、驚くほど簡単な儀式の記録である。.NET Core(マイクロソフトの新世代開発フレームワーク)の真価は、その魂が、特定のOS(オペレーティングシステム)に縛られないことにある。

この羊皮紙のあらまし

この羊皮紙が導く者

  • 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の故郷(ホームディレクトリ)へと、ただドラッグ&ドロップするだけ。

Windows から 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(ログ可視化ツール)という名の真実の鏡に、その声が、リアルタイムで映し出されるのだ。

Log2Console へのログ出力を確認する

Linuxからの魂の叫びが、Windowsの鏡に映し出される

この魔法こそ、Docker(コンテナ型仮想化技術)コンテナのような、さらに深淵なる異世界でゴーレムを操る際の、最強のデバッグ術(問題解析手法)となるだろう。

羊皮紙を巻く前に

Windowsで創り上げた.NETの魂は、いとも簡単に、Linuxの大地で再びその目を開いた。ソースコードの変更は、一切不要。これこそ、.NET Coreが持つ、クロスプラットフォームという名の、偉大なる力の証明だ。

.NET Coreのクロスプラットフォーム性能

  1. ソースコード変更不要 - Windows版のコードが、そのままLinuxで動作する驚異の互換性。
  2. 開発環境の自由 - VS CodeとWSL2の組み合わせで、一つのマシンで両OS環境を自在に扱える。
  3. デバッグの柔軟性 - Log2ConsoleとNLogの組み合わせで、Linux実行中のログをWindowsでリアルタイム監視可能。
  4. 統一されたコマンド体系 - dotnet runなど、OS問わず同じコマンドで開発できる効率性。

より現代的な開発の作法

今回は、Windowsで創ったプロジェクトをコピーしたが、本来の旅路は、Linux側でdotnet new(新規プロジェクト作成)から始め、VS Code(統合開発エディタ)という魔法の窓から、二つの世界を自在に行き来するのが、より現代的な作法だろう。Remote-WSL拡張機能を使えば、WindowsのVS CodeからLinux環境を直接編集・実行できる。

まとめ

この羊皮紙が、同じように、二つの大地を股にかける、自由な旅を夢見る、未来の冒険者の助けとなることを願う。

東の空が白んできた。次のオアシスへ向けて、そろそろ荷造りを始めるとしよう。

砂漠で見つけた魔法のランプ

ラクダの独り言

ご主人が、窓の世界で創ったゴーレムを、今度はペンギンの世界に連れて行って、自慢げに動かしている。「何も変更せずに動いた!」なんて喜んでいるが、俺に言わせりゃ、どっちの世界で動こうが、どうせ荷物は運んでくれねえんだ。そんなことより、そろそろ俺の餌の時間をだな…。まったく、やれやれだぜ。