Houdini 19.5 ヘルプの使い方

セントラルヘルプサーバーの実行

On this page

概要

スタジオにセントラルヘルプサーバーをセットアップすれば、マシン毎に各Houdiniが各自のヘルプサーバーを実行させることなく、 複数のHoudiniユーザにヘルプを提供することができるようになります。 これは、ユーザ間のサイト固有のドキュメントを共有するのに役立ちます。

このドキュメントでは、セントラルヘルプサーバーを起動するためのソリューションをいくつか説明しています:

  • 小規模: デフォルトのヘルプサーバーを起動する。 これは、Houdiniに同梱されているデフォルトのPythonサーバーを単に起動させるだけです。 同時に数人のユーザがアクセスする分にはこれで十分かもしれませんが、ユーザが増えれば、おそらく以下のソリューションで高速化する必要があるでしょう。

    この解決策は、セットアップと起動が最も簡単ですが、同時に少数のユーザがアクセスする場合にのみ機能します。 これには、(Apprenticeライセンスなどの)Houdiniライセンスが必要になります。

  • より高速: プロキシサーバーを使用する。 これは、nginxなどのスタンドアローンなHTTPサーバーを使用し、ヘルプページコンテンツのリクエストをデフォルトのPythonサーバーに転送しつつ、多くのファイルを供給できるようにします。

    これが最もバランスの取れたソリューションです。 これによって、動的コンテンツと検索の提供とノードに埋め込まれたヘルプの読み込みが可能になると同時に、デフォルトのPythonサーバーよりも非常に高速です。 多数のユーザがアクセスする場合には、さほど速くないかもしれません。 これには、(Apprenticeライセンスなどの)Houdiniライセンスが必要になります。

  • さらに高速: WSGIアプリケーションサーバーを使用したアプリケーションを用意する。 これは、WSGIアプリケーションサーバーを使用して、静的ファイルを提供し、動的ページリクエストを処理します。

    これは、動的コンテンツと検索を提供しますが、ノードに埋め込まれたヘルプを読み込むことができません。 プロキシサーバーのソリューションよりも高速でスケーラビリティが高いです。 これにはHoudiniライセンスが 不要 です。

  • 最速: 静的ヘルプを提供する。 これは、ヘルプ内のwikiファイルから事前にHTMLファイルを生成するので、プレーンHTTPサーバーを使ってHTMLファイルを提供することができます。

    これが最も高速なソリューションで、プレーン静的ファイルを提供するだけなのでセットアップが簡単です。 このソリューションによって、Houdiniのヘルプを既存のウェブサーバーで公開することができます。 これは、動的コンテンツも検索もノードに埋め込まれたヘルプも 提供しません 。 これにはHoudiniライセンスが 不要 です。

Note

このドキュメントでは、一般的なソリューションと設定について説明します。 一部のソリューションでは、サードパーティ製ソフトウェアのインストールと設定が必要になります。 このドキュメントには、いくつか例が含まれていますが、残念ながら、プラットフォーム、ソフトウェア、設定オプションの有り得るすべての組み合わせが網羅されていることは期待できません。 使用するソフトウェア、その設定オプション、あなたが選んだソフトウェアがWSGIなどの規格をどのように使用するのかは、あなた独自で調べる必要があります。

ライセンス

ヘルプサーバーは、通常ではノードやツールに埋め込まれているヘルプを読み込むためにHOMを使用するので、起動するのにHoudiniライセンスが必要になります。

Apprenticeライセンスを含む任意の Houdiniライセンスを使ってhythonを実行することができます。 最も簡単な方法は、セントラルサーバーマシンをセットアップして、そこにApprenticeライセンスだけをインストールして、そのサーバープロセスがそのライセンスを使用するようにすることです。

他のライセンスタイプを不許可にすることで、 hythonがApprenticeライセンスを使用する ようにすることができます:

hython --skip-license-modes="commercial,indie,education" ...

静的ヘルプの提供にはライセンスは不要ですが、いくつか欠点があることに注意してください。 詳細は、下記の静的ヘルプの提供を参照してください。

小規模: デフォルトのヘルプサーバーを起動する

