開発者向けセットアップ・開発手順書 (Developer Guide)
fjFlow のソースコードを変更、テスト検証、およびビルドする開発者向けの技術手順書です。...
開発環境の構築からテスト実行、ビルド、コーディング規約までの完全開発手順ガイド
fjFlow のソースコードを変更、テスト検証、およびビルドする開発者向けの技術手順書です。
目次
- 1. 開発環境のセットアップ手順
- 2. ソースコードからスクリプトを実行・デバッグする手順
- 3. 自動サニティテストスイートを実行する手順 (test.ps1)
- 4. 配布用スタンドアロン実行ファイルをビルドする手順 (build.ps1)
- 5. 重要な実装規約とバグ回避ルール
1. 開発環境のセットアップ手順
- AutoHotkey v2 公式サイト から AutoHotkey v2(v2.0.0 以降)をダウンロードしてインストールします。
- Git ターミナルを開き、リポジトリをクローンします:
git clone https://github.com/vojodeespero-wq/fjFlow.git cd fjFlow - エディタ(VS Code 推奨、拡張機能:
AutoHotkey v2 Language Support)でプロジェクトフォルダを開きます。
2. ソースコードからスクリプトを実行・デバッグする手順
- PowerShell ターミナルを開きます。
- 以下のコマンドでプロ版スクリプトを直接実行します:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; & "fjFlow.ahk" - タスクトレイに fjFlow アイコンが表示され、即座にキャレット追従およびキー拡張が開始されます。
- コードを変更した後は、トレイメニューから 再起動 (Restart) をクリックするか、
Ctrl + Shift + F5等でリロードして変更を反映します。
3. 自動サニティテストスイートを実行する手順 (test.ps1)
コードの修正完了時は、必ずサニティテストを実行して全項目の合格を確認します。
- PowerShell で以下のテストコマンドを実行します:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; .\test.ps1 - 以下のテストが直列実行されます:
- AHK 構文検証(全スクリプトのパースチェック)
- ユニット / ロジックテスト(キーパース、FSMバイパス判定、バリデーション、設定整合性等)
- 実プロセス起動スモークテスト(PID 監視による実機ランタイム安定性確認)
- 画面に
ALL SANITY TESTS PASSED! (Ready to ship / commit)と表示され、エラーがゼロであることを確認します。
4. 配布用スタンドアロン実行ファイルをビルドする手順 (build.ps1)
配布用の実行ファイル(.exe)を生成する手順です。
- PowerShell で以下のビルドスクリプトを実行します:
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; .\build.ps1 build\ディレクトリにfjFlow_Pro.exe(プロ版)およびfjFlow_Free.exe(フリー版)がコンパイル出力されます。
5. 重要な実装規約とバグ回避ルール
5.1 キーボードレイアウト(JIS/US)判定規約
- 物理キーボード判定(
GetKeyboardType)は使用しません(OS上で論理的に配列を切り替えている環境で誤判定するため)。 - 必ず
GetForegroundWindow➔GetWindowThreadProcessId➔GetKeyboardLayoutの順で取得し、取得失敗時はSPI_GETDEFAULTINPUTLANG (0x0059)でフォールバック判定を行います。
5.2 レイヤードウィンドウ (WS_EX_LAYERED) の実体化規約
WS_EX_LAYERED(0x80000)スタイルを持つウィンドウを作成した際は、初回UpdateLayeredWindowを呼ぶ前に、必ずShow("NA x0 y0 w1 h1")➔Hide()を実行してOS上でウィンドウを実体化させます(描画領域が確保されず透明になるバグを回避するため)。
5.3 InputHook とキー送信の競合回避規約
InputHook動作中に修飾キーを伴う合成キーを送信する際は、SendInputではなくSendEventを使用し、SetKeyDelay(-1, -1)を設定して、送信直前にフックを一時停止(Stop())させます。
5.4 #Include モジュール内での静的ホットキー配置の禁止
#Includeされたファイル内に静的ホットキー構文(key::)を記述すると、Auto-Execute セクションが強制終了されます。モジュール側では必ず動的登録関数(HotIf+Hotkey())を作成し、メインスクリプトから呼び出します。