Hexoはブログを書くのになかなか便利なツールなのですが、デプロイするのがちょっと面倒です。
bash1 2 3 4
| $ hexo clean $ hexo server $ hexo generate $ hexo deploy
|
キャッシュを削除して、サーバーを立ち上げて、静的サイトを生成して、最後にデプロイ…。この処理間も結構時間が掛かります。そこで、今回はAutomatorを使って、上記のコマンドを自動化してみました。
Automatorを使ったコマンドの自動化については別の記事で詳しく解説していますので、こちらをご覧ください。
Hexoデプロイを自動化してみる
早速ですが、hexoで自動デプロイするためのAppleScriptを次のように書いて、Automatorで実行してみました。
auto-deploy.jsa1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| var sys = Application("System Events");
function run(input, parameters) { var cdm = "cd \"$HOME/Desktop/web/hexo\""; var nvm = "nvm use 4.3.0";
var Terminal = Application('Terminal') Terminal.activate() var terW1 = Terminal.windows[0] try{ console.log(terW1.selectedTab.properties()) }catch(e){ Terminal.doScript("echo 'Hi terminal window 1'"); terW1 = Terminal.windows[0] } waitDelay(terW1)
Terminal.doScript( cdm , {in: Terminal.windows[0]} ) waitDelay(Terminal.windows[0]) Terminal.doScript( nvm , {in: Terminal.windows[0]} ) waitDelay(Terminal.windows[0]) Terminal.doScript( "hexo clean" , {in: Terminal.windows[0]} ) waitDelay(Terminal.windows[0]) Terminal.doScript( "hexo s" , {in: Terminal.windows[0]} ) delay(600) press("^c") delay(120) Terminal.doScript( "hexo generate" , {in: Terminal.windows[0]} ) waitDelay(Terminal.windows[0]) Terminal.doScript( "hexo d -g" , {in: Terminal.windows[0]} ) waitDelay(Terminal.windows[0]) return input; }
function waitDelay(inTerminalWindow){ delay(1) while( inTerminalWindow.selectedTab.busy() ){ delay(1) } }
var key_codes = { "→": 124, "←": 123, "↑": 126, "↓": 125, "⏎": 36 }; var modifiers = { "⌘": "command down", "^": "control down", "⌥": "option down", "⇧": "shift down" };
function press(hotkey) { var using = []; while (hotkey.length > 1) { if (modifiers[hotkey[0]] == undefined) { throw new Error(hotkey[0] + " is not a recognized modifier key"); } using.push(modifiers[hotkey[0]]); hotkey = hotkey.slice(1); } if (key_codes[hotkey] != undefined) { sys.keyCode(key_codes[hotkey], {using: using}); } else { sys.keystroke(hotkey.toLowerCase(), {using: using}); } } function type(text) { for (var i=0; i < text.length; i++) { sys.keystroke(text[i]); } } function menu_item() { if (!arguments.length) return; var process = sys.processes.whose({"frontmost": true})[0]; var menu_bar = process.menuBars[0].menuBarItems[arguments[0]]; var menu_item = menu_bar; for (var i=1; i < arguments.length; i++) { menu_item = menu_item.menus[0].menuItems[arguments[i]]; } menu_item.click(); }
|
このように書いて、最後にiphoneやAndroidへデプロイ完了の通知を送ることもできます。
iphone notification | Sony a7RII + SIGMA 35mm F1.4 DG HSM ©
通知方法についてはこちらをご覧ください。