セントラルヘルプサーバーのセットアップの最も簡単な方法は、Houdiniに同梱されているデフォルトのPythonサーバーを単に起動させることです。 この欠点は、このPythonサーバーは単一プロセスしか使用できず、Pythonコードを使ってすべてのファイル(画像、スタイルシートなど)を提供していることです。 これは、数人規模だと十分な速さかもしれませんが、ユーザが増えれば、おそらく以下で説明しているもっと速い方法を調査する必要が出てきます。

  • セットアップが簡単。

  • 同時に多くのユーザがアクセスするにはスケーラビリティが弱いです。

コマンドライン

  1. Houdiniシェルを開きます。

    Windows

    スタート ▸ すべてのプログラム ▸ Side Effects Software ▸ Houdini X.X.XXX ▸ Utilities ▸ Command line tools をクリックします。

    Mac

    ファインダーから Applications ▸ Houdini ▸ HoudiniX.X.X ▸ Utilities ▸ Houdini Terminal を開きます。

    Linux

    bashシェルで、cdでHoudiniインストールディレクトリに移動し、source houdini_setupをタイプします。

  2. Houdiniシェルで、以下をタイプします:

    hhelp serve --bgindex=true
    

    これは、バックグラウンドのインデックス化を有効にしてヘルプサーバーを立ち上げます。

  3. ブラウザを開いて、以下のURLにアクセスします。

    http://localhost:8080/
    

hhelp serve

--host=0.0.0.0

サーバーのIPアドレス。

  • コンピューターに複数のネットワークコントローラーがあれば、ヘルプサーバーにListenさせたいアドレスを指定することができます。

  • ヘルプサーバーを他のコンピュータから利用可能にするには、0.0.0.0(デフォルト)を使用します。

  • ヘルプサーバーをあなたのコンピュータでのみ利用可能にするには、localhostまたは127.0.0.1を使用します。

--port=8080

サーバーのポート番号。デフォルトは8080です。

--debug

情報のデバッグを有効にして、サーバーを実行します。

--bgindex

サーバーが実行中にバックグラウンドで変更のあったドキュメントのインデックスを再生成します。

--config=path

(オプション) コンフィグオプションを読み込むファイル。

--logfile=path

(オプション) サーバーログの書き出し先のファイル。

--loglevel=DEBUG|INFO|WARNING|ERROR

(オプション) この重要度レベルでメッセージをログにします。

hhelp index

このコマンドは、手動で検索インデックスを更新します(--bgindexオプションでサーバーを実行していない場合)。デフォルトでは、このコマンドは--cleanオプションを指定しない限り、変更のあったファイルのみを更新します。

--clean

ドキュメントの変更の有無に関わらず、ゼロからすべてのドキュメントのインデックスを再生成します。

--usages

サンプルファイルで使用されているノードに関する情報を生成します。

--config=path

(オプション) コンフィグオプションを読み込むファイル。

--logfile=path

(オプション) サーバーログの書き出し先のファイル。

--loglevel=DEBUG|INFO|WARNING|ERROR

(オプション) この重要度レベルでメッセージをログにします。

Hythonからサーバーを起動する

コードでビルトインのサーバーを起動したい場合:

from houdinihelp.server import start_server

start_server(
    host="0.0.0.0",         # Listenするネットワークインターフェース
    port=8080,              # Listenするポート
    debug=False,            # サーバーをデバッグモードで実行させるかどうか
    bgindex=None ,          # バックグラウンドインデックスを行なうかどうか
    config_file=None,       # コンフィグファイルまでの文字列パス
    use_houdini_path=True,  # 以下を参照してください
)
  • config_fileNoneuse_houdini_pathTrueの場合には、そのコードはhouを使用して、Houdiniパスからconfig/Help/bookish.cfgコンフィグファイルを検索します(以下のコンフィグを参照してください)。これはhouがまだインポートされていない時にバッチライセンスを使用します。その引数にコンフィグファイルを指定していれば、このことについて心配する必要はありません。

  • bgindexキーワード引数には、True, False, Noneを指定することができます。Noneは、設定ファイルの値を使用し、TrueまたはFalseは、その設定を上書きするかどうかです。

より高速: プロキシサーバーを使用する

