ZipHttpd を Windows でビルドする手順

ver とりあえず版 - 2021/01/23 ZipHttpd.com

告知事項


はじめに

Windows は ZipHttpd のバイナリ提供を行っています。
そのため、ソースコードからのビルドでご利用することは推奨できません。
しかし、最新のバグ対応などをいち早く入手したい場合などで自分でビルドしたい場合もあるかと思います。
本ドキュメントは Windows でソースからビルドする手順に関してのものです。

なお、本ドキュメントの一部の画像は UNIX へのインストールのドキュメントの画像からの流用です。

複数のプロジェクトで構成されているため、ビルドして配置するのは面倒です。
そのため簡単にビルドできるようにしてあります。

しかし、同時に不安定版でもあります。
問題がある場合、直近以外のコミットでビルドすると治る可能性があります。
将来的には Git Flow 方式を採用し、タグを付ける予定です。

目次

インストールの手順

前準備

Git と Go (ver1.11以上) を必要とします。
Git は標準としてインストールされているもので結構です。
Go は version 1.11 以降であるならば問題ありません。

Go のバージョン確認
d:\.ziphttpd>go version
go version go1.14.13 windows/amd64

d:\.ziphttpd>

インストールされていない場合は公式のインストール手順に従ってください。

インストール先

ZipHttpd は任意のディレクトリにインストールできます。
ディレクトリを用意したら、
インストールバッチファイル(CMD)をダウンロードします。

このディレクトリ以下に動作環境を構築しますので、専用のディレクトリを作ってください。
このディレクトリ以下のみを参照しますので、USB などのリムーバブルな場所に構築すれば他のマシンでも稼働できます。

mkdir .ziphttpd
cd .ziphttpd/
bitsadmin /transfer myDownloadJob /download /priority normal https://ziphttpd.com/static/zh_download.cmd %CD%\zh_download.cmd
dir

インストール先の準備
d:\.ziphttpd>mkdir .ziphttpd
d:\.ziphttpd>cd .ziphttpd
d:\.ziphttpd>bitsadmin /transfer myDownloadJob /download /priority normal https://ziphttpd.com/static/zh_download.cmd %CD%\zh_download.cmd
DISPLAY: 'myDownloadJob' TYPE: DOWNLOAD STATE: TRANSFERRED
PRIORITY: NORMAL FILES: 1 / 1 BYTES: 742 / 742 (100%)
Transfer complete.
d:\.ziphttpd>dir
 ドライブ D のボリューム ラベルがありません。
 ボリューム シリアル番号は AA29-6187 です

 d:\.ziphttpd のディレクトリ

2021/01/23  20:05    <DIR>          .
2021/01/23  20:05    <DIR>          ..
2021/01/23  20:06               742 zh_download.cmd
               1 個のファイル                 742 バイト
               2 個のディレクトリ  78,172,520,448 バイトの空き領域

d:\.ziphttpd>

インストールの実行

インストールはダウンロードしたスクリプトで実施します。

./zh_download.cmd
dir

インストールの実行
d:\.ziphttpd>zh_download.cmd
"ZH_HOME: d:\.ziphttpd\"
"ZH_SRC: d:\.ziphttpd\src"
"PROJECT BUILD START: ziphttpd.windows"
Cloning into 'ziphttpd.windows'...
remote: Enumerating objects: 31, done.
remote: Counting objects: 100% (31/31), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 31 (delta 11), reused 27 (delta 7), pack-reused 0
Unpacking objects: 100% (31/31), 3.41 KiB | 1024 bytes/s, done.
Already up to date.
Already up to date.
        1 個のファイルをコピーしました。

(・・・中略・・・)

プロジェクト "d:\.ziphttpd\src\Launcher\ziphttpdTool.sln" (既定のターゲット) のビルドが完了しました。


ビルドに成功しました。
    0 個の警告
    0 エラー

経過時間 00:00:01.25
        1 個のファイルをコピーしました。

d:\.ziphttpd>

インストール後は以下のようになります。

インストール直後のファイル
d:\.ziphttpd>dir
 ドライブ D のボリューム ラベルがありません。
 ボリューム シリアル番号は AA29-6187 です

 d:\.ziphttpd のディレクトリ

2021/01/23  20:05    <DIR>          .
2021/01/23  20:05    <DIR>          ..
2021/01/23  20:10    <DIR>          src
2021/01/23  20:06               742 zh_download.cmd.old
2021/01/23  20:10               785 zh_download.cmd
2021/01/23  20:10        10,786,304 ziphttpd.exe
2021/01/23  20:10         7,476,224 zhsign.exe
2021/01/23  20:10         7,489,024 zhget.exe
2021/01/23  20:11        12,558,848 selector.exe
2021/01/23  20:11         7,789,568 updater.exe
2021/01/23  20:11            14,848 launcher.exe
               8 個のファイル          46,116,343 バイト
               3 個のディレクトリ  77,950,877,696 バイトの空き領域

d:\.ziphttpd>

動作確認

Launcher を起動

