VisualStudioCode(VSCode)、拡張性が高くて動作も軽くとても良いIDEですよね。
私は以前からmql4でのコーディングをMetaEditorというMetaQuotes社謹製のIDEを使用していましたが、これがコーディングが捗らずあまりよろしくありませんでした。
そこで、以前からPythonなどで使用していたVSCodeでもMql4のコーディングやコンパイルができると知ったので、こちらに乗り換えることにしました。
そうするとやはりVSCodeによるコーディング環境は痒い所に手が届く素晴らしいものでした。
…が、どうあがいてもコンパイルができない。
ネットで検索して、記載されている通りに設定してもダメ、ログを見ようにもログ自体吐き出されていない等、
解決するまでハマりにハマったので備忘録もかねて共有したいと思います。
- Visual Studio Codeでmql4をコンパイルを実行した環境
- Visual Studio Codeでmql4をコンパイルできなかったときの症状
- Visual Studio Codeでmql4をコンパイルできた設定
- Visual Studio Codeでmql4をコンパイルするために試したこと
- Visual Studio Codeでmql4をコンパイルする方法:まとめ
Visual Studio Codeでmql4をコンパイルを実行した環境
実行環境は以下の通りです。
- Windows10 Home
- Visual Studio Code バージョン: 1.56.2
- MetaEditor ver 5.00 build 2379
この環境で、VSCode上のtask.jsonにタスクを以下のように登録して、
VSCodeからコンパイルできるようにしようとしていました。
"version": "2.0.0", "tasks": [ { "label": "MQL4-Compile", "group": { "kind": "build", "isDefault": true }, "presentation": { "echo": true, "reveal": "always", "focus": true, "panel": "shared" }, "promptOnClose": true, "type": "process", "command": "D:\\FX\\MT4\\XM_Test\\metaeditor.exe", "args": [ "/compile:\"${workspaceFolder}\\${fileBasename}\"", "/include:\"${workspaceFolder}\\Include\"", "/log:\"Compile_${fileBasenameNoExtension}.log\"", ] } ]
しかし前述の通りこの設定ではコンパイルができませんでした。
Visual Studio Codeでmql4をコンパイルできなかったときの症状
症状は以下の通りでした。
- コンパイルはされていない
- コンパイルエラーにはならない
- ログ出力の設定をしているが、ログファイルが出力されない
- VSCode上のターミナルには何も表示されない
実行した直後のターミナルは以下の画像の通りです。
VSCodeのターミナルを見ても、一見何事もなくタスクが完了しているように見えます。
しかし、実際にエクスプローラーでフォルダを見てみても何も生成されていません。
やっかいなことにログファイルすら生成されていないため、何がダメだったのかかなり手探りで探すことになりました。
Visual Studio Codeでmql4をコンパイルできた設定
コンパイルできないところからハマりにハマって様々やりましたが、結論として正常にコンパイルできた設定を載せておきます。
正常にコンパイルできた設定は以下の通りです。
"version": "2.0.0", "tasks": [ { "label": "MQL4-Compile", "group": { "kind": "build", "isDefault": true }, "presentation": { "echo": true, "reveal": "always", "focus": true, "panel": "shared" }, "promptOnClose": true, "type": "shell", "command": "D:\\FX\\MT4\\XM_Test\\metaeditor.exe", "args": [ "/compile:\"${fileDirname}\\${fileBasename}\"", "/include:\"${workspaceFolder}\"", "/log:\"Compile_${fileBasenameNoExtension}.log\"", ] } ]
変更箇所
最終的な設定の変更箇所は以下の通りです。
- type
- /compile:
- /include:
type
コンパイルできなかった方の設定では、ここで“type”: “process”を指定していました。
しかし、mql4のコンパイルはコマンドプロンプトからのコマンドによって行われる必要があります。
そのためには、“type”: “shell”を指定し、シェル(Windowsの場合はcmd、powershellのどちらか)コマンドとしてVSCode上から実行しなければなりません。
/compile:と/include:
コンパイルできなかった方の設定では、それぞれ以下のように設定していました。
"/compile:\"${workspaceFolder}\\${fileBasename}\"", "/include:\"${workspaceFolder}\\Include\"",
これを以下のように修正しました。
"/compile:\"${fileDirname}\\${fileBasename}\"", "/include:\"${workspaceFolder}\"",
それぞれの定義済み変数の説明は以下の通りです。
定義済み変数 | 説明 |
${workspaceFolder} | VSCodeで現在開いているフォルダのパス |
${fileDirname} | VSCodeでタスクを実行した際に アクティブになっているファイルが配置されているフォルダのパス |
${fileBasename} | VSCodeでアクティブになっているファイル名(拡張子付き) |
更に気を付けなければならないのは、/include:には「Include」フォルダが配置されているフォルダまでのパスを指定しなければならない点です。
上記を踏まえ、コンパイルできなかった設定のパスを見てみると以下の通りとなります。
コンパイル | パス |
× | /compile:”d:\FX\MT4\XM_Test\MQL4\CamarillaPivotReverseTrader.mq4″ |
〇 | /compile:”d:\FX\MT4\XM_Test\MQL4\Experts\CamarillaPivotReverseTrader.mq4″ |
× | /include:”D:\FX\MT4\XM_Test\MQL4\Include\Include |
〇 | /include:”D:\FX\MT4\XM_Test\MQL4\Include |
コンパイルできなかった方の/compile:のパスにはExpertsフォルダのパスが抜けています。
逆に/includeの方はIncludeが余分に付与されています。
これらのせいで、VSCodeから実行した際、必要なファイルが見当たらず、コンパイルに失敗していたという訳です。
Visual Studio Codeでmql4をコンパイルするために試したこと
とりあえず色々試したので備忘録的に記載しておきます。
- コンパイル用拡張機能「compilemql4」を利用
- ファイルのアクセス権限を変更
- デフォルトのインストール先のmetaeditorを使用
- VSCodeのタスクから起動する際、/portableを渡して起動
コンパイル用拡張機能「compilemql4」を利用
VSCodeにはtaskを設定する以外にもmql4をコンパイルする方法があります。
その一つが拡張機能のcompilemql4を利用することです。
しかし、今回私の環境ではネットに記載されている通りに設定してもダメでした。
ただ、metaeditorは起動してコンパイルのプロセス自体は行われていたようなので、設定を変更すればコンパイルできたかもしれません。
ファイルのアクセス権限を変更
metaeditor等に対するアクセス権限がないのかと思い、アクセス権限の付与を試しました。
インストールフォルダごとフルコントロール権限を設定しましたがダメでした。
今となっては原因が違うことが分かっているので、当たり前ですけど…
デフォルトのインストール先のmetaeditorを使用
デフォルトではmetaeditorはCドライブ以下のProgramFiles(x86)にMT4と一緒にインストールされます。
今回私が使用しているmetaeditorはポータブルモードでの利用を前提としていました。
そのためこれが悪いのかと思い、mqlファイルをデフォルトインストール先のフォルダへ移動し、
VSCodeのtaskの設定を変更してコンパイルを実行しました。
しかし、同様の症状が現れただけでした。
VSCodeのタスクから起動する際、/portableを渡して起動
前述の通り、今回コンパイルに使用しているmetaeditorはポータブルモードでの利用を前提にしています。
しかし、VSCodeのtaskからでは設定をしない限りデフォルト起動になります。
そのため、VSCodeのtaskに変更を加え、
起動引数としてポータブルモード用の「/portable」を渡して起動するようにしました。
しかしこちらも同様の症状が現れただけでした。
Visual Studio Codeでmql4をコンパイルする方法:まとめ
いかがでしたでしょうか。
ネットにはいくつかVisual Studio Codeでmql4をコンパイルする方法とその設定が載っていますが、
今回私が体験した症状に関する情報は殆ど載っていませんでした。
もしも同じような症状に悩んでいる方の問題解決に少しでも役立てれば幸いです。
コメント