JavaScript で OS X を自動操作

JavaScript で OS X を自動操作

AppleScript の代替となる JavaScript for Automation (JXA) の説明。
kanazawa.rb meetup 48 発表資料。

Cb057b585817007ba2a931a81ef9398f?s=128

Tomokazu Kiyohara

August 20, 2016
Tweet

Transcript

  1. +BWB4DSJQUד 049׾荈⹛乼⡲ ,BOB[BXBSCNFFUVQ
 

  2. "QQMF4DSJQU ˖ 049ך乼⡲׾荈⹛⻉ׅ׷׋׭ךأؙٔفز鎉铂 ˖ 4ZTUFN 䎃 ַ׵䲿⣘ׁ׸גְ׷ ˖ 㹋遤橆㞮׮ְ׹ְ׹֮׷ ˖

    ،فٖحز ˖ ءٕؑ ˖ "VUPNBUPS
  3. "QQMF4DSJQU ˖ 蕯䎁暴䗙ך֮׷鎉铂➬圫 ˖ 㷕统؝أزכװװ넝׭

  4. "QQMF4DSJQU4BNQMF set urls to {"https://www.google.co.jp","http://www.yahoo.co.jp","https://www.apple.com"} set countOfUrls to count urls

    tell application "Safari" activate tell window 1 set firstTab to current tab repeat with i from 1 to countOfUrls set URL of document 1 to (item i of urls) if i = countOfUrls then exit repeat set current tab to (make new tab) end repeat set current tab to firstTab end tell end tell 4BGBSJ׾Ꟛְג
 ةـ׾鷄⸇׃אא
 אך63-׾Ꟛֻ
  5. ˊ+BWB4DSJQUGPS"VUPNBUJPO3FMFBTF/PUF
 IUUQTEFWFMPQFSBQQMFDPNMJCSBSZNBDSFMFBTFOPUFT*OUFSBQQMJDBUJPO$PNNVOJDBUJPO3/ +BWB4DSJQU'PS"VUPNBUJPO"SUJDMFT*OUSPEVDUJPOIUNM +BWB4DSJQUGPS"VUPNBUJPO QSPWJEFTUIFBCJMJUZUPVTF+BWB4DSJQU GPSJOUFSBQQMJDBUJPODPNNVOJDBUJPO CFUXFFOBQQTJO049

  6. +BWB4DSJQUGPS"VUPNBUJPO +9" ˖ "QQMF4DSJQUך➿剏ה׃גך+BWB4DSJQU ˖ את׶"QQMF4DSJQUך㹋遤橆㞮ָ+BWB4DSJQU׾ ؟ه٦ز׃׋הְֲ鑧 ˖ 049 :PTFNJUF

    ַ׵䲿⣘
  7. +9"4BNQMF var urls = [ "https://www.google.co.jp", "http://www.yahoo.co.jp", "https://www.apple.com" ] var

    safari = Application("Safari") safari.activate() var w = safari.windows[0] var firstTab = w.currentTab() for (var i in urls) { w.tabs[0].url = urls[i] if (i == urls.length - 1) { break } var _tab = new safari.Tab() w.tabs.push(_tab) w.currentTab = _tab } w.currentTab = firstTab 4BGBSJ׾Ꟛְג
 ةـ׾鷄⸇׃אא
 אך63-׾Ꟛֻ
  8. )FMMP8PSME أؙٔفزؒر؍ةBQQ

  9. )FMMP8PSME

  10. )FMMP8PSME

  11. )FMMP8PSME

  12. +9"ך剅ַֹ׋
 -FWFM ˖ "QQMJDBUJPOؙٓأך؎ٝأةٝأ׾⡲׷ ˖ فٗػذ؍׾铣׫鴥׬ ˖ فٗػذ؍׾剅ֹ䳔ִ׷ ˖ ًاحس׾ㄎן⳿ׅ

  13. -FWFM var safari = Application("Safari") safari.activate() var w = safari.windows[0]

    console.log(w.tabs[0].url()) w.tabs[0].url = "https://www.google.co.jp" 4BGBSJ׾Ꟛְג
 植㖈ך63-׾⿫撑׃
 63-׾刿倜ׅ׷
  14. +9"ך剅ַֹ׋
 -FWFM ˖ ءأذي؎كٝز׾ⵃ欽ׅ׷ ˖ وؐأؙٔحؙװؗ٦ن٦سⰅ⸂ ˖ ِ٦ؠ٦؎ٝةؙٓءّٝ"1*׾ⵃ欽ׅ׷ ˖ ㉏ְさ׻ׇت؎،ؚٗ

    ˖ /PUJDBUJPO 4BNQMF䖓鶢
  15. +9"ך剅ַֹ׋
 -FWFM ˖ ⴽղך"QQMJDBUJPO؎ٝأةٝأず㡦׾鸬䵿 ˖ 4BGBSJך63-׾.FTTBHFד鷏⥋הַ ˖ ؙٔحفن٦سⰻ㺁דٔو؎ٝت涫ꐮהַ ➙㔐כ䪔׻זְָ䩛갫כ知⽃

  16. +9"ד⢪ִ׷"1* ˖ "QQMJDBUJPO嫣ח⢪ִ׷"1*ָ殯ז׷ ˖ וֲװ׏ג锃ץ׷ַ˘ ˖ չأؙٔفزؒر؍ةBQQպךչٓ؎ـٓٔպ ˖ ًصُ٦ך<ؐ؍ٝسؐ>̔<ٓ؎ـٓٔ>

  17. ˖ ⵃ欽׃׋ְ،فٔ׾鼅䫛ׅ׷ ٓ؎ـٓٔ

  18. ˖ ،فָٔ䲿⣘ׅ׷"1*ָ然钠דֹ׷ ٓ؎ـٓٔ

  19. ٓ؎ـٓٔך铣׫ַ׋ד כת׏׋הֿ׹

  20. ٓ؎ـٓٔך铣׫ַ׋ד כת׏׋הֿ׹ ˖ 剑ⴱך؎ٝرٝزָًاحسせַ ˖ 如ך؎ٝرٝزָ䒷侧׌ז ˖ 如ך؎ٝرٝزכ

  21. ٓ؎ـٓٔך铣׫ַ׋ד כת׏׋הֿ׹ ˖ 瘶ִ剑穄䒷侧ד床ׅؔفءّٝ)BTI䕎䒭 ˖ <>➰ֹכؔفءّشٕ ˖ ⢽EVQMJDBUF PCK \UPQBUI

    SFQMBDJOHUSVF^
  22. ٓ؎ـٓٔך铣׫ַ׋ד כת׏׋הֿ׹ ˖ 痥♧䒷侧ךչⰻ㺁պָ剅ְגזְ ˖ זח׾䭷㹀׃׋׵ְְך

  23. ٓ؎ـٓٔך铣׫ַ׋ד כת׏׋הֿ׹ ˖ 瘶ִ䭷㹀׃זְ ˖ )BTIך׫床ׅ ˖ ⢽NBLF \OFXPCK BUQBUI^

  24. "QQMF4DSJQUַ׵ך 獳嗂儗ח涪欰׃׋ ♶侭さָ鋅ִ׋孡ָׅ׷

  25. ٓ؎ـٓٔך鷄⸇ ˖ ⵃ欽׃׋ְ،فָٔٓ؎ـٓٔחזְ㜥さ ˖ 鷄⸇ׅ׷ֿהָדֹ׷ ˖ BQQؿ؋؎ٕ׾湫䱸䭷㹀ׅ׷

  26. ٓ؎ـٓٔך鷄⸇ ˖ 鷄⸇نةַٝ׵BQQ׾䭷㹀ׅ׷

  27. +9"ךرغحؚ ˖ DPOTPMFMPHرغحؚ ˖ رغحؖ 4BGBSJ8FC*OTQFDUPS

  28. 4BGBSJדرغحؚ ˖ 049 &M$BQJUBO ַ׵䲿⣘ ˖ IUUQTEFWFMPQFSBQQMFDPNMJCSBSZNBD SFMFBTFOPUFT*OUFSBQQMJDBUJPO$PNNVOJDBUJPO 3/+BWB4DSJQU'PS"VUPNBUJPO"SUJDMFT 049IUNM

  29. رغحؖך彊⪒ ˖ 4BGBSJך8FC*OTQFDUPS׾剣⸬חׅ׷ ˖ 4BGBSJך橆㞮鏣㹀歗꬗ַ׵鏣㹀 ˖ <鑫稢>̔<ًصُ٦غ٦חꟚ涪ًصُ٦׾邌爙>

  30. رغحؖך彊⪒ ˖ +9"ה4BGBSJ8FC*OTQFDUPS׾ꟼ鸬בֽ׷ ˖ 4BGBSJךًصُ٦ַ׵鏣㹀 ˖ <Ꟛ涪>̔< مأزせ >̔<+4$POUFYUTך8FC؎ٝ ألؙة׾荈⹛涸ח邌爙>

  31. رغحؖך饯⹛ ˖ +9"ך؝٦س⚥חEFCVHHFSה鎸鶢 ˖ 㹋遤ׅ׷ ˖ 䔲鑩皘䨽דCSBLF׃ג8FC*OTQFDUPSָ饯⹛

  32. رغحؖך饯⹛ var hoge = function() { debugger console.log("hoge") } debugger

    console.log("fuga") hoge()
  33. رغحؖך饯⹛

  34. رغحؖך岣䠐挿 ˖ "QQMJDBUJPO 4BGBSJ ׾乼⡲׃גְ׷ה饯⹛׃ז ְ㜥さָ֮׷ ˖ 4BGBSJ♳ד؝٦س׾剅ֹ䳔ִ׷ה✮劍׃זְ䮙⹛ ׾ׅ׷㜥さָ֮׷

  35. 4UBOEBSE"EEJUJPOT ˖ זחַה⤑ⵃז堣腉׾鷄⸇ׅ׷ٓ؎ـٓٔ ˖ ت؎،ؚٗהַ/PUJDBUJPOהַ ˖ "QQMJDBUJPOؙٓأחغ؎ٝس׃ג⢪ֲ ˖ *ODMVEF4UBOEBSE"EEJUJPOTفٗػذ؍

  36. 4UBOEBSE"EEJUJPOT

  37. 4UBOEBSE"EEJUJPOT4BNQMF var app = Application.currentApplication() app.includeStandardAdditions = true app.displayAlert("֮׵٦ה") var

    Hello = function() { try { app.displayDialog("ֿ׿ח׍׻") console.log("כ׹٦") } catch(e) { console.log("ּ׏לְ") } } Hello() Hello() app.displayNotification("ק׿ע׿",{withTitle:"׋ְה׷",subtitle:"ׁע׋ְה׷"})
  38. 4UBOEBSE"EEJUJPOT ˖ ٓ؎ـٓٔ׾铣׮ֲ ˖ ⦐➂涸ח 鋙ִגֶֻץֹ"1* ˖ ؿ؋؎ٕ SFBEXSJUF 

    ˖ ؙٔحفن٦س TFU5IF$MJQCPBSE5PUIF$MJQCPBSE  ˖ ؎ٝةؙٓءّٝ EJTQMBZ%JBMPH/PUJDBUJPOTBZ
  39. 4UBOEBSE"EEJUJPOT ˖ 窫㼎ח鋙ִגֶֻץֹ"1* ˖ ءٕؑأؙٔفزㄎן⳿׃ EP4IFMM4DSJQU

  40. EP4IFMM4DSJQU4BNQMF var app = Application.currentApplication() app.includeStandardAdditions = true var stdout

    = app.doShellScript("whoami") console.log(stdout) try { stdout = app.doShellScript("ls NOT_EXIST") } catch (e) { var stderr = e.message console.log(stderr) }
  41. 4ZTUFN&WFOUT ˖ ءأذي׾֮אֲַչ"QQMJDBUJPOպ ˖ ؗ٦ن٦سⰅ⸂הַ ˖ وؐأؙٔحؙהַ ˖ 049ך橆㞮鏣㹀הַ ˖

    ؿٕؓت٦،ؙءّٝהַ
  42. 4ZTUFN&WFOUT

  43. 4ZTUFN&WFOUT4BNQMF var safari = Application("Safari") safari.activate() delay(2) var se =

    Application("System Events") se.keystroke("l", {using:"command down"}) delay(2) se.keystroke("http://www.google.com") delay(2) se.keyCode(76)
  44. 4ZTUFN&WFOUT4BNQMF var se = Application("System Events") var safari = Application("Safari")

    safari.activate() delay(1) var toolbar = se.uiElements["Safari"].uiElements[0].uiElements[4] toolbar.uiElements[1].click() delay(1) toolbar.uiElements[5].click() delay(1) se.keyCode(125) // down arrow delay(1) se.keyCode(76) // enter
  45. 4ZTUFN&WFOUT ˖ ٓ؎ـٓٔ׾铣׮ֲ ˖ ⦐➂涸ח 鋙ִגֶֻץֹ"1* ˖ (6*乼⡲ VJ&MFNFOUNFOV 

    ˖ ؗ٦ن٦س LFZTUSPLFLFZ$PEF
  46. VJ&MFNFOUך岣䠐挿 ˖ ،ؙإءؽٔذ؍ ˖ VJ&MFNFOUך䱱׶倯

  47. ،ؙإءؽٔذ؍ ˖ VJ&MFNFOU׾䪔ֲ儗חכ埄ꣲָ䗳銲חז׷ ˖ ءأذي橆㞮鏣㹀 ˖ <إُؗٔذ؍הفٓ؎غء٦>̔
 <فٓ؎غء٦>̔<،ؙإءؽٔذ؍>

  48. ،ؙإءؽٔذ؍鏣㹀

  49. ،ؙإءؽٔذ؍ت؎،ؚٗ ˖ ⴱ㔐㹋遤儗כֿ׿ז䠬ׄךت؎،ָؚٗ邌爙ׁ ׸׷

  50. ،ؙإءؽٔذ؍ ثؑحؙ؝٦س var se = Application("System Events") if(se.uiElementsEnabled()) { console.log("،ؙإءؽٔذ؍

    OK") } else { console.log("،ؙإءؽٔذ؍ NG") // ⟃♴כءأذي橆㞮鏣㹀ך،ؙإءؽٔذ؍鏣㹀׾Ꟛֻ؝٦س var pref = Application("System Preferences"); var pane = pref.panes.byId("com.apple.preference.security") pane.anchors["Privacy_accessibility"].reveal(); pref.activate() }
  51. VJ&MFNFOUך䱱׶倯 ˖ 4ZTUFN&WFOUTךVJ&MFNFOUTꂁ⴨ַ׵׋ו׷

  52. ה֮׷⢽ var se = Application("System Events") var app = se.uiElements[TARGET_APP_NAME].uiElements[TARGET_APP_NAME]

    var main_area = app.uiElements[5].uiElements["Box"].uiElements[0] var table1 = main_area.uiElements[0].uiElements[0] var tab = main_area.uiElements["Peers"] var table2 = main_area.uiElements[7].uiElements[0].uiElements[0]
  53. וֲװ׏ג鋅אֽ׷ך

  54. EVNQVJ&MFNFOUT var se = Application("System Events") se.uiElements[TARGET_APP_NAME].entireContents().forEach(function(v, i, a){ console.log(`${Automation.getDisplayString(v)}`);

    console.log(`${v.name()} / ${v.description()}`); })
  55. EVNQVJ&MFNFOUT var se = Application("System Events") se.uiElements[TARGET_APP_NAME].entireContents().forEach(function(v, i, a){ console.log(`${Automation.getDisplayString(v)}`);

    console.log(`${v.name()} / ${v.description()}`); }) ׅץגך㶨銲稆 VJ&MFNFOUךꥡ㾴׾邌爙 㼎韋VJ&MFNFOUךفٗػذ؍ 邌爙ׁ׸גְ׷ذؗأز瘝
  56. EVNQ穠卓⢽  "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@  

     LBOB[BXB@SC@垥彊ؐ؎ٝسؐ   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ SBEJP(SPVQTBU     OVMMٓإؚٓؔ٦ف   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ SBEJP(SPVQTBU  SBEJP#VUUPOTCZ/BNF أٓ؎سٖ؎،ؐز    أٓ؎سٖ؎،ؐزٓآؔنةٝ   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ DIFDLCPYFTCZ/BNF وأة٦׾㢌刿    وأة٦׾㢌刿ثؑحؙنحؙأ   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TUBUJD5FYUTCZ/BNF ة؎زٕ皘勴剅ֹ    ة؎زٕ皘勴剅ֹذؗأز   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU     OVMMأؙٗ٦ٕ걄㚖   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  TUBUJD5FYUTCZ/BNF ،ؾ،ٓٝأ    ،ؾ،ٓٝأذؗأز   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  DIFDLCPYFTCZ/BNF ة؎زٕ    ة؎زٕثؑحؙنحؙأ   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  DIFDLCPYFTCZ/BNF 劤俑    劤俑ثؑحؙنحؙأ   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  DIFDLCPYFTCZ/BNF أٓ؎س殢〾    أٓ؎س殢〾ثؑحؙنحؙأ   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  VJ&MFNFOUTBU     OVMMꟚꟗ欽♲錬نةٝ   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  TUBUJD5FYUTCZ/BNF 胜兝    胜兝ذؗأز   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  CVUUPOTBU     OVMMنةٝ   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  QPQ6Q#VUUPOTBU     OVMMهحف،حفنةٝ   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  DPMPS8FMMTBU     OVMMؕٓ٦ٕؐؑ   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  CVUUPOTCZ/BNF وأة٦أٓ؎س׾箟꧊    وأة٦أٓ؎س׾箟꧊نةٝ   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU     OVMMأؙٗ٦ٕ걄㚖   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU     OVMMأؙٗ٦ٕ걄㚖   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  TDSPMM#BSTBU     OVMMأؙٗ٦ٕغ٦   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  TDSPMM#BSTBU  WBMVF*OEJDBUPSTBU     OVMM⦼؎ٝآ؛٦ة   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  TDSPMM#BSTBU  CVUUPOTBU     OVMM♳ぢֹ濶⽩نةٝ   "QQMJDBUJPO 4ZTUFN&WFOUT BQQMJDBUJPO1SPDFTTFTCZ/BNF ,FZOPUF XJOEPXTCZ/BNF LBOB[BXB@SC@ TDSPMM"SFBTBU  TDSPMM#BSTBU  CVUUPOTBU     OVMM♴ぢֹ濶⽩نةٝ 
  57. EVNQ穠卓⢽ "QQMJDBUJPO 4ZTUFN&WFOUT  BQQMJDBUJPO1SPDFTTFT CZ/BNF ,FZOPUF  XJOEPXT CZ/BNF

    LBOB[BXB@SC@  TDSPMM"SFBT BU   CVUUPOT CZ/BNF وأة٦أٓ؎س׾箟꧊  وأة٦أٓ؎س׾箟꧊نةٝ
  58. זַזַא׵ְ

  59. ⯓➂ך濼䜋׾⦵׶׷ ˖ +9"ך6*ًٖؒٝزךؙٔٝ׾《䖤ׅ׷أؙٔفز2JJUB
 IUUQRJJUBDPN[BLVSPJTIJLVSPJUFNTEFCBFD ˖ .BDךؗ٦ن٦سⰅ⸂ծوؐأؙٔحؙ׾+BWB4DSJQUד +9" 2JJUB
 IUUQRJJUBDPN[BLVSPJTIJLVSPJUFNTBGBCFBECBGVJFMFNFOU

  60. ׌ְע⸔ַ׷ ָ ת׌蕱遤

  61. ָ׿ל׷׃ַזְ قٕفى٦

  62. أؙٔفزך⥂㶷 ˖ չأؙٔفزؒر؍ةBQQպד箟꧊׃׋׮ך׾
 ⥂㶷ׅ׷儗חכؿ؋؎ٕؿؓ٦وحز׾鼅ץ׷ ˖ أؙٔفز ˖ أؙٔفزغٝسٕ ˖ ،فٔ؛٦ءّٝ

    ˖ ذؗأز
  63. أؙٔفزך⥂㶷 ˖ չأؙٔفزؒر؍ةBQQպד箟꧊׃׋׮ך׾
 ⥂㶷ׅ׷儗חכؿ؋؎ٕؿؓ٦وحز׾鼅ץ׷ ˖ أؙٔفز ˖ أؙٔفزغٝسٕ ˖ ،فٔ؛٦ءّٝ

    ˖ ذؗأز 鑫稢ⶴ䠥
  64. 暴ⴽזꟼ侧 ˖ 暴㹀ךة؎ىؚٝדㄎן⳿ׁ׸׷ꟼ侧 ˖ 寸׭׵׸׋せ⵸ד㹀纏׃גֶֻ ˖ SVOׅץגךؿؓ٦وحز ˖ PQFO%PDVNFOUT QSJOU%PDVNFOUT

    JEMF  SFPQFO RVJU،فٔ؛٦ءّٝؿؓ٦وحز
  65. SVO ˖ +9"㹋遤儗חㄎן⳿ׁ׸׷ꟼ侧 ˖ 䒷侧׾《׶䪔ֲֿהָדֹ׷ var run = function(argv) {

    console.log(`${argv[0]}`) }
  66. 暴ⴽזꟼ侧 ˖ 暴㹀ךة؎ىؚٝדㄎן⳿ׁ׸׷ꟼ侧 ˖ 寸׭׵׸׋せ⵸ד㹀纏׃גֶֻ ˖ SVOׅץגךؿؓ٦وحز ˖ PQFO%PDVNFOUT QSJOU%PDVNFOUT

    JEMF  SFPQFO RVJU،فٔ؛٦ءّٝؿؓ٦وحز 鑫稢ⶴ䠥
  67. ؝وٝسٓ؎ٝדך㹋遤 ˖ PTBTDSJQU؝وٝس׾⢪ֲ ˖ TDQUז׵׉ךתת䭷㹀 ˖ PTBTDSJQUNZ@TDSJQUTDQU ˖ ذؗأز䕎䒭ז׵ؿؓ٦وحز׾䭷㹀 ˖

    PTBTDSJQUM+BWB4DSJQUNZ@TDSJQUKT
  68. ؎ٝةؙٓذ؍ـٌ٦س ˖ PTBTDSJQUJד饯⹛דֹ׷ ˖ 㼎鑧涸؎ٝة٦ؿؑ؎أ ˖ JSC׫׋ְז׮ך ˖ DUSMEד䫙ֽ׷

  69. 㢩鿇ٓ؎ـٓٔךⵃ欽 ˖ 0CK$JNQPSU׾⢪׏גٓ؎ـٓٔ׾铣׫鴥׭׷ ˖ FYJUDPEF➰ֹד穄✪׃׋׶橆㞮㢌侧׾⿫撑׃׋׶ׅ ׷ךחTUEMJC׾铣׫鴥׬ֿהָ㢳ְ ˖ $PDPBךٓ؎ـٓٔ׾⢪ֲֿה׮״ֻ֮׷ ˖ $PNNPO+4װ#SPXTFSJGZה鸬⹛ז׿גֿה׮דֹ׷

    鑫稢ⶴ䠥
  70. תה׭

  71. תה׭ ˖ "QQMF4DSJQUד⳿勻׷ֿהכקרדֹ׷ ˖ 荈⹛⻉⤑ⵃ

  72. תה׭ ˖ سًُؗٝزָ㼰זְ ˖ "QQMF4DSJQUךسًُؗٝز׾׫זָ׵
 չ䱿庠պ׾⫴ַׇ׷ךָ״ְ ˖ ׋׌׃䗳׆׃׮鎸鶢倯岀ָوحؾؚٝ׃גְ ׷鏬דכזְךד岣䠐
 劤أٓ؎س剑ⴱך؟ٝفٕד4BGBSJךةـ

    ׾乼⡲׃גְ׷鿇ⴓהַ
  73. תה׭ #BTIד⳿勻׷ֿהכ #BTIדװ׸

  74. תה׭ #BTIד⳿勻׷ֿהכ #BTIדװ׸ +9"ח⡦ד׮װ׵ׇ״ֲהׅ׷ךדכזֻծ䖤䩛♶䖤䩛ח 䘔ׄגⳢ椚ⴓⶴ׃ծ׉ךֲִד鸬䵿ׇׁ׷ֿהָꅾ銲דׅ
 EP4IFMM4DSJQU׾崞欽׃ת׃׳ֲ

  75. 5PNPLB[V,JZPIBSB IUUQHJUIVCDPNLJZPIBSB IUUQGBDFCPPLDPNUPNPLB[VLJZPIBSB 5IBOLZPV