nginxuwsgiなどの小さなウェブサーバーアプリケーションをインストールして起動し、そのアプリケーションを使ってヘルプの静的ファイルを直接提供したり、ヘルプページのリクエストをヘルプサーバーに“中継”(プロキシ)させることができます。

  • セットアップが比較的簡単。

  • スタンドアローンサーバーがほとんどのファイル(画像、スタイルシートなど)を処理するので、デフォルトのヘルプサーバーよりも非常に高速です。

  • 変わらずHoudiniパス外にあるヘルプファイル、ノードやツールなどに埋め込まれたヘルプから動的なwikiヘルプを提供することができます。

  • ページコンテンツのリクエストは変わらずヘルプサーバーを経由するので処理能力が限定されます。

セントラルサーバーディレクトリをセットアップする

プロキシサーバーをセットアップするには、以下の手順を踏みます:

  1. 上記で説明しているようにhhelp serveを使ってヘルプサーバープロセスを起動します。

  2. セントラルサーバー用ディレクトリを作成し、その中に、静的ファイル用ディレクトリを作成します:

    % mkdir central central/files
    % cd central
    
  3. 静的ヘルプファイル(画像やスタイルシートなど)をcentral/filesディレクトリにコピーします。

    (一部のファイルは.zipファイルに圧縮されています。目的のファイルを指定してコピーするのは面倒なので、そのzipファイル内のすべてのファイルを1箇所にコピーします。)

    % mkdir files/icons files/images files/static
    % unzip $HFS/houdini/help/icons.zip -d files/icons
    % unzip $HFS/houdini/help/images.zip -d files/images
    % cp -r $HFS/houdini/help/videos videos
    % cp -r $HFS/houdini/python2.7libs/bookish/static/* static
    % cp -r $HFS/houdini/python2.7libs/houdinihelp/static/* static
    

    ($HFS/houdini/python2.7libs内のbookish/statichoudinihelp/staticの内容をcentral下のfiles/static単一ディレクトリにマージしていることに注意してください。)

  4. centralディレクトリの絶対パスが設定された環境変数を作成します。

    例:

    export CENTRAL=/home/username/central
    

    (これは必ずしも必須ではありませんが、下記の例では便宜的にそのcentralのディレクトリパスを示した$CENTRALを使用しています。)

プロキシサーバーをセットアップする

  1. スタンドアローンのHTTPサーバーをインストールします。

    この手順は、あなたが使用したいHTTPサーバーに依存します。 私どもはnginxなどの軽量サーバーを推奨しています。

    システム上にサーバーソフトウェアをインストールする方法は、このドキュメントの範囲を超えています。 プラットフォーム別にサーバーソフトウェアをインストールする方法は、そのドキュメントを参照してください。 一般的に、Linuxでは、ディストリビューションのパッケージマネージャを使うことでnginxをインストールすることができます。 Macでは、まず最初にHomebrewをインストールしてから、そのHomebrewを使ってnginxをインストールすることができます。

  2. HTTPサーバーが静的ファイルを直接提供し、他のリクエストをヘルプサーバーに中継させるようにセットアップします。

    これは、あなたが使用しているHTTPサーバーとその設定方法に大きく依存します。 以下の例を参照してください。

nginxの例

以下はnginxのコンフィグレーションファイルの例です。 このファイルをcentralディレクトリに保存することができます。

proxy.nginxコンフィグレーションファイル

worker_processes 4;
daemon off;
error_log stderr;
http {
    include /usr/local/etc/nginx/mime.types;
    server {
        listen 0.0.0.0:9090;
        location ~ ^/(images|icons|videos|static)/ {
            root $CENTRAL/files;
        }
        location / {
            proxy_pass http://localhost:8080/;
        }
    }
}
events {
    worker_connections  1024;
}

(利用可能な設定の全リストは、nginxのドキュメントを参照してください。)

  • この例では、サーバーが別プロセスを即座にフォークして返さないようにdaemon offを設定しているので、そのエラーメッセージと他の出力を確認することができます。目的通りにサーバーをセットアップすることができたら、サーバーがバックグラウンドで実行できるように、これをonに変更してください。 nginx -s reloadを使用すればそのコンフィグファイルをリロードすることができ、nginx -s stopを使用すればサーバーを停止することができます。

  • include /usr/local/etc/nginx/mime.types;の行は、インストール方法によって異なります。 nginxのmime.typesファイルがインストールされている場所をチェックして、そのパスを指定してください。

  • listen 0.0.0.0:9090の行には、nginxサーバーがリッスンするIPアドレス/ポートを設定します。 これは、ヘルプサーバーがリッスンしているポート(上記の例では8080)と 異なる ポートを設定してください。

    (localhost127.0.0.1とは違って)0.0.0.0のリッスンは、ネットワーク上の他のコンピュータがこのサーバーにアクセスできることを意味します。

  • root $CENTRAL/files;の行には、上記で作成したcentralディレクトリの絶対パスを指定してください。 このパスには、ホームディレクトリを意味するチルダ(~)を使用することが できません

  • proxy_pass http://localhost:8080/;の行には、ヘルプサーバーのルートURLを指定してください。

このコンフィグレーションを使ってnginxを起動することができます:

% nginx -c $CENTRAL/proxy.nginx

コンフィグファイルの絶対パスを指定しなければならないことに注意してください。 絶対パスを指定しなかった場合、nginxは現行ディレクトリではなくてインストールディレクトリを基準にコンフィグファイルを検索します。 もう一度言いますが、このパスには、ホームディレクトリを意味するチルダ(~)を使用することができません。

これで、ブラウザにURLを指定することで、そのサーバーにアクセスすることができます:

http://localhost:9090/

さらに高速: WSGIアプリケーションサーバーを使用したアプリケーションを用意する

上記のプロキシサーバーの例は、hhelpを使っていつものHoudiniヘルプサーバーを起動してから必要に応じてヘルプサーバーにリクエストを転送することができるので比較的セットアップが簡単です。

しかし、この欠点は、HTTPを介してヘルプサーバーと通信するには幾分非効率であり、そのPythonヘルプサーバーは単一プロセス/単一スレッドで処理能力が限定されます。

ヘルプサーバーを起動してリクエストをそのサーバーに転送する方法とは違って、このソリューションは、uwsgigunicornmodwsgiによるApacheなどの WSGIアプリケーションサーバー を使用して、Houdiniヘルプのアプリケーションコード自体を実行するので、マルチプロセス/マルチスレッドで処理をすることができます。

WSGIは、スタンドアローンのHTTPサーバーがPython関数を実行して動的なウェブコンテンツを生成可能にするプロトコルです。 この欠点は、そのサーバーが通常のPythonインタープリタ自体を起動する必要があるので、Houdiniのライブラリのパスが自動的にセットアップされたhythonに頼ることができないことです。 このセクションに載せているapplication.pyは、Houdiniヘルプアプリケーションが通常のPythonを実行できるようにPythonパスを制御します。

  • 通常のヘルプサーバーまたはプロキシサーバーのソリューションよりも高速です。

  • 指定したディレクトリから動的なwikiヘルプを提供することができます。

  • Houdiniライセンスが不要です。

  • (Houdiniのライブラリが使用できるように自動的にPythonパスをセットアップする)hythonを使用することができないのでセットアップが若干難しいです。

  • houを使用することができないので、このソリューションでは、アセットやツールに埋め込まれているヘルプを提供することができません。

Note

$HFS変数などの環境変数が利用できるようにするために、Houdiniシェル環境内でサーバーを起動してください。

アプリケーションサーバーをセットアップする

  1. まず最初に、上記のセントラルサーバーディレクトリのセットアップのとおりにディレクトリ構造をセットアップします。

    以下のようなディレクトリ構造にしてください:

    central/
        files/
            icons/
                ...
            images/
                ...
            videos/
                ...
            static/
                ...
    
  2. アプリケーションサーバーでは、サーバーページをコールするapplication()関数を生成するスクリプトが必要です。

    アプリケーションサーバーは、hythonではなくPythonを使ってスクリプトを実行するので、Houdiniライブラリが自動的に利用可能になりません。

    以下の例のスクリプトは、Houdiniのライブラリが見つかるようにPythonパスを制御し、application()関数を生成する前にアプリケーションが$HFS下のファイルを見つけられるように設定します。

    これをcentral下にapplication.pyという名前のファイルに保存します。

    central/application.pyスクリプトの例

    import logging
    import sys
    from os.path import expandvars
    
    # PythonパスにHoudiniライブラリを追加します。
    sys.path.append(expandvars("$HFS/houdini/python2.7libs"))
    
    # Houdiniのサードパーティ製Pythonライブラリを追加します。残念ながら、このパスはプラットフォーム依存です。
    if sys.platform in ("linux", "linux2"):
       sys.path.append(expandvars("$HFS/python/lib/python2.7/site-packages-forced"))
    elif sys.platform == "darwin":
        sys.path.append(
            expandvars(
                "$HFS/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages-forced"
            )
        )
    elif sys.platform in ("win32", "win64"):
        sys.path.append(expandvars("$HFS/python27/lib/site-packages-forced"))
    
    
    from houdinihelp.hconfig import HoudiniHfsConfig
    from houdinihelp.server import get_houdini_app
    
    
    class MyConfig(HoudiniHfsConfig):
        # 提供元となるディレクトリ
        DOCUMENTS = [
            # $HFS/houdini/help下にあるファイルを"展開"(Zip解凍)します。
            expandvars("$HFS/houdini/help"),
            {
                # これは、$HFS/houdini/help内の.zipファイルからドキュメントを読み込めるようにします。
                "type": "object",
                "classname": "bookish.stores.ZipTree",
                "args": {
                    "dirpath": expandvars("$HFS/houdini/help"),
                }
            },
            # これは、ユーザープリファレンスディレクトリ内のhelpディレクトリ下のファイルを追加します。
            expandvars("$HOUDINI_USER_PREF_DIR/help"),
    
            # サーバーに追加したい他のディレクトリをここに追加します。
            # "/my/dir",
        ]
    
        # ユーザープリファレンスディレクトリ内にキャッシュを保存します。
        CACHE_DIR = expandvars("$HOUDINI_USER_PREF_DIR/config/Help/cache")
    
        # Houdiniに同梱されているフルテキストインデックス。
        # バックグラウンドインデックスを使用したいのであれば、このディレクトリを書き込み可能な場所にコピーして、
        # その書き込み可能ディレクトリのパスをここに設定してください。
        INDEX_DIR = expandvars("$HFS/houdini/config/Help/index")
    
        # サーバーがバックグラウンドでインデックス化スレッドを実行するようにさせたいのであればTrueを設定します。
        ENABLE_BACKGROUND_INDEXING = False
        # バックグラウンドインデックスが実行される間隔の秒数。
        BACKGROUND_INDEXING_INTERVAL = 60
    
        # houを使用しないページマネージャを指定します。
        PAGES_CLASS = "houdinihelp.hpages.HoudiniPagesWithoutHou"
    
    
    application = get_houdini_app(
        use_houdini_path=False,
        config_obj=MyConfig,
        loglevel=logging.INFO,
        debug=False,
    )
    
  3. WSGIアプリケーションサーバーをインストールします。

    この手順は、あなたが使用したいアプリケーションサーバーに依存します。 私どもはuwsgiなどの軽量サーバーを推奨しています。

    システム上にサーバーソフトウェアをインストールする方法は、このドキュメントの範囲を超えています。 プラットフォーム別にサーバーソフトウェアをインストールする方法は、そのドキュメントを参照してください。 uwsgiに関しては、Pythonのpip3パッケージマネージャ(pip3 install uwsgi)を使ってインストールすることができます。 これは、基本プログラムだけでなく必要なすべてのプラグインもインストールされるので、uwsgiに最適なインストール方法です。

  4. WSGIアプリケーションサーバーが静的ファイルを直接提供し、application.pyスクリプトを使って動的なヘルプページを提供するようにセットアップします。

    これは、あなたが使用しているアプリケーションサーバーとその設定方法に大きく依存します。 WSGI機能の扱い方と静的ディレクトリの指定方法の詳細は、あなたのアプリケーションサーバーのドキュメントを参照してください。

uwsgiの例

以下のコマンドは、uwsgiをHTTPサーバーとして起動し、リッスンするアドレス/ポートを設定し、(上記でセットアップした)静的ファイルの提供元となるディレクトリを指定し、このアプリケーションのWSGI関数を生成するスクリプトの場所を指定します:

% uwsgi --http 0.0.0.0:9090 --check-static $CENTRAL/files $CENTRAL/application.py

最速: 静的ヘルプを提供する

  • 最速で最も堅牢なソリューションです。

  • どのHTTPサーバーも使用することができ、アプリケーションの設定が不要です。

  • Houdiniライセンスが不要です。

  • 静的ページのみを提供し、動的wikiページは提供しません(つまり、wikiヘルプファイルを編集してもブラウザでリロードしてその結果を即座に確認することができません)。

  • 検索機能なし!

すべてのヘルプファイルを事前生成する

  1. まず最初に、上記のセントラルサーバーディレクトリのセットアップのとおりにディレクトリ構造をセットアップします。

    以下のようなディレクトリ構造にしてください:

    central/
        files/
            icons/
                ...
            images/
                ...
            videos/
                ...
            static/
                ...
    
  2. Houdiniシェルで、cdコマンドを使ってcentralディレクトリに移動します。

  3. 以下のコマンドを実行します:

    hhelp generate files

    これは、Houdiniヘルプ内のすべてのwikiファイルから静的なHTMLファイルを生成します。 これには時間がかかります。

  4. 一度HTMLファイルを生成すれば、どのHTTPサーバーでもcentral/files内のファイルを提供するようにすることができます。

ヘルプサーバーの設定

  • hhelpコマンドラインユーティリティで--configオプションを使ってコンフィグレーションファイルを指定することができます。 または、houdinihelp.server.get_houdini_apphoudinihelp.server.start_serverconfig_fileパラメータを使ってコード内でコンフィグレーションファイルを指定することもできます。

  • コンフィグレーションファイルを指定しない、且つ、HOUDINIPATH/config/Help/bookish.cfgが存在する場合、(use_houdini_path=Falseを渡さない限り)サーバーはそのファイルを読みに行きます。

  • ヘルプサーバーはFlaskベースです。Flaskのコンフィグレーションファイルは実際はPythonです。

例えば、$HOME/myfilesにあるファイルのディレクトリを追加するには、コンフィグレーションファイルに以下のステートメントを追加します:

EXTRA_DOCUMENTS = ["$HOME/myfiles/"]

役に立ついくつかのコンフィグレーションキーは、以下を参照してください。

役に立つコンフィグレーションキー

DOCUMENTS = [...]

ドキュメントソースのデフォルトのリストには、Houdiniパスのhelpディレクトリ、さらには、アセットとシェルフツール内部のヘルプの読み込みを可能にする特別なソースが含まれています。 このリストを、ディレクトリ のみ を提供できるようにディレクトリパスのリストに置換することができます。例:

DOCUMENTS = ["/my/dir"]

置換の代わりに、コンフィグレーションファイル内でこのリストを拡張することもできますが、その場合、EXTRA_DOCUMENTSを使用した方が簡単です(以下参照)。

EXTRA_DOCUMENTS = []

デフォルトのDOCUMENTSに加える“追加”ドキュメントソースのリスト。 これは、デフォルトのドキュメントだけでなく、いくつか追加でディレクトリを提供したい時に役立ちます。

(このデフォルトのリストにはHOUDINIPATH/helpが含まれているので、Houdiniパスを拡張することでも同様の事ができます。)

EXTRA_DOCUMENTS = ["/my/dir"]

ENABLE_BACKGROUND_INDEXING = False

変更のあったコンテンツの再インデックス化をするためにバックグラウンドでスレッドを実行するかどうかを指定します。 これは、コマンドラインの--bgindexオプションで上書きすることができます。

BACKGROUND_INDEXING_INTERVAL = 60

バックグラウンドインデックスが有効な時に再インデックス化する間隔の秒数。

EXTRA_SHORTCUTS = []

検索ショートカットを参照してください。

CACHE_DIR = "$HOUDINI_USER_PREF_DIR/config/Help"

wikiソースファイルから生成された.jsonファイルをサーバーがキャッシュ化する場所。

INDEX_DIR = "$HFS/houdini/config/Help/index"

検索インデックスを含んだディレクトリ。

ヘルプの使い方

基本

ノードのドキュメント化

セントラルヘルプサーバーの起動