2009.05.31
FlashDevelopの使い方 (11)マクロ機能(コンパイル指定してムービープレビューまでを自動化)
RC3から搭載されたマクロ機能ですが、ほとんど日本語の情報が無かったので全く使えていませんでした。ところが昨日、FlashDevelopエバンジェリストと一部で呼ばれている馬鹿全さんが、マクロ機能の詳しい解説ページを公開してくれました。しかも、私がこんな機能が欲しいとTwitterでリクエストしたらそれが採用されて、その機能を実現する工程を解説した内容になっています。嬉しい。FlashDevelopユーザー必読です。今回は、その馬鹿全さんが作ったマクロ用スクリプトをベースにさせてもらって、自分が使うのに都合が良いようにちょっとだけ変更を加えた派生版スクリプトを作ったので、それを紹介します。ショートカットキーを1つ押せば、現在開いているasファイルをAlways Compileに設定して、ムービープレビューまでを自動で行うマクロです。※このエントリーで使用しているバージョンはFlashDevelop-3.0.0-RC4です。
はじめに
このエントリーで書かれている内容は、ほとんど馬鹿全さんの解説ページで得た情報をベースにしていますので、そちらを読んでいることが前提になります。もしまだ未読でしたらご一読してみてください。
前述のTwitterでリクエストした内容というのは、「今開いてるasをショートカットキー1つでAlways Compileに設定する」というもので、私はよくProjectパネルでAlways Compileを設定し忘れたままムービープレビュー(Test Movie)をしてしまい、期待していないasファイルが実行されるという失敗をします。さらに言えば、普段の自分のFlashDevelop環境では、Projectパネルを自動で隠す設定にしているため、Always Compileを再設定するには「Projectパネルを開く→コンパイル指定したいファイルを探す→右クリックメニューを開く→Always Compileを設定する」という手順を踏まなくてはならず、動作自体もけっこう面倒です。それを解決してくれるマクロが、馬鹿全さんが作成してくれた「AlwaysCompileShortcut.cs」で、このマクロ用スクリプトを使用すれば、設定したショートカットキーを1つ押せば、現在開いているasファイルをAlways Compileに設定することができます。
変更点
馬鹿全さんが作成された「AlwaysCompileShortcut.cs」は、大雑把に列挙すると以下の機能を備えています。
- 現在開いているasファイルにAlways Compileに設定する
- もし既にAlways Compileが設定されていたら。Always Compileを外す(トグル)
- 同一プロジェクト内のそれ以外のasファイルからAlways Compileを外す
- Always Compileに設定したファイルのフルパスをOutputパネルに表示する
それを元に今回私が変更を加えた「AlwaysCompileTestMovie.cs」は、以下の機能を備えています。
- 現在開いているasファイルにAlways Compileに設定する
もし既にAlways Compileが設定されていたら。Always Compileを外す(トグル)
- 同一プロジェクト内のそれ以外のasファイルからAlways Compileを外す
- Always Compileに設定したファイルのファイル名だけをOutputパネルに表示する
- 現在開いているasファイルをムービープレビュー(Test Movie)する
まず、トグル機能の部分を削除したのは、私の場合は1つのasファイルで完結するような小さなスクリプトがほとんどで、「開いているファイル=Always Compileするファイル」であることが多いからです。この機能を削除することで、マクロを実行した際に必ず開いているファイルがAlways Compileの状態を維持することになります。次に、フルパス表示をファイル名だけの表示に変えたのは、自分のFlashDevelop環境がOutputパネルを縦に表示しているためで、横幅が狭いのでフルパス表示だとファイル名が見られないからです。最後に、前述した通り今のところ100%、Always Compileの設定ミスで失敗するのはムービープレビューをする時なので、逆に言えば「Always Compileを再設定する時はムービープレビューする時」ということでこのような変更を加えました。
マクロ用スクリプトはC#で記述するんですが、一度も書いたことが無くてよくわからず、正規表現もあまり知識がないので、おかしな記述の仕方があるかもしれません。もしあればご指摘ください。またマクロ用スクリプトに関して、何度もTwitter上で馬鹿全さんにアドバイスをいただきました。ありがとうございます。
設定方法
後述するマクロ用スクリプトをコピーしてテキストファイルに保存します。文字コードは「UTF-8(BOM付き)」、ファイル名は「AlwaysCompileTestMovie.cs」を推奨。それを適当な場所(この例ではFlashDevelopインストールフォルダ配下にMacrosフォルダを作成してその中)に配置した上で、以下の手順でマクロを設定します。
- FlashDevelopを起動して、Macrosメニューから「Edit Macros」を選択します。
- Addボタンを押してマクロを新規作成します。
- Entriesの項目で「...」をクリックして、「ExecuteScript|Development;$(BaseDir)\Macros\AlwaysCompileTestMovie.cs」を入力してOKボタンを押します。*1
- Labelの項目で適切な名前(例:AlwaysCompileTestMovie)を設定します。
- Shortcutの項目で適切なショートカットキー(例:Shift+F5)を設定します。*2
- FlashDevelopを再起動します。(設定したショートカットキーを有効にするため)
これで設定したマクロを実行することが可能になります。この例の場合、Shift+F5キーを押すか、Macrosメニューから「AlwaysCompileTestMovie」を選択すると、現在開いているasファイルがAlways Compileに設定され、ムービープレビュー(Test Movie)が実行されます。Outputパネルには、「Always Compile: ファイル名」の形式でAlways Compileを設定したファイル名が出力されます。
もちろん、通常のムービープレビュー(Test Movie)はF5キーを押せば実行できますし、ムービープレビューの無いAlways Compileのトグルだけを行いたい場合は馬鹿全さん作成の「AlwaysCompileShortcut.cs」を使用すればできます。別々のショートカットキーでどちらも登録しておいて、適宜必要な方を呼び出すという使い方が便利だと思います。
(2009.06.01 20:02 追記) やっぱり「Shift+F5」じゃなくて「Ctrl+Shift+Enter」で実行したいので以下の方法で設定しました。
ショートカットキーをフックする常駐ソフトは他にもあると思いますが、「AutoHotkey」を使っているのでこれに設定しました。AutoHotkeyは、ホットキーを利用してWindowsやアプリケーションを自由自在に操作できる高機能なスクリプト実行環境です。(日本語解説サイト)
; FlashDevelop
#IfWinActive, ahk_class WindowsForms10.Window.8.app.0.378734a
^+Enter::Send,+{F5} ; 「AlwaysCompileTestMovie」のShift+F5をCtrl+Shift+Enterにも割り当て
^+NumpadEnter::Send,+{F5} ; テンキーのEnterにも同じように割り当て
#IfWinActive
FlashDevelop側の設定は変更せず、上記のスクリプトをAutoHotkey.iniに記述して常駐しておくと、FlashDevelopがアクティブの時だけCtrl+Shift+Enterを押すとAutoHotkeyがそれをフックして、Shift+F5をFlashDevelopに送信します。なので、元々設定してあるShift+F5を押した時と同じ動作(AlwaysCompileTestMovieマクロの実行)をしてくれます。正攻法なやり方ではありませんが、普段Ctrl+Enterでのムービープレビューに慣れきっているので、こちらの方が使い勝手が良いです。
最後に
マクロ用C#スクリプト(AlwaysCompileTestMovie.cs)
/** * AlwaysCompileTestMovie.cs * * @see http://blog.bk-zen.com/2009/05/30/164/ * @see http://d.hatena.ne.jp/ActionScript/20090531/fd_macro_always_compile_movie_preview */ using FlashDevelop; using FlashDevelop.Docking; using PluginCore; using PluginCore.Managers; using ProjectManager; using ProjectManager.Controls.TreeView; using ProjectManager.Projects; using System.Text.RegularExpressions; public class AlwaysCompileTestMovie { public static void Execute() { Project project = (Project)PluginBase.CurrentProject; TabbedDocument nowDoc = (TabbedDocument)Globals.CurrentDocument; // StartsWith で始まりに指定した文字列があるかを比較できる。 if (nowDoc.FileName.StartsWith(project.Directory)) { // 現在のプロジェクト内のファイル。 if (nowDoc.FileName.EndsWith(".as")) { // AS ToggleAlwaysCompile(project, nowDoc.FileName); } else { if (nowDoc.FileName.EndsWith(".mxml")) { // MXML ToggleAlwaysCompile(project, nowDoc.FileName); } else { ErrorManager.ShowWarning(nowDoc.FileName + " は、AS, MXMLファイルではありません。", null); } } } else { // 現在のプロジェクト外のファイル。 ErrorManager.ShowWarning(nowDoc.FileName + " は、現在の Project のファイルではありません。", null); } } public static void ToggleAlwaysCompile(Project project, string path) { // 指定しようとしているファイルがコンパイルターゲットかどうかを判断する。 // bool isTarget = project.IsCompileTarget(project.GetAbsolutePath(path)); // コンパイルターゲットに指定する。 project.SetCompileTarget(path, true); if (project.MaxTargetsCount > 0) { while (project.CompileTargets.Count > project.MaxTargetsCount) { // 以前までのコンパイルターゲットをターゲットからはずす。 string relPath = project.CompileTargets[0]; string path2 = project.GetAbsolutePath(relPath); project.SetCompileTarget(path2, false); } } // project をセーブする。 project.Save(); // ツリーを再描画させる。 ProjectTreeView.Instance.RefreshTree(); // ファイル名だけ抽出 string str = path; Regex reg = new Regex("^.*\\\\(?<filename>.*)$"); if (reg.IsMatch(str)) { Match match = reg.Match(str); str = match.Groups["filename"].Value; } // Test Movie を実行 Globals.MainForm.CallCommand("PluginCommand", ProjectManagerCommands.TestMovie); // Outputパネルに出力 TraceManager.Add("Always Compile: " + str, -2); } }
参考ページ
今回の件を調べるに当たって以下のページがとても参考になりました。素敵情報に感謝。
- 馬鹿全 - FlashDevelop Macro ExecuteScript で無限の可能性
- 正規表現を使って部分文字列を取得するには?[C#、VB] − @IT
- C# 正規表現を使って文字列を抽出してみた
まとめ
このシリーズのエントリーは、「FlashDevelopの使い方」のまとめにまとめてあります。
- 35 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=74v&q=flex+4&btnG=検索&lr=lang_ja
- 27 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=ADBF,ADBF:2009-22,ADBF:ja&q=ActionScript+文字列+16進+変換
- 21 http://forum.flashdevelop.jp/viewtopic.php?f=13&t=6
- 21 http://reader.livedoor.com/reader/
- 19 http://blog.bk-zen.com/2009/05/30/164/
- 19 http://www.papiness.com/papi-blo/2009/06/flashdevelop-macro-dummy-images.html
- 17 http://www.google.co.jp/reader/view/
- 17 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=FlashDeveloper+コンパイル パス
- 16 http://delicious.com/clockmaker
- 16 http://search.yahoo.co.jp/search?p=flashdevelop 使い方&rs=1&ei=UTF-8&fr=top_ga1_sa





