デスクトップ版イカガカ
イカガカは「ブラウザで(も)動く」「オープンソースで拡張性の高い」伺かベースウェアを目指して開発されました。
Webベースウェアとして登場したイカガカは、EmscriptenによるSHIORIエミュレーション、BrowserFSによるファイルシステムエミュレーション、jszip、canvas利用等によって、頑張ればブラウザでも色々動かせるという知見を示すことができました。
一方でその後、「ブラウザで(も)動く」目的のための「ブラウザに載せる技術」の複雑性により、作業が進まないという問題を抱えています。
そこで、このプロジェクトではもう一つの「オープンソースで拡張性の高い」伺かベースウェアを作るという側面について推し進めるために、一旦一般WebブラウザではなくelectronによるWindows上での動作を前提として、基礎的なベースウェアの仕組みを拡充することを目的とします。
- とりあえずElectronの動くWindows上で動作すればよい
- ファイルシステムエミュレーション不要
- SHIORIエミュレーション不要
- 理想をSSP置き換えとして一定の互換性向上を目指す(最初から100%担保を目的とするものでは無く、ブラウザ上動作他周辺の目的とバランスをとってすすめたい)
- node.js 8+
- TypeScript 2.7+
- NW.jsまたはElectron
- Visual Studio Code または Visual Studio (Community)
複雑性を回避するため、Babelは使わずTypeScript一本で出来ることをし、またWebpack等のモジュールバンドラーは出来れば使わないで行きたい。
node.js公式からインストールできる。
plenvのように複数バージョンを扱えるnodistなどを使う方法もある。
お好みで。
Githubを使うので。
git公式、Git for Windows、SourceTree、Github Desktop等がある。
コマンドライン派としては前者側がおすすめだがどれでも良い。GUIはなぜかコマンドラインと別の言葉を使いたがることが多い。
どっちでもいいのでMSからインストール。
ソリューションファイルを現状設けていないのでVisual Studio Codeでやるほうがスムーズ。
ただインテリセンスがいまいちいい感じに更新されないようになってエディタ再起動したりする作業はたまにあります。
このリポジトリをクローン
npm install
を叩くと一式インストールされます。
なおyarnだとcuttlebone系の依存関係がめんどくさいことになって上手いこと行かないのでnpm一択。
基本的に2窓開いて(VSCodeの下でもいける)、npm run watchbuild
とnpm run ndevw
を実行しとくスタイルが便利。
初回に1回だけ叩いてください。
npm run prepare:example
初回及びHTML更新があった場合はbuild。以後はwatchbuildでよさそう。
# ビルド(TypeScriptをトランスパイル)し、HTMLと一緒にdistフォルダに置く
npm run build
# インストールさえyarn回避すればyarn buildとかでもよい
# TypeScriptのみ更新をチェックしつつビルドする(HTMLは更新されない) 通常はこちらで良いと思う
npm run watchbuild
# 開発用にNW.jsを立ち上げる(ファイルが更新あったら再読み込みする)
npm run ndevw
# 開発用にNW.jsを立ち上げる(上記に加えて背景透過&ウインドウ枠非表示&最大化でゴーストっぽくなる)
npm run ndev
# NW.jsを立ち上げる(更新トラッキングなし)
npm run n
# 開発用にElectronを立ち上げる(ファイルが更新あったら再読み込みする)
npm run edevw
# 開発用にElectronを立ち上げる(上記に加えて背景透過&ウインドウ枠非表示&最大化でゴーストっぽくなる)
npm run edev
# Electronを立ち上げる(更新トラッキングなし)
npm run e
devのほうは閉じるボタンがないのでタスクバーアイコン右クリかAlt+F4で閉じて下さい。
イカガカの要素技術(伺か Advent Calendar 2016) にまとめられています。
ブラウザ動作でないので内必要なのは
- 単体ゴーストの動作(materia相当) https://github.com/Ikagaka/ghost-kernel.js
- 複数ゴーストの協調動作(SSP相当) なし 古いコードベースだと https://github.com/Ikagaka/NanikaManager だが、1から作った方が良さそうな出来。
- シェル描画ライブラリ https://github.com/Ikagaka/cuttlebone (とりあえず現状一番動くものなのでこれを使う。API刷新したい箇所があったりWebGL使いたかったり。)
- さくらスクリプトパーサー https://github.com/Ikagaka/sakurascript
- さくらスクリプトをウェイト考慮して実行しイベントを飛ばす実行機 https://github.com/Ikagaka/sakurascript-executer.js
- SHIORI接続 本物のDLLに繋ぐライブラリはない。作る必要あり。
- SHIORI通信インターフェース https://github.com/Ikagaka/shiorif
- ファイルシステム操作関係(インストールとか含む) https://github.com/Ikagaka/NanikaStorage
その他多分あまり表に出てこないが使うやつとしては
- 単体ゴースト動作させるghost-kernel.jsが前提としているイベントルーターライブラリ https://github.com/Narazaka/lazy-event-router.js
- SHIORIプロトコルパーサー/ビルダー https://github.com/Narazaka/shiorijk
- SHIORI通信の2.x/3.x変換 https://github.com/Narazaka/shiori_transaction.js と https://github.com/Narazaka/shiori_converter.js の合わせ技
- タイマーイベント起こすやつ https://github.com/Ikagaka/ukagaka-timer-event-source.js
- descript.txtとかのパーサー(型整備が途中) https://github.com/Ikagaka/ukagaka-install-descript-info.js cuttleboneはこれ使わず独自でパースしてます
- narを解凍してNanikaStorageのインターフェースで使えるようにするやつ https://github.com/Ikagaka/NarLoader
- ファイルシステムベースライブラリ(NanikaStorageが使ってる) https://github.com/Narazaka/fso
これらを同時開発する仕組みとしてikagaka-projectがあります。
MITライセンスでリリースされています。