この記事を書いてる人: 
tea

Hexoはブログを書くのになかなか便利なツールなのですが、デプロイするのがちょっと面倒です。

bash
1
2
3
4
$ hexo clean
$ hexo server
$ hexo generate
$ hexo deploy

キャッシュを削除して、サーバーを立ち上げて、静的サイトを生成して、最後にデプロイ…。この処理間も結構時間が掛かります。そこで、今回はAutomatorを使って、上記のコマンドを自動化してみました。

Automatorを使ったコマンドの自動化については別の記事で詳しく解説していますので、こちらをご覧ください。

自身のブログ
Automatorでjavascriptを使いターミナルのコマンド実行する方法

Hexoデプロイを自動化してみる

早速ですが、hexoで自動デプロイするためのAppleScriptを次のように書いて、Automatorで実行してみました。

auto-deploy.jsa
1
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) {
// Your script goes here
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]} )
//waitDelay(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"
};
// hot key helpers
// code by https://gist.github.com/jiaaro/c95e89ea5cacc6906040
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
 iphone notification | Sony a7RII + SIGMA 35mm F1.4 DG HSM  photo by tea ©

通知方法についてはこちらをご覧ください。

自身のブログ
Automatorが完了したら通知をiPhoneやAndroidで受け取る方法「IFTTT」活用術

Ads
 記事を書いてる人
gravatar
tea (てぃー)

ゆるふわポートレートや自然風景を撮影しています。その他の趣味は音楽制作/メダカの鑑賞/web。撮影や写真掲載・寄稿等のご依頼もお待ちしてます。お問い合わせは以下のフォームまたはSNSよりお願い致します。

 お問い合わせ

 撮影のご依頼

 ポートフォリオ

 各作例のご紹介

 シェアする
 記事名とURLをコピーする

Hexoでdeployを自動化する方法。ローカルで自動デプロイするAutomatorを書く - TPB
https://photo-tea.com/p/17/hexo-deploy-local-automatically/

 おすすめ記事
Ads
 作例掲載