Sample Ghost for Ukagaka written in Go with the power of cgo, for my blog post "Cross Compile DLL using Golang on Linux", a part of Go Advent Calender 2017 (Part 4).
Go Advent Calender 2017(その4)の一日目の記事である「Goを使ってDLLをクロスコンパイル on Linux」のサンプルゴーストです。
「伺か」というデスクトップアプリケーションに使われるキャラクターの、脳に当たる部分である「栞」をGoで書きました。 記事で説明したものを基に、ランダムトークしてくれるように書き足しています。
- かわいい女の子
のソロゴーストとGopherくんです。 - 奈良阪某さんのgithub.com/Narazaka/shiorigoを使っています。
- だいたい15〜30秒に一回ぐらいの頻度でランダムトークします。ネタが少ないのは仕様です。
- 起動時と終了時にも話します。
- その他の機能はありません。つついても撫でても無反応です。
お触りし放題! - ベースウェアとの通信ログがベースウェアのゴーストフォルダ内
gohst/ghost/master/shiori.log
に残ります。 - 通信はリクエスト・レスポンスともにUTF-8決め打ちですが、ログはShift_JISです。
- シェルはボトル猫さん作成の超かわいいフリーシェル『pink』を使っています。
Releasesからnarファイルをダウンロードできますので、お好みのベースウェアを起動してドラッグ&ドロップしてください。
Wine 上の SSP だとなぜか 2回インストールしようとして「上書きしないで別のフォルダ作る?」的なことを聞かれるので「いや、上書き」とお答えください。
動作確認は以下の環境で行っています。
- SSP 2.4.13 with Wine 1.6.2 (64bit) on Linux Mint 18.2 Sonya Xfce (64bit)
コンパイルには以下のものが必要です。
- Go 1.9.2(たぶん他のバージョンでもWindowsでの
-buildmode=c-archieve
をサポートしていればコンパイルできます) - GCC 5.3.1(たぶん他のバージョンでもコンパイルできます)
- github.com/Narazaka/shiorigo
Linux/MacでもMinGWを用意すればコンパイルできます。 詳しくは「Goを使ってDLLをクロスコンパイル on Linux」を見てください。
$ git clone 'https://github.com/kurousada/gohst'
$ cd gohst
$ go get github.com/Narazaki/shiorigo
$ CGO_ENABLED=1 GOOS="windows" GOARCH="386" CC="gcc" go build -buildmode=c-archive -o libshiori.a
$ gcc -m32 -shared -o shiori.dll shiori.def libshiori.a -Wl,--allow-multiple-definition -static -lstdc++ -lwinmm -lntdll -lws2_32
MinGWのGCCを使う場合はGCCのコマンドや引数、環境変数CC
を適切なものにしてください。
コンパイルしてできたshiori.dll
をgohst/ghost/master/
にコピーし、gohst
フォルダをZIP圧縮します。
そして拡張子を.nar
にすれば完成です。
$ cp shiori.dll gohst/ghost/master/shiori.dll
$ zip -r -q -l gohst.zip gohst # -l オプションでLFをCR+LFに変換します。
$ mv gohst.zip gohst.nar # narファイルはzipファイルの拡張子を変えただけです。
コンパイル〜nar作成までしてくれるシェルスクリプトを用意してあります。 MinGWとGo、zipコマンドがインストールされていればこちらが便利です。
$ chmod +x ./compile.sh # 実行権限を付与
$ ./compile.sh
Makefile……?なにそれおいし(ry
- テストを書く(
go test
とテスト用のベースウェアエミュレータで書ける?) - ゴーストのトークや反応、機能を増やす
相方を見つける(ソロだと基本的に独り言かユーザーさんに話しかける必要があるので……)Gopherくんが相方です!
シェル部分(descript.txt
とsurfaces.txt
を除く)はボトル猫さんの著作物です。
また、GopherはRenee Frenchさんによってデザインされました。
そのほかのKuro Usadaが作った部分はMIT Licenseにしておきます。