Launcher をダブルクリックすると、タスクバーに アイコンが表示され、起動後のディレクトリは以下のようになります。

初回起動直後のファイル
d:\.ziphttpd>dir
 ドライブ D のボリューム ラベルがありません。
 ボリューム シリアル番号は AA29-6187 です

 d:\.ziphttpd のディレクトリ

2021/01/23  20:05    <DIR>          .
2021/01/23  20:05    <DIR>          ..
2021/01/23  20:10    <DIR>          src
2021/01/23  20:06               742 zh_download.cmd.old
2021/01/23  20:10               785 zh_download.cmd
2021/01/23  20:10        10,786,304 ziphttpd.exe
2021/01/23  20:10         7,476,224 zhsign.exe
2021/01/23  20:10         7,489,024 zhget.exe
2021/01/23  20:11        12,558,848 selector.exe
2021/01/23  20:11         7,789,568 updater.exe
2021/01/23  20:11            14,848 launcher.exe
2021/01/23  20:10        10,786,304 ziphttpd.exe.now
2021/01/23  20:14                 6 ziphttpd.pid
2021/01/23  20:14    <DIR>          log
2021/01/23  20:14               380 ziphttpd.json
2021/01/23  20:14    <DIR>          docs
2021/01/23  20:14                 2 portlockins.json
              12 個のファイル          56,903,035 バイト
               5 個のディレクトリ  77,939,212,288 バイトの空き領域

d:\.ziphttpd>

ブラウザで起動確認

ZipHttpd のトップページはアイコンをダブルクリックすると開きます。


インストール直後ではドキュメントが何もダウンロードされていません。
まずは次節を参照して説明書のダウンロード設定をしてください。

ドキュメント

リポジトリからダウンロードする場合

Selector を起動

ダウンロード設定の例として、説明書を用います。
その操作のため、まずはアイコンを右クリックしてメニューを出して Selector を起動してください。

selector はリポジトリから ZipHttpd のドキュメントを公開しているサイトにアクセスするツールです。

ブラウザで操作

ブラウザで http://localhost:8822 にアクセスします。
リポジトリ登録されているサイトの一覧がアコーディングメニューで表示されています。


この中から ziphttpd.com を探して開きます。
開いた中に「download "ZipHttpd バージョン1"」のボタンがありますので押してください。


ZhpHttpd を再起動してください。

ブラウザで見ると ZipHttpd ドキュメントが top 画面に追加されています。


selector の WebAPI でワンタッチ登録させる案もありましたが、第三者に勝手に登録される危険性があるため廃案となりました。
例) http://localhost:8822/api/one/{サイト}/{グループ} へのリンクをクリックすると登録

ドキュメント表示

ドキュメントを top 画面のリンクから開きます。


コマンドでのダウンロード

selector は zhget のフロントエンドです。
ダウンロードするドキュメントが特定できているならば、
zhget.exe -host ziphttpd.com -group ziphttpd-V1
という操作でもダウンロードの登録が可能です。

この操作ではリポジトリに登録していないサイトのドキュメントでもダウンロードできます。

Java Documet を表示する場合

Java のドキュメントは zip 圧縮されていますので、ZipHttpd で簡単に参照できます。
まずは docs フォルダにダウンロードします。

コマンドラインでダウンロードするにはこんな感じです。

set URL=https://repo1.maven.org/maven2/javax/servlet/javax.servlet-api/4.0.1/javax.servlet-api-4.0.1-javadoc.jar
bitsadmin /transfer myDownloadJob /download /priority normal %URL% %CD%\docs\javax.servlet-api-4.0.1-javadoc.jar

ZhpHttpd を再起動してください。

top 画面にリンクが追加されます。


ドキュメント表示

top 画面のリンクから開きます。


初期表示ページの調整

ドキュメントの初期表示ファイルが分かりませんので、ディレクトリが表示されていますが、index.html を開くようにします。

type docs/javax.servlet-api-4.0.1-javadoc.json
vi docs/javax.servlet-api-4.0.1-javadoc.json
type docs/javax.servlet-api-4.0.1-javadoc.json

docs/javax.servlet-api-4.0.1-javadoc.json
{
    "name": "javax.servlet-api-4.0.1-javadoc",
    "path": "docs\\javax.servlet-api-4.0.1-javadoc.jar"
}

そのため、docs のドキュメント設定ファイルに "docroot": "index.html", の一行を追加します。

docs/javax.servlet-api-4.0.1-javadoc.json
{
    "docroot": "index.html",
    "name": "javax.servlet-api-4.0.1-javadoc",
    "path": "docs\\javax.servlet-api-4.0.1-javadoc.jar"
}

メニューから再起動(Restart)することでドキュメントの初期表示ファイルとして index.html が開かれるようになります。


文字コードの調整

また、ドキュメントによっては文字コードが utf-8 でないため文字化けする場合があります。
その場合にはファイルの文字コードを確認し、"contentencoding": "Shift_JIS", と追加してください。

リポジトリ登録

