HSPの環境構築をする話

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

#目次
- [まずは標準環境を作ろう](#ますは標準環境を作ろう)
- [改造開始](#改造開始)
    - [コマンドラインコンパイラの導入](#コマンドラインコンパイラの導入)
    - [デバッグウィンドウを変更](#デバッグウィンドウを変更)
- [エディタを変えよう](#エディタを変えよう)
    - [サクラエディタ(マクロ装備エディタ)](#サクラエディタ(マクロ装備エディタ))
    - [Atom(パッケージ及びプラグイン内包エディタ)](#Atom(パッケージ及びプラグイン内包エディタ))
- [あとがき](#あとがき)

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

```c:test.hsp
mes "Hello World!"
```

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

#改造開始
　早速手を付けていこうと思います。
###コマンドラインコンパイラの導入
　とりあえず他エディタへの移植のためにコマンドラインコンパイラを入れます。ここではHSPのコマンドラインコンパイラとしては有名なhspcを使用します。
　ますは[hsptv](http://dev.onionsoft.net/seed/info.ax?id=1392)の作品ページにアクセスして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](https://github.com/vain0x/knowbug/releases/tag/v1.22.2)の方からknowbugを手に入れます。現在の最新バージョンは1.22.2なのでそのバージョンのパッケージを手に入れます。(アップデートが来たら最新版のパッケージを利用することお勧めします。)
　kknowbugの導入方法なのですが[こちら](https://github.com/vain0x/knowbug)の説明を見るのが一番わかりやすいと思います。

一部抜粋
####本体
>
0. [最新版のパッケージ](https://github.com/vain0/knowbug/releases/latest) の `knowbug-package.zip` をダウンロードします。
0. HSPのフォルダ(※)にある ``hsp3debug.dll`` と ``hsp3debug_64.dll`` の名前を変更します。
  * 例:``hsp3debug.dll`` → ``hsp3debug__default.dll``
0. `package` フォルダにある ``hsp3debug_knowbug.dll`` の名前を ``hsp3debug.dll`` に変えて、HSPのフォルダに移動します。
※「HSPのフォルダ」の位置は、HSPで ``path = dir_exe : input path, ginfo_winx`` を実行すると分かります。

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

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

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

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

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

```javascript: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,"");
}

```

```javascript: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,"");
}
```

```javascript: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,"");
}
```

```javascript:hsphelp.js
//HSPワンキーヘルプ [F1]

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

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

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

##Atom(パッケージ及びプラグイン内包エディタ)
　Atomを使う場合
　Atomは有志の方によってhsp3コンパイル用のパッケージが用意されており、マクロを書く手間なく簡単に導入が可能です。

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

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

```console:console
apm install language-hsp3
```

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

```console:console
apm install helpman-hsp3
```

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

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

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

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