HSPの環境構築をする話


概要

 タイトル通りHSPの環境構築について書いていこうと思います。
 HSPはインストーラーなりで環境を作ってくれるのだが、正直 使いづらい! そこで環境構築について書いていこうと思うと思います。

目次

まずは標準環境を作ろう

 標準の環境を構築していきます。
 公式ホームページの上の2つのうちお好きなほうを選んでダウンロードしてください。そしたらzip版は好きなところ(この場合は便宜上C:\hsp351とします)に解凍、exe版の場合は適当にNextを押せば勝手にインストールされるはずです。
 これだけで標準環境の構築は完了です。
 早速プログラムを実行してみましょう。スタートメニューからHSPスクリプトエディタを選択して起動するか、hsp351に入っているhsed3.exeを起動して以下のプログラムを入力してF5を押してみましょう。

test.hsp
mes "Hello World!"

うまくいくとウィンドウが出てきてHello Worldと表示されるはずです。

改造開始

 早速手を付けていこうと思います。

コマンドラインコンパイラの導入

 とりあえず他エディタへの移植のためにコマンドラインコンパイラを入れます。ここではHSPのコマンドラインコンパイラとしては有名なhspcを使用します。
 ますはhsptvの作品ページにアクセスしてhspcを手に入れます。そしたらReadMeにも書いてありますが、HSP3開発環境のルートディレクトリにhspc.exeをコピーして、readme.mdをdoclibディレクトリにコピーします。これでhspcの導入は完了です。
 hspcはコマンドラインコンパイラと呼ばれるものでその名の通りコマンドラインからHSPのプログラムをコンパイルすることができます。引数については下の表をご覧ください。

オプション
d              デバッグ情報を付与してコンパイルします。
w              実行時にデバッグウィンドウを開きます。
p              プリプロセス処理のみ行います。AXファイルが必要となるオプション(m,r)は、実行されません。
i              ソースファイルをUTF-8のコードページとして認識します。
u              AXファイルの文字列をUTF-8にエンコードします。
c              予約されています。
v              hspc.exeとhspcmp.dllのバージョンを表示します。
r              コンパイルに成功した場合、生成したAXファイルまたは実行ファイルを実行します。
m              packfileに従い、自動実行ファイル作成を行います。
e              コンパイル時に、拡張マクロを定義しません。
P              ソースファイルに基づき、packfileを作成します。
h              予約されています。
C              hspcのカレントディレクトリを指定されたソースファイルがあるディレクトリに移動します。
a              ソースファイルのコードページを自動で識別します。UTF-8以外だった場合、Shift_JISとして認識します。
E              コンパイルエラーが発生しても、プロセスは正常終了します。

 デバッグ実行は-dwrCa、実行ファイル作成はCPmaとなります。(各オプションの順番は問わない)

デバッグウィンドウを変更

 次にデバッグウィンドウを変えていこうと思う。標準のデバッグウィンドウはかなり使いづらいので有志の方が作成してくれたknowbugを使っていきます。
 まずはGitHubの方からknowbugを手に入れます。現在の最新バージョンは1.22.2なのでそのバージョンのパッケージを手に入れます。(アップデートが来たら最新版のパッケージを利用することお勧めします。)
 kknowbugの導入方法なのですがこちらの説明を見るのが一番わかりやすいと思います。

一部抜粋

本体

  1. 最新版のパッケージknowbug-package.zip をダウンロードします。
  2. HSPのフォルダ(※)にある hsp3debug.dllhsp3debug_64.dll の名前を変更します。
    • 例:hsp3debug.dllhsp3debug__default.dll
  3. package フォルダにある hsp3debug_knowbug.dll の名前を hsp3debug.dll に変えて、HSPのフォルダに移動します。 ※「HSPのフォルダ」の位置は、HSPで path = dir_exe : input path, ginfo_winx を実行すると分かります。

WrapCall

(省略可)
WrapCall プラグインを追加すると、ユーザー定義コマンドに関する機能が有効になります。
* 同梱されている WrapCall.asuserdef.as をHSPの common フォルダに移動します。
* 既に userdef.as がある場合は、上書きではなく追記してください。
注意: 64bit版ランタイムを使う際は、標準のヘッダ hsp3_64.as を WrapCall より前に #include しておく必要があります。

設定ファイル

(省略可)
設定ファイル を knowbug (hsp3debug.dll) と同じフォルダに置いておくと、起動時に読み込まれます。

 かなり面倒くさそうですが一番重要なのがDLLの差し替えの部分で、それ以外はおまけみたいなものです。

エディタを変えよう

 HSP標準のエディタはなかなかに使いづらいものがあります。なのでエディタを変えていきましょう。

サクラエディタ(マクロ装備エディタ)

 サクラエディタを使う場合(ここでは代表としてサクラエディタを取り上げていますが、ほかのマクロが書けるエディタでも同様にしてHSPの環境構築ができます。)
 サクラエディタでHSPを書く場合はマクロを書かなければいけません。マクロは共通設定 → マクロから設定できます(詳しくはこちらを参照してください)。実際のマクロ例は以下を参照してください。

