0
0

More than 3 years have passed since last update.

Markdownからhtmlファイルを生成してアプリのヘルプファイルとして表示する

Posted at

概要

アプリにヘルプファイルがあるとユーザーにとっては便利です。
他にも以下のような条件を満たしたいです。

  • ヘルプファイルは今どきにhtmlファイルで
  • オフラインでも動作するようにローカルファイルとしてアプリに同梱
  • アプリからワンクリックで開きたい
  • ヘルプの内容はMarkdownで書きたい
  • Markdownが更新されたら自動でHtmlファイルに変換してアプリに組み込みたい

そこでMarkdownでヘルプを書いて、変換したローカルhtmlファイルをアプリに組み込み、ヘルプファイルとして使用する方法を説明します。

サンプルはWPFで書きましたが、WinFormsでもUWPでも同じようにできます。

スクリーンショット

こんなアプリがあったとして、どうやって使うのか?という時に、中央のHELP!!ボタンを押すと、

image.png

ローカルHTMLファイルが呼び出され、ヘルプがブラウザで表示されます。
これで中央の🍪を押せばクッキーが焼けることが分かります。

image.png

やり方

Markdownを書く

ヘルプファイルの元となるMarkdownを好きなエディタで書きます。私はTyporaを愛用しています。

Markdownの先頭部分に タイトル・著者名・日時を書くとhtmlファイルのHeadに反映されます。

% Help Coockie Creater
% soi
% 2021/02/11

# 🍪HOW TO USE🍪

丸いところをクリックすると<kbd>Coockie Count</kbd>が1つ増えます。

## UI説明

| 項目           | 見た目   | 説明                       |
| -------------- | -------- | -------------------------- |
| Coockie Count  | 文字     | 現在の焼けたクッキー数     |
| Coockie Button | クッキー | 押すとクッキーが焼き上がる |

# 🍪ホームページ🍪

Githubで公開しています!

[Coockie Creater](https://github.com/soi013/HelpHtmlTest)

PandocでHtmlファイルへ

Pandocをインストールします。
ToCの付いたテンプレートとGithub風のcssを指定して、単一htmlファイルを生成します。

pandoc -s ./help.md -o ./help.html --toc --template=./elegant_bootstrap_menu.html --self-contained -t html5 -c my_markdown.css

詳しくは以下のリンクを参照ください。

pandocでmarkdownを1ファイルのhtmlに変換する - chocolattips
Pandocメモ - jou4のブログ

PowerShell

ビルドイベントでPowerShellスクリプトを呼び出し、pandocでhtmlファイルへの変換を行います。
ビルドなのは生成したhtmlファイルをアプリのコンテンツファイルとして組み込むためです。
pandocの作業は結構時間がかかるため、ビルドのたびに動かしたくありません。そこでMarkdownファイルとhtmlファイルの更新日時を比較して、必要な場合だけ生成するようにします。

cd 'Help'
$sourcePath = ".\help.md"
$sourceTime = $(Get-ItemProperty $sourcePath).LastWriteTime
$targetPath = "..\Resources\help.html"
if (Test-Path $targetPath)
{
    $targetTime = $(Get-ItemProperty $targetPath).LastWriteTime
}
else
{
    $targetTime = 0
}

echo "Creation help.html: sourceTime is $sourceTime, targetTime is $targetTime"

# 生成したHTMLファイルが元のMarkdownファイルより更新日時が新しいときのみコンバートする
if ( $sourceTime -gt   $targetTime )
{
    echo "Start Create help.html"
    # Pandocを使用してMarkdownからHTMLファイルを生成する。cssなどを指定する
    & 'C:\Program Files\Pandoc\pandoc' -s ./help.md -o ../Resources/help.html --toc --template=./elegant_bootstrap_menu.html --self-contained -t html5 -c my_markdown.css
    echo "Finished Create help.html"
}

ビルド前イベントでPowerShellスクリプトを呼びます

csproj
  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="powershell -ExecutionPolicy Unrestricted &quot;$(ProjectDir)\Help\CreateHtmlPandoc.ps1&quot;" />
  </Target>

htmlファイルのプロパティ

PowerShellが出来た時点で一度ビルドします。するとプロジェクト>Resourcesフォルダにhtmlファイルが生成されます。
VisualStudio上でこれのプロパティをコンテンツ新しい場合はコピーするにしておきます。
またコード管理を使用している場合は生成したhtmlファイルは管理対象から除外しておきます。
ここでもう一度ビルドすると実行フォルダにResourcesフォルダができ、その中にhtmlファイルが配置されます。

ローカルhtmlファイル呼び出し

アプリから、上記で生成して実行フォルダに配置されたhtmlファイルを呼び出します。
これでブラウザでhtmlファイルが表示されます。

private void Button_HelpClick(object sender, RoutedEventArgs e)
{
    string htmlFilePath = "Resources/help.html";
    var pi = new ProcessStartInfo("cmd", $"/c start {htmlFilePath}") { CreateNoWindow = true };
    Process.Start(pi)?.WaitForExit();
}

全体コード

全体コードを以下の場所においておきます。
https://github.com/soi013/HelpHtmlTest

環境

VisualStudio 2019 Version 16.8.4
.NET 5
C# 9
PowerShell Version 5.1.19041.610

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0