下記の内容は,色々と試行錯誤したうち,成功したと思われる結果のみを挙げています. そのため,下記の内容通りに行っても期待される結果が得られない場合もあると思います. 従って,このページの内容については私の保証するところではありませんので,各自の責任でお願いします.
更新情報
2025. 2.16 PowerShell情報をver.7.5に更新しました
2024.12.22 情報を.NET9に更新しました
2023.11.25 情報を.NET8に更新しました
2023. 7.17 ドキュメント コメントについて追記
2023. 6.11 ドキュメント コメントについて追記
2022. 7.23 情報を更新、整理
2022. 6. 5 追記、一部修正
2022. 5.15 記録開始
■諸元
目的: Michi -GPSログ整形アプリ をMonoDevelopから.NET9へ移行する。
input: GPSログ(NMEA-0183)、Google Maps API Key
output: Google Maps ページ + 速度グラフ(jpeg)、高度グラフ(jpeg)
build on: MonoDevelop 7.8.4 & GTK+
特徴: 元々はGUIツールとして作成したけど、コンソールアプリとしても動作します。
■環境
OS: Ubuntu 24.10
■概観
.NET + MAUIが良さそうだけど、MAUIはまだ正式版が出てないし、linuxサポートはコミュニティ版なのでさらに後になるでしょう。
とりあえず、GUIは無くても困らないので、コンソールアプリ部分のみ移行を開始します。
開発はVSCodeを使います。
■.NETインストール
参考:https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-scripted-manual#scripted-install
Bashでスクリプトを取得する。
$ wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
$ chmod +x dotnet-install.sh
$ ./dotnet-install.sh --channel 9.0
■.NETのパスを通す
.NETを使うためにパスを通します。
.bashrc に以下を追記
export DOTNET_ROOT=~/.dotnet
export PATH=$PATH:$DOTNET_ROOT
次で反映する。
$ source .bashrc
■バージョンを確認
$ dotnet --list-sdks
9.0.101 [/home/miyajima/.dotnet/sdk]
■VSCodeをインストール
次からdebパッケージをダウンロード。
https://code.visualstudio.com/
インストール
$ sudo dpkg -i Downloads/code_1.84.2-1699528352_amd64.deb
■VSCodeのExtensionをインストール
C# for Visual Studio Code
C# Dev Kit for Visual Studio Code
NuGet Package Manager
■コンソール アプリケーションを作成する
次そのままでとりあえず作成してみる。
チュートリアル: Visual Studio Code を使用して .NET コンソール アプリケーションを作成する
■MonoDevelop版のソースをぶち込んでビルドしてみる
*.csをプロジェクト直下にコピーする。
とりあえず、ビルドだけはできるようになった。
■Release版のビルド
ターミナルで次を実行する。
> dotnet publish --configuration Release
■NuGetをインストール
拡張機能を追加するのにNuGetを使うのが常套手段らしいのでインストールする。
NuGetをVSCodeにインストール&使い方
参考:.NET CoreとVSCodeでNuGet - Qiita
■とりあえず、NPlotをそのまま使ってみる
NuGetでNPlotをインストールできました。
ただしlinuxではフォントは文字化けする。
-> System.common.drawing がlinux版ではサポートされないためらしい。
■ScottPlotを使えるようにする
NuGetでScottPlotをインストール
ただしlinuxではフォントは文字化けする。
-> System.common.drawing がlinux版ではサポートされないためらしい。
■ImageSharpを使えるようにする
NuGetでImageSharpをインストール
linuxでもフォントは文字化けしない。
ただし、グラフを生成するライブラリとかないので、自前でグラフを描画する。
■OSの切り分け
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) {}のように切り分ける。
■GUIについて
コンソールアプリは移行完了。
MAUIの情報が少ないので保留中。
PowerShell + WPFならば以前に仕事でちょっと触ったのでと考えたが、Linux版ではWPFはサポートされないらしい。
PowerShellでCLI用スクリプトを作って、少しだけ手入力を省略することにする。
コンソールアプリでは入力は次のように引数が多いです。
$ Michi2 [タイトル] [年] [ログファイル名1] [ログファイル名2] ...
このうち、[タイトル]は必須なので仕方ない。[年]は過去の互換性のためで現在はログファイルから取得できるので不要、[ログファイル名]はフルパスなので面倒い。
作業用フォルダを予め作っておいてその中で作業することにして、[タイトル]のみ引数にして実行する。フォルダ内のログファイルをソートして自動で追加する。
$ pwsh michiCLI.ps1 [タイトル]
Ubuntu, Windows 11共用で作成する。
■powerShell インストール
Ubuntu への PowerShell のインストール
https://learn.microsoft.com/ja-jp/powershell/scripting/install/install-ubuntu?view=powershell-7.5
直接ダウンロードしてインストール。
$ sudo dpkg -i Downloads/powershell_7.5.0-1.deb_amd64.deb
$ pwsh -v
PowerShell 7.5.0
■PowerShellでOSの切り分け
[Environment]::OSVersion.Platformの返り値で判別できる。
Unix
Win32NT
...
次が参考になりました。
Windows10とLinuxの両方で動くPowerShellスクリプトの考慮点 - OSAKANA TAROのメモ帳
■ドキュメント コメントの生成
1.拡張機能をインストール
VSCodeで拡張機能ボタンをクリック
次を入力
C# XML Documentation Comments
インストールする。
2.プロジェクトを設定
.csprojに次のように追記する
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<DocumentationFile>Michi2.XML</DocumentationFile>
とりあえず2行目のファイルの出力先はソースフォルダ直下にしておく。
これでVSCodeでビルド時にソースフォルダにMichi2.XMLが作られている。
3.doxygenをインストール
xmlだと読みにくいのでhtml化したい、そのためにdoxygenをインストールする。
$ sudo apt install doxygen
4.doxygenを実行
Michi2.XMLのフォルダに移動し実行する。
$ doxygen Michi2.XML
2つのフォルダhtml、latexが作られている。
フォルダhtml内のindex.htmlを開くとできている。
LaTeX形式の出力もできるのね、懐かしい。
とりあえずドキュメントの生成はできました。
5.補足とか、次のステップとか
doxygenの実行時に色々オプションを指定してやればよい。
面倒ならdoxywizardを1度実行すると環境設定ファイルdoxygen.cfgを吐き出してくれるので、それをdoxygenの実行時に読ませれば楽かも。
6.index.mdというファイルがあれば、その内容がデフォルトページに表示される。
Michi2.doxというファイルを作れば参考情報等を記載するのに便利。