comp_d.js
//HSPデバッグ実行 [F5]

//[hspc.exe]のパス
var hspcpath = "C:/hsp351/hspc.exe";

//無題かどうか判断
if( ExpandParameter("$f") == "(無題)" ) {
    //コンパイルするファイルのパスを取得
    var filepath = ExpandParameter("$S").replace("sakura.exe","tmp.hsp");

    //名前を付けて保存
    FileSaveAs(filepass,99,0);

    //[hspc.exe]に処理を受け渡す
    ExecCommand(""+hspcpath+" "+"-dwrCa"+" "+filepath,0,"");
} else {
    //コンパイルするファイルのパスを取得
    var filepath = ExpandParameter("$F");

    //上書き保存
    FileSave();

    //[hspc.exe]に処理を受け渡す
    ExecCommand(""+hspcpath+" "+"-dwrCa"+" "+filepath,0,"");
}

comp_n.js
//HSPノーマル実行 [F6]

//[hspc.exe]のパス
var hspcpath = "C:/hsp351/hspc.exe";

//無題かどうか判断
if( ExpandParameter("$f") == "(無題)" ) {
    //コンパイルするファイルのパスを取得
    var filepath = ExpandParameter("$S").replace("sakura.exe","tmp.hsp");

    //名前を付けて保存
    FileSaveAs(filepass,99,0);

    //[hspc.exe]に処理を受け渡す
    ExecCommand(""+hspcpath+" "+"-rCa"+" "+filepath,0,"");
} else {
    //コンパイルするファイルのパスを取得
    var filepath = ExpandParameter("$F");

    //上書き保存
    FileSave();

    //[hspc.exe]に処理を受け渡す
    ExecCommand(""+hspcpath+" "+"-rCa"+" "+filepath,0,"");
}
makeexe.js
//HSP実行ファイル自動作成 [CTRL + F9]

//[hspc.exe]のパス
var hspcpath = "C:/hsp351/hspc.exe";

//無題かどうか判断
if( ExpandParameter("$f") == "(無題)" ) {
    //コンパイルするファイルのパスを取得
    var filepath = ExpandParameter("$S").replace("sakura.exe","tmp.hsp");

    //名前を付けて保存
    FileSaveAs(filepass,99,0);

    //[hspc.exe]に処理を受け渡す
    ExecCommand(""+hspcpath+" "+"-CPma"+" "+filepath,0,"");
} else {
    //コンパイルするファイルのパスを取得
    var filepath = ExpandParameter("$F");

    //上書き保存
    FileSave();

    //[hspc.exe]に処理を受け渡す
    ExecCommand(""+hspcpath+" "+"-CPma"+" "filepath,0,"");
}
hsphelp.js
//HSPワンキーヘルプ [F1]

//[hdl.exe]のパス
var hdlpath = "C:/hsp351/hdl.exe";

//[hdl.exe]を起動
Left();
ExecCommand(""+hdlpath+" "+ExpandParameter("$C"),0,"");
Right();

 上記の4つが例になります。基本はhspc.exeのパスを書き換えるだけで動作するはずですが、適宜書き換えてください。最初の[ ]内のキーはお勧めの割り当てキーです。

Atom(パッケージ及びプラグイン内包エディタ)

 Atomを使う場合
 Atomは有志の方によってhsp3コンパイル用のパッケージが用意されており、マクロを書く手間なく簡単に導入が可能です。

 HSP関連のパッケージは主に language-hsp3 helpman-hsp3 linter-hsp3 の3つがあります。それぞれについて解説していきます。

language-hsp3

 HSPの実行及び実行ファイル作成をサポートします。
 インストールするにはlanguage-hsp3で検索してインストールするか以下コマンドをコマンドプロンプトもしくはターミナルで実行してください。

console
apm install language-hsp3

helpman-hsp3

 HSPのワンキーヘルプをサポートします。
 インストールするにはhelpman-hsp3で検索してインストールするか以下コマンドをコマンドプロンプトもしくはターミナルで実行してください。

console
apm install helpman-hsp3

linter-hsp3

 HSPのリアルタイム解析とエラー通知を行います。
 実行には前提としてlinterというパッケージが必要です。
 インストールするにはlinter-hsp3で検索してインストールするか以下コマンドをコマンドプロンプトもしくはターミナルで実行してください。

console
apm install linter-hsp3

 
 それぞれのパッケージに共通することですが、設定のところからhspc.exeのパスを指定しないと上手く動きません。
 詳しいことはそれぞれのヘルプをお読みください。

 
 このようなエディタ以外にも有志の方々が作成してくださった優秀なエディタが数多くあります。使ってみて自分に合ったエディタをお使いください。

あとがき

 HSPはまだまだマイナーな言語だけど、より多くの方々に知ってほしいと思いこの記事を書きました。この記事を読んだ人が1人でも多くHSPを使ってくれることを願います。