selector は ziphttpd.com をリポジトリとして、ドキュメントの提供サイトを取得しています。
リポジトリへの登録はドキュメントにはまだ記述していませんが、サインインなしの無料で登録可能です。

公開鍵(public.pem)&公開鍵署名(public.pem.zhsig)とカタログ(catalog.json)を zhsign で作成します。
カタログに説明などを書き込み、自社(例:yourdomain.com)サイトの https://yourdomain.com/sig/ 以下に公開します。
https://ziphttpd.com/api/v1/regist/yourdomain.com にアクセスします。(ブラウザからでも構いません)

これを契機として ziphttpd.com は公開鍵を署名で検証したのちに、一覧にそのドメインを追加します。

インストール後

インストールした後に ZipHttpd が更新された場合にはどうしたら良いでしょうか?
また、ダウンロードしているドキュメントが著作者によって更新されている場合も面倒です。
そんな時のための説明です。

プログラムの更新

ソースコードからビルドしている場合、Updater を使用するとバイナリ提供版で更新されてしまいます。

ソースから更新するには、インストールと同じく zh_download.cmd を実行します。
プログラムが常駐している場合に問題があるかもしれませんので、停止させてから実行してください。

zh_download.cmd

プログラムの更新
d:\.ziphttpd>zh_download.cmd
"ZH_HOME: d:\.ziphttpd\"
"ZH_SRC: d:\.ziphttpd\src"
"PROJECT BUILD START: ziphttpd.windows"
Already up to date.
Already up to date.
        1 個のファイルをコピーしました。
"PROJECT BUILD START: ziphttpd"
Already up to date.
Already up to date.
        1 個のファイルをコピーしました。
"PROJECT BUILD START: zhsig"
Already up to date.
Already up to date.
        1 個のファイルをコピーしました。
        1 個のファイルをコピーしました。
"PROJECT BUILD START: selector"
Already up to date.
Already up to date.
        1 個のファイルをコピーしました。
"PROJECT BUILD START: updater"
Already up to date.
Already up to date.
        1 個のファイルをコピーしました。
"PROJECT BUILD START: Launcher"
Already up to date.
Already up to date.
Microsoft (R) Build Engine バージョン 4.8.3752.0
[Microsoft .NET Framework、バージョン 4.0.30319.42000]
Copyright (C) Microsoft Corporation. All rights reserved.

このソリューション内のプロジェクトを 1 度に 1 つずつビルドします。並行ビルドを有効にするには、"/m" スイッチを追加してください。
2021/01/23 23:10:42 にビルドを開始しました。
ノード 1 上のプロジェクト "d:\.ziphttpd\src\Launcher\ziphttpdTool.sln" (既定のターゲット)。
ValidateSolutionConfiguration:
  ソリューション構成 "Release|Any CPU" をビルドしています。
プロジェクト "d:\.ziphttpd\src\Launcher\ziphttpdTool.sln" (1) は、ノード 1 上に "d:\.ziphttpd\src\Launcher\launcher\launcher.csproj" (2) をビルドしています (既定のターゲット)。
プロジェクト ファイルに ToolsVersion="15.0" が含まれています。このツールセットが不明であるか、存在しない可能性があります。その場合は、適切なバージョンの MSBuild をインストールして解決するか、ビルドがポリシー上の理由により特定の ToolsVersion を使用するよう強制されている可能性があります。プロジェクトを ToolsVersion="4.0" として扱います。詳細については、http://go.microsoft.com/fwlink/?LinkId=291333 を参照してくだ
さい。
CoreResGen:
  古いリソースは、それらのソース ファイルに対して存在しません。リソース生成を省略します。
GenerateTargetFrameworkMonikerAttribute:
すべての出力ファイルが入力ファイルに対して最新なので、ターゲット "GenerateTargetFrameworkMonikerAttribute" を省略します。
CoreCompile:
すべての出力ファイルが入力ファイルに対して最新なので、ターゲット "CoreCompile" を省略します。
CopyFilesToOutputDirectory:
  "obj\Release\launcher.exe" から "bin\Release\launcher.exe" へファイルをコピーしています。
  launcher -> d:\.ziphttpd\src\Launcher\launcher\bin\Release\launcher.exe
プロジェクト "d:\.ziphttpd\src\Launcher\launcher\launcher.csproj" (既定のターゲット) のビルドが完了しました。

プロジェクト "d:\.ziphttpd\src\Launcher\ziphttpdTool.sln" (既定のターゲット) のビルドが完了しました。


ビルドに成功しました。
    0 個の警告
    0 エラー

経過時間 00:00:00.67
        1 個のファイルをコピーしました。

d:\.ziphttpd>

ドキュメントの更新

更新されたドキュメントを自動的にダウンロードすることができます。
そのためには zhget を引数無しで実行します。
ZipHttpd を再起動すればドキュメントは更新されたものになります。

./zhget

ドキュメントの更新
d:\.ziphttpd>zhget

d:\.ziphttpd> 

Copyright (C) 2020- ZipHttpd.com [mail]