[Google Apps Script] clasp 入門

clasp を利用すると、ブラウザ上のエディタではなくローカルファイルとして扱えます。
Git を利用したり、IDE の支援を受けながら開発することができます。

## インストール

`clasp` の利用には以下が必要です。

– npm or yarn
– node.js

`yarn` でグローバルインストールします。

“`prettyprinted
% yarn global add @google/clasp
yarn global v1.17.3
[1/4] 🔍 Resolving packages…
[2/4] 🚚 Fetching packages…
[3/4] 🔗 Linking dependencies…
[4/4] 🔨 Building fresh packages…

success Installed “@google/clasp@2.2.1” with binaries:
– clasp
✨ Done in 70.55s.
% clasp –version
2.2.1
“`

## 初期アカウント設定

プロジェクトディレクトリを用意し、`clasp login` を実行します。
ブラウザが開き、Google アカウントとの紐付けが確認されますので許可します。

“`prettyprinted
% clasp login
“`

このままプロジェクトを作成すると下記のエラーが表示されます。

“`prettyprinted
% clasp create
? Create which script? sheets
Created new Google Sheet: https://drive.google.com/open?id=foo
User has not enabled the Apps Script API. Enable it by visiting https://script.google.com/home/usersettings then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
“`

指示に沿って `https://script.google.com/home/usersettings` にアクセスして Google Apps Script API をオンにします。

## プロジェクトの作成

あらためて作成します。

`clasp create` で Google ドライブにファイルが生成されます。
`–title` オプションでファイル名を指定できます。

“`prettyprinted
% clasp create –title file_name
? Create which script?
standalone
docs
❯ sheets
slides
forms
webapp
api
“`

選択するとローカルに設定ファイルが生成されます。
Google ドライブにファイルが生成されます。

“`prettyprinted
% clasp create –title file_name
? Create which script? sheets
Created new Google Sheet: https://drive.google.com/open?id=foo
Created new Google Sheets Add-on script: https://script.google.com/d/foo/edit
Cloned 1 file.
└─ appsscript.json
“`

現在のローカルディレクトリは以下のようになっています。

“`prettyprinted
.
├── .clasp.json
└── appsscript.json

0 directories, 2 files
“`

`appsscript.json` を確認し、タイムゾーンを `Asia/Tokyo` に変更しました。

“`json:appsscript.json
{
“timeZone”: “America/New_York”,
“dependencies”: {
},
“exceptionLogging”: “STACKDRIVER”
}
“`

### scriptTitle は無効?

当初、ドキュメントにある `scriptTitle` を指定したのですが、

> This command creates a new script in the current directory with an optional script title. clasp create [scriptTitle]
>
> [Apps Script  |  Google Developers](https://developers.google.com/apps-script/guides/clasp)

“`prettyprinted
% clasp create project_name
“`

カレントディレクトリの一つ上、ファイルを収めている親ディレクトリ名のシートが Google ドライブに作成されていました。
エディタで編集できる `*.js` が変更されるのかとも考えたのですが反映されている箇所は見つかりませんでした。

影響はないのでペンディングとします。

“`prettyprinted
% clasp create –help
Usage: create [options]

Create a script

Options:
–type Creates a new Apps Script project attached to a new Document, Spreadsheet, Presentation, Form, or as a standalone script, web app, or API.
–title The project title.<br /> –parentId <id> A project parent Id.<br /> –rootDir <rootDir> Local root directory in which clasp will store your project files.<br /> -h, –help output usage information<br /> “`</p><p>## 開発の流れ</p><p>`clasp pull` で `Code.js` をローカルに引っ張ります。</p><p>“`prettyprinted<br /> % clasp pull<br /> Cloned 2 files.<br /> └─ appsscript.json<br /> └─ Code.js<br /> “`</p><p>内容はブラウザで編集していたあのファイルです。</p><p>“`javascript:Code.js<br /> function myFunction() {<br /> Logger.log(“Hello, World!”);<br /> }<br /> “`</p><p>編集が終わったら、ファイルをアップロードします。<br /> `clasp push` でアップロードします。</p><p>“`prettyprinted<br /> % clasp push<br /> └─ Code.js<br /> └─ appsscript.json<br /> Pushed 2 files.<br /> “`</p><p>以後は、`clasp push` を繰り返えす事で開発を進められそうです。</p><p>こうなると ES2015 で書きたい所ですが、[TypeScript を利用できるパッケージ](https://developers.google.com/apps-script/guides/typescript)が用意されていますので後日確認します。</p><p>### 既存のプロジェクトコードを clone する</p><p>既存プロジェクトのファイルを `clone` します。</p><p>> This command clones an existing project in the current directory. The script must be created or shared with your Google account. You specify the script project to clone by providing it’s script ID. You can find the script ID of a project by opening the project in the Apps Script editor and selecting File > Project properties > Info.<br /> ><br /> > <cite>[Apps Script  |  Google Developers](https://developers.google.com/apps-script/guides/clasp)</cite></p><p>「ツール > スクリプトエディタ」を選択します。<br /> 「ファイル > プロジェクトのプロパティ」を表示し、`スクリプト ID` を控えます。</p><p><img decoding="async" src="https://www.d-wood.com/wpmt/wp-content/uploads/2019/07/2019-07-30_clasp_03.png" alt="" width="700" height="443" class="alignnone size-full wp-image-11382" srcset="https://www.d-wood.com/wpmt/wp-content/uploads/2019/07/2019-07-30_clasp_03.png 700w, https://www.d-wood.com/wpmt/wp-content/uploads/2019/07/2019-07-30_clasp_03-300x190.png 300w" sizes="(max-width: 700px) 100vw, 700px" /></p><p>新しいディレクトリを作成し、既存のプロジェクトを `clasp clone` します。</p><p>“`prettyprinted<br /> % clasp clone <script defer src="data:text/javascript;base64,PGJyIC8+CkNsb25lZCAyIGZpbGVzLjxiciAvPgrilJTilIAgYXBwc3NjcmlwdC5qc29uPGJyIC8+CuKUlOKUgCDjgrPjg7zjg4kuanM8YnIgLz4KJiM4MjIwO2A8L3A+CjxwPiMjIyBwdXNoIOWFiOOCkuWkieabtOOBmeOCizwvcD4KPHA+YC5jbGFzcC5qc29uYCDjg5XjgqHjgqTjg6vjgYwgTWFuaWZlc3QgZmlsZSDjgavjgarjgaPjgabjgYrjgorjgIHjgZPjgozjgpLmm7jjgY3mj5vjgYjjgovjgZPjgajjgacgcHVzaCDlhYjjgpLlpInmm7TjgZnjgovjgZPjgajjgYzjgafjgY3jgb7jgZfjgZ/jgII8L3A+CjxwPiYjODIyMDtganNvbjouY2xhc3AuanNvbjxiciAvPgp7ICYjODIyMDtzY3JpcHRJZCYjODIyMTs6ICYjODIyMDtmb29iYXImIzgyMjE7IH08YnIgLz4KJiM4MjIwO2A8L3A+CjxwPiYjODIyMDtgcHJldHR5cHJpbnRlZDxiciAvPgolIGNsYXNwIHB1c2g8YnIgLz4KPyBNYW5pZmVzdCBmaWxlIGhhcyBiZWVuIHVwZGF0ZWQuIERvIHlvdSB3YW50IHRvIHB1c2ggYW5kIG92ZXJ3cml0ZT8gWWVzPGJyIC8+CuKUlOKUgCBhcHBzc2NyaXB0Lmpzb248YnIgLz4K4pSU4pSAIOOCs+ODvOODiS5qczxiciAvPgpQdXNoZWQgMiBmaWxlcy48YnIgLz4KJiM4MjIwO2A8L3A+CjxwPiMjIyDjgZ3jga7ku5bjga7jgrPjg57jg7Pjg4k8L3A+CjxwPuWFrOW8j+ODieOCreODpeODoeODs+ODiOOBq+OBr+S7luOBq+OCguOBhOOBj+OBpOOBi+OCs+ODnuODs+ODieOBjOiomOi8ieOBleOCjOOBpuOBhOOBvuOBmeOAgjwvcD4KPHA+PiAmIzgyMTE7IFtBcHBzIFNjcmlwdCDCoHzCoCBHb29nbGUgRGV2ZWxvcGVyc10oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vYXBwcy1zY3JpcHQvZ3VpZGVzL2NsYXNwKTwvcD4KPHA+JiM4MjIwO2BwcmV0dHlwcmludGVkPGJyIC8+CiUgY2xhc3AgJiM4MjExO2hlbHA8YnIgLz4KVXNhZ2U6IGNsYXNwIDxjb21tYW5kPiBbb3B0aW9uc108L3A+CjxwPmNsYXNwICYjODIxMTsgVGhlIEFwcHMgU2NyaXB0IENMSTwvcD4KPHA+T3B0aW9uczo8YnIgLz4KICAtdiwgJiM4MjExO3ZlcnNpb248YnIgLz4KICAtaCwgJiM4MjExO2hlbHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHVzYWdlIGluZm9ybWF0aW9uPC9wPgo8cD5Db21tYW5kczo8YnIgLz4KICBsb2dpbiBbb3B0aW9uc10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZyBpbiB0byBzY3JpcHQuZ29vZ2xlLmNvbTxiciAvPgogIGxvZ291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nIG91dDxiciAvPgogIGNyZWF0ZSBbb3B0aW9uc10gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIGEgc2NyaXB0PGJyIC8+CiAgY2xvbmUgW29wdGlvbnNdIFtzY3JpcHRJZF0gW3ZlcnNpb25OdW1iZXJdICBDbG9uZSBhIHByb2plY3Q8YnIgLz4KICBwdWxsIFtvcHRpb25zXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZldGNoIGEgcmVtb3RlIHByb2plY3Q8YnIgLz4KICBwdXNoIFtvcHRpb25zXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZSB0aGUgcmVtb3RlIHByb2plY3Q8YnIgLz4KICBzdGF0dXMgW29wdGlvbnNdICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RzIGZpbGVzIHRoYXQgd2lsbCBiZSBwdXNoZWQgYnkgY2xhc3A8YnIgLz4KICBvcGVuIFtvcHRpb25zXSBbc2NyaXB0SWRdICAgICAgICAgICAgICAgICAgIE9wZW4gYSBzY3JpcHQ8YnIgLz4KICBkZXBsb3ltZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3QgZGVwbG95bWVudCBpZHMgb2YgYSBzY3JpcHQ8YnIgLz4KICBkZXBsb3kgW29wdGlvbnNdICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcGxveSBhIHByb2plY3Q8YnIgLz4KICB1bmRlcGxveSBbb3B0aW9uc10gW2RlcGxveW1lbnRJZF0gICAgICAgICAgIFVuZGVwbG95IGEgZGVwbG95bWVudCBvZiBhIHByb2plY3Q8YnIgLz4KICB2ZXJzaW9uIFtkZXNjcmlwdGlvbl0gICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHZlcnNpb24gb2YgdGhlIHNjcmlwdDxiciAvPgogIHZlcnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCB2ZXJzaW9ucyBvZiBhIHNjcmlwdDxiciAvPgogIGxpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBBcHAgU2NyaXB0cyBwcm9qZWN0czxiciAvPgogIGxvZ3MgW29wdGlvbnNdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hvd3MgdGhlIFN0YWNrRHJpdmVyIGxvZ3M8YnIgLz4KICBydW4gW29wdGlvbnNdIFtmdW5jdGlvbk5hbWVdICAgICAgICAgICAgICAgIFJ1biBhIGZ1bmN0aW9uIGluIHlvdXIgQXBwcyBTY3JpcHRzIHByb2plY3Q8YnIgLz4KICBhcGlzIFtvcHRpb25zXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3QsIGVuYWJsZSwgb3IgZGlzYWJsZSBBUElzPGJyIC8+CiAgICBsaXN0PGJyIC8+CiAgICBlbmFibGUgPGFwaT48YnIgLz4KICAgIGRpc2FibGUgPGFwaT48YnIgLz4KICBoZWxwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgaGVscDxiciAvPgogIHNldHRpbmd8c2V0dGluZ3MgW3NldHRpbmdLZXldIFtuZXdWYWx1ZV0gICAgVXBkYXRlIDxzZXR0aW5nS2V5PiBpbiAuY2xhc3AuanNvbjxiciAvPgogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55IG90aGVyIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZDxiciAvPgomIzgyMjA7YDwvcD4KPHA+YGNsYXNwIGRlcGxveWAg44Gv44Km44Kn44OW44Ki44OX44Oq44KS44OH44OX44Ot44Kk44GZ44KL6Zqb44Gr5Yip55So44GZ44KL44KI44GG44Gn44GZ44CCPGJyIC8+CmBjbGFzcCB2ZXJzaW9uc2Ag44Gv54mI44Gu566h55CG44GM44Gn44GN44KL44Gd44GG44Gn44GZ44CC44CM5pyA5paw44Gu54mI44Gr5ZCN5YmN44KS5LuY44GR44KL44CN44GC44Gf44KK44Gr5a++5b+c44GX44Gm44GE44KL44Gu44Gn44GX44KH44GG44GL44CCPC9wPgo8cD4+ICYjODIxMTsgW0dvb2dsZSBBcHBzIFNjcmlwdOOCkuODreODvOOCq+ODq1BD44Gn6ZaL55m644GZ44KL5pa55rOVIPCfjLQgb2ZmaWNl44Gu5p2cXShodHRwczovL29mZmljZWZvcmVzdC5vcmcvd3AvMjAxOS8wNC8wNy9nb29nbGUtYXBwcy1zY3JpcHQlRTMlODIlOTIlRTMlODMlQUQlRTMlODMlQkMlRTMlODIlQUIlRTMlODMlQUJwYyVFMyU4MSVBNyVFOSU5NiU4QiVFNyU5OSVCQSVFMyU4MSU5OSVFMyU4MiU4QiVFNiU5NiVCOSVFNiVCMyU5NS8pPC9wPgo8cD4jIyBDcm9uIOeahOOBq+OCueOCr+ODquODl+ODiOOCkuWumuacn+Wun+ihjOOBmeOCizwvcD4KPHA+Y2xhc3Ag44GL44KJ44Gv5aSW44KM44G+44GZ44GM44CB44Ko44OH44Kj44K/55S76Z2i44Gu5pmC6KiI44Ki44Kk44Kz44Oz44KS44Kv44Oq44OD44Kv44GZ44KL44Go44CB44K544Kv44Oq44OX44OI44Gu5a6f6KGM44OI44Oq44Ks44O844KS5oyH5a6a44GZ44KL44GT44Go44GM44Gn44GN44G+44GZ44CCPGJyIC8+CuOBk+OCjOOBq+OCiOOCiuWumuacn+Wun+ihjOOBquOBqeOBjOWPr+iDveOBq+OBquOCiuOBvuOBmeOAgjwvcD4KPHA+PGltZyBkZWNvZGluZz0iYXN5bmMiIHNyYz0iaHR0cHM6Ly93d3cuZC13b29kLmNvbS93cG10L3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE5LzA3LzIwMTktMDctMzBfY2xhc3BfMDQucG5nIiBhbHQ9IiIgd2lkdGg9IjQwMCIgaGVpZ2h0PSIxMzMiIGNsYXNzPSJhbGlnbm5vbmUgc2l6ZS1mdWxsIHdwLWltYWdlLTExMzgzIiBzcmNzZXQ9Imh0dHBzOi8vd3d3LmQtd29vZC5jb20vd3BtdC93cC1jb250ZW50L3VwbG9hZHMvMjAxOS8wNy8yMDE5LTA3LTMwX2NsYXNwXzA0LnBuZyA0MDB3LCBodHRwczovL3d3dy5kLXdvb2QuY29tL3dwbXQvd3AtY29udGVudC91cGxvYWRzLzIwMTkvMDcvMjAxOS0wNy0zMF9jbGFzcF8wNC0zMDB4MTAwLnBuZyAzMDB3IiBzaXplcz0iKG1heC13aWR0aDogNDAwcHgpIDEwMHZ3LCA0MDBweCIgLz48L3A+CjxwPiMjIOaJgOaEnzwvcD4KPHA+44K144O844OQ44K344K544OG44Og44KS5bu644Gm57at5oyB566h55CG44GZ44KL44GT44Go44GM6Zuj44GX44GE57WE57mU44Gu5aC05ZCI44CB57Ch5piT44Gq5qWt5YuZ44K344K544OG44Og44O744OE44O844Or44KSIEdvb2dsZSBBcHBzIFNjcmlwdCDjgafkvZzjgovkuovjgafjgrXjg7zjg5Djgb7jgo/jgorjgpLjgYrku7vjgZvjgafjgY3jgovjgajjgYTjgYbjg53jgqTjg7Pjg4jjga/lpKfjgY3jgZ3jgYbjgII8YnIgLz4K5LqI566X44KE5Lq65ZOh44Gu56K65L+d44GM44Gq44GP44Gq44KK44G+44GZ44Gu44Gn44CCPC9wPgo8cD7jgZ3jgYbjgarjgovjgaggU0xBIOOBjOawl+OBq+OBquOCiuOBvuOBmeOBjOOAgUcgU3VpdGUgU0xBKDk5LjklKSDjgYzpgannlKjjgZXjgozjgovjga7jgYvjgarjgajmgJ3jgo/jgozjgb7jgZnjgII8L3A+CjxwPj4gJiM4MjExOyBbRyBTdWl0ZSBUZXJtcyBvZiBTZXJ2aWNlIOKAkyBHIFN1aXRlXShodHRwczovL2dzdWl0ZS5nb29nbGUuY29tL2ludGwvZW4tR0IvdGVybXMvc2xhLmh0bWwpPGJyIC8+Cj4gJiM4MjExOyBbRyBTdWl0ZSBTdGF0dXMgRGFzaGJvYXJkXShodHRwczovL3d3dy5nb29nbGUuY29tL2FwcHNzdGF0dXMjaGw9amEmIzAzODt2PXN0YXR1cyk8L3A+CjxwPuOBneOBruS7luOAgeODoeODquODg+ODiOODu+ODh+ODoeODquODg+ODiOOChOWun+S+i+OBq+OBpOOBhOOBpuOBr+S4i+iomOOBjOWPguiAg+OBq+OBquOCiuOBvuOBl+OBn+OAgjwvcD4KPHA+PiAmIzgyMTE7IFtHb29nbGUgQXBwcyBTY3JpcHQg44Gv5L2V44GM5by344GP44Gm44Gp44KT44Gq44Go44GN44Gr5L2/44GG44G544GN44GL6Ieq5YiG44Gq44KK44Gu44OX44Op44Kv44OG44Kj44K544KS44G+44Go44KB44Gm44G/44GfXShodHRwczovL21lZGl1bS5jb20vZ29vZ2xlLWNsb3VkLWpwL2dvb2dsZS1hcHBzLXNjcmlwdC0lRTMlODElQUYlRTQlQkQlOTUlRTMlODElOEMlRTUlQkMlQjclRTMlODElOEYlRTMlODElQTYlRTMlODElQTklRTMlODIlOTMlRTMlODElQUElRTMlODElQTglRTMlODElOEQlRTMlODElQUIlRTQlQkQlQkYlRTMlODElODYlRTMlODElQjklRTMlODElOEQlRTMlODElOEIlRTglODclQUElRTUlODglODYlRTMlODElQUElRTMlODIlOEElRTMlODElQUUlRTMlODMlOTclRTMlODMlQTklRTMlODIlQUYlRTMlODMlODYlRTMlODIlQTMlRTMlODIlQjklRTMlODIlOTIlRTMlODElQkUlRTMlODElQTglRTMlODIlODElRTMlODElQTYlRTMlODElQkYlRTMlODElOUYtMjQ4YjNiMGNmZDIwKTxiciAvPgo+ICYjODIxMTsgW0dvb2dsZSBBcHBzIFNjcmlwdCAoR0FTKSDjgafmr47pgLEgMzAg5YiG44Gu6ZuR5YuZ44KS6Ieq5YuV5YyW44GX44Gf6KmxICYjODIxMTsgUWlpdGFdKGh0dHBzOi8vcWlpdGEuY29tL3RhbmFiZWUvaXRlbXMvZTUxZjEwN2YxZTk1YTQyY2M2MzYpPC9wPgoJCQoKCQkJPC9kaXY+CjwvYXJ0aWNsZT4KCgk8bmF2IGNsYXNzPSJuYXZpZ2F0aW9uIHBvc3QtbmF2aWdhdGlvbiIgYXJpYS1sYWJlbD0i5oqV56i/Ij4KCQk8aDIgY2xhc3M9InNjcmVlbi1yZWFkZXItdGV4dCI+5oqV56i/44OK44OT44Ky44O844K344On44OzPC9oMj4KCQk8ZGl2IGNsYXNzPSJuYXYtbGlua3MiPjxkaXYgY2xhc3M9Im5hdi1wcmV2aW91cyI+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZC13b29kLmNvbS9ibG9nLzIwMTkvMDcvMjlfMTEzNzUuaHRtbCIgcmVsPSJwcmV2Ij7CqyBQcmV2aW91cyBQb3N0PC9hPjwvZGl2PjxkaXYgY2xhc3M9Im5hdi1uZXh0Ij48YSBocmVmPSJodHRwczovL3d3dy5kLXdvb2QuY29tL2Jsb2cvMjAxOS8wNy8zMV8xMTQxNy5odG1sIiByZWw9Im5leHQiPk5leHQgUG9zdCDCuzwvYT48L2Rpdj48L2Rpdj4KCTwvbmF2PjwhLS0gL3Bvc3QgLS0+CgoKPGFzaWRlPgoJPC9hc2lkZT4KCjwvbWFpbj48IS0tIG1haW4gLS0+Cjxhc2lkZSBpZD0iYXNpZGUiIGNsYXNzPSJhc2lkZSI+Cgo8ZGl2IGNsYXNzPSJ3aWRnZXQiPgogICAgPCEtLSBBbWF6b24gYWRzIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmFtem5fYXNzb2NfYWRfdHlwZSA9InJlc3BvbnNpdmVfc2VhcmNoX3dpZGdldCI7IGFtem5fYXNzb2NfdHJhY2tpbmdfaWQgPSJkcmlmdHdvb2QtMjIiOyBhbXpuX2Fzc29jX21hcmtldHBsYWNlID0iYW1hem9uIjsgYW16bl9hc3NvY19yZWdpb24gPSJKUCI7IGFtem5fYXNzb2NfcGxhY2VtZW50ID0iIjsgYW16bl9hc3NvY19zZWFyY2hfdHlwZSA9ICJzZWFyY2hfd2lkZ2V0IjthbXpuX2Fzc29jX3dpZHRoID0iYXV0byI7IGFtem5fYXNzb2NfaGVpZ2h0ID0iYXV0byI7IGFtem5fYXNzb2NfZGVmYXVsdF9zZWFyY2hfY2F0ZWdvcnkgPSJCb29rcyI7IGFtem5fYXNzb2NfZGVmYXVsdF9zZWFyY2hfa2V5ID0iR29vZ2xlIEFwcHMgU2NyaXB0IjthbXpuX2Fzc29jX3RoZW1lID0ibGlnaHQiOyBhbXpuX2Fzc29jX2JnX2NvbG9yID0iRkZGRkZGIjsg"></script> <script defer src="//z-fe.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&Operation=GetScript&ID=OneJS&WS=1&Marketplace=JP"></script> </div><div id="block-14" class="widget widget_block"><div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow"><div class="wp-block-image is-style-default"><figure class="aligncenter size-medium is-resized"><img loading="lazy" decoding="async" src="https://www.d-wood.com/wpmt/wp-content/uploads/2021/07/profile-300x300.png" alt="" class="wp-image-12376" width="200" height="200" srcset="https://www.d-wood.com/wpmt/wp-content/uploads/2021/07/profile-300x300.png 300w, https://www.d-wood.com/wpmt/wp-content/uploads/2021/07/profile-150x150.png 150w, https://www.d-wood.com/wpmt/wp-content/uploads/2021/07/profile.png 420w" sizes="auto, (max-width: 200px) 100vw, 200px" /></figure></div><p>未来の自分をターゲットに、学んだことをメモするWeb系Macのひと。</p><p>このブログ記事は、公開日を基準に以下の macOS バージョンと対応しています。</p><ul class="wp-block-list"><li>Apple シリコン<ul class="wp-block-list"><li>13.4.1 … 2023/06/24 -</li></ul></li></ul><div class="wp-block-buttons is-horizontal is-content-justification-left is-layout-flex wp-container-core-buttons-is-layout-7e5fce0a wp-block-buttons-is-layout-flex"><div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://www.d-wood.com/profile">続きを読む »</a></div></div></div></div></div><div id="search-3" class="widget widget_search"><form role="search" method="get" class="search-form" action="https://www.d-wood.com/"> <label> <span class="screen-reader-text">検索:</span> <input type="search" class="search-field" placeholder="Search..." value="" name="s" title="検索:" /> </label> <input type="submit" class="search-submit" value="" /></form></div><div id="archives-4" class="widget widget_archive"><h2 class="widgettitle">Archives</h2> <label class="screen-reader-text" for="archives-dropdown-4">Archives</label> <select id="archives-dropdown-4" name="archive-dropdown"><option value="">月を選択</option><option value='https://www.d-wood.com/blog/2023/06'> 2023年6月  (2)</option><option value='https://www.d-wood.com/blog/2022/02'> 2022年2月  (1)</option><option value='https://www.d-wood.com/blog/2021/07'> 2021年7月  (1)</option><option value='https://www.d-wood.com/blog/2021/05'> 2021年5月  (9)</option><option value='https://www.d-wood.com/blog/2021/04'> 2021年4月  (6)</option><option value='https://www.d-wood.com/blog/2021/02'> 2021年2月  (1)</option><option value='https://www.d-wood.com/blog/2020/12'> 2020年12月  (4)</option><option value='https://www.d-wood.com/blog/2020/09'> 2020年9月  (1)</option><option value='https://www.d-wood.com/blog/2020/07'> 2020年7月  (5)</option><option value='https://www.d-wood.com/blog/2020/03'> 2020年3月  (3)</option><option value='https://www.d-wood.com/blog/2020/02'> 2020年2月  (8)</option><option value='https://www.d-wood.com/blog/2020/01'> 2020年1月  (5)</option><option value='https://www.d-wood.com/blog/2019/12'> 2019年12月  (6)</option><option value='https://www.d-wood.com/blog/2019/11'> 2019年11月  (3)</option><option value='https://www.d-wood.com/blog/2019/10'> 2019年10月  (14)</option><option value='https://www.d-wood.com/blog/2019/09'> 2019年9月  (2)</option><option value='https://www.d-wood.com/blog/2019/08'> 2019年8月  (3)</option><option value='https://www.d-wood.com/blog/2019/07'> 2019年7月  (10)</option><option value='https://www.d-wood.com/blog/2019/06'> 2019年6月  (1)</option><option value='https://www.d-wood.com/blog/2019/05'> 2019年5月  (6)</option><option value='https://www.d-wood.com/blog/2019/03'> 2019年3月  (1)</option><option value='https://www.d-wood.com/blog/2019/02'> 2019年2月  (4)</option><option value='https://www.d-wood.com/blog/2019/01'> 2019年1月  (5)</option><option value='https://www.d-wood.com/blog/2018/12'> 2018年12月  (5)</option><option value='https://www.d-wood.com/blog/2018/11'> 2018年11月  (4)</option><option value='https://www.d-wood.com/blog/2018/10'> 2018年10月  (5)</option><option value='https://www.d-wood.com/blog/2018/09'> 2018年9月  (1)</option><option value='https://www.d-wood.com/blog/2018/08'> 2018年8月  (6)</option><option value='https://www.d-wood.com/blog/2018/07'> 2018年7月  (7)</option><option value='https://www.d-wood.com/blog/2018/06'> 2018年6月  (1)</option><option value='https://www.d-wood.com/blog/2018/05'> 2018年5月  (8)</option><option value='https://www.d-wood.com/blog/2018/04'> 2018年4月  (3)</option><option value='https://www.d-wood.com/blog/2018/03'> 2018年3月  (3)</option><option value='https://www.d-wood.com/blog/2018/02'> 2018年2月  (3)</option><option value='https://www.d-wood.com/blog/2018/01'> 2018年1月  (9)</option><option value='https://www.d-wood.com/blog/2017/12'> 2017年12月  (6)</option><option value='https://www.d-wood.com/blog/2017/11'> 2017年11月  (8)</option><option value='https://www.d-wood.com/blog/2017/10'> 2017年10月  (3)</option><option value='https://www.d-wood.com/blog/2017/09'> 2017年9月  (11)</option><option value='https://www.d-wood.com/blog/2017/08'> 2017年8月  (12)</option><option value='https://www.d-wood.com/blog/2017/07'> 2017年7月  (14)</option><option value='https://www.d-wood.com/blog/2017/06'> 2017年6月  (11)</option><option value='https://www.d-wood.com/blog/2017/05'> 2017年5月  (14)</option><option value='https://www.d-wood.com/blog/2017/04'> 2017年4月  (8)</option><option value='https://www.d-wood.com/blog/2017/03'> 2017年3月  (4)</option><option value='https://www.d-wood.com/blog/2017/02'> 2017年2月  (9)</option><option value='https://www.d-wood.com/blog/2017/01'> 2017年1月  (16)</option><option value='https://www.d-wood.com/blog/2016/12'> 2016年12月  (15)</option><option value='https://www.d-wood.com/blog/2016/11'> 2016年11月  (13)</option><option value='https://www.d-wood.com/blog/2016/10'> 2016年10月  (8)</option><option value='https://www.d-wood.com/blog/2016/09'> 2016年9月  (8)</option><option value='https://www.d-wood.com/blog/2016/08'> 2016年8月  (16)</option><option value='https://www.d-wood.com/blog/2016/07'> 2016年7月  (27)</option><option value='https://www.d-wood.com/blog/2016/06'> 2016年6月  (14)</option><option value='https://www.d-wood.com/blog/2016/05'> 2016年5月  (14)</option><option value='https://www.d-wood.com/blog/2016/04'> 2016年4月  (21)</option><option value='https://www.d-wood.com/blog/2016/03'> 2016年3月  (12)</option><option value='https://www.d-wood.com/blog/2016/02'> 2016年2月  (11)</option><option value='https://www.d-wood.com/blog/2016/01'> 2016年1月  (10)</option><option value='https://www.d-wood.com/blog/2015/12'> 2015年12月  (6)</option><option value='https://www.d-wood.com/blog/2015/11'> 2015年11月  (12)</option><option value='https://www.d-wood.com/blog/2015/10'> 2015年10月  (13)</option><option value='https://www.d-wood.com/blog/2015/09'> 2015年9月  (1)</option><option value='https://www.d-wood.com/blog/2015/08'> 2015年8月  (1)</option><option value='https://www.d-wood.com/blog/2015/07'> 2015年7月  (6)</option><option value='https://www.d-wood.com/blog/2015/06'> 2015年6月  (3)</option><option value='https://www.d-wood.com/blog/2015/05'> 2015年5月  (5)</option><option value='https://www.d-wood.com/blog/2015/04'> 2015年4月  (10)</option><option value='https://www.d-wood.com/blog/2015/03'> 2015年3月  (1)</option><option value='https://www.d-wood.com/blog/2015/02'> 2015年2月  (9)</option><option value='https://www.d-wood.com/blog/2015/01'> 2015年1月  (13)</option><option value='https://www.d-wood.com/blog/2014/12'> 2014年12月  (16)</option><option value='https://www.d-wood.com/blog/2014/11'> 2014年11月  (22)</option><option value='https://www.d-wood.com/blog/2014/10'> 2014年10月  (26)</option><option value='https://www.d-wood.com/blog/2014/09'> 2014年9月  (29)</option><option value='https://www.d-wood.com/blog/2014/08'> 2014年8月  (37)</option><option value='https://www.d-wood.com/blog/2014/07'> 2014年7月  (20)</option><option value='https://www.d-wood.com/blog/2014/06'> 2014年6月  (20)</option><option value='https://www.d-wood.com/blog/2014/05'> 2014年5月  (20)</option><option value='https://www.d-wood.com/blog/2014/04'> 2014年4月  (21)</option><option value='https://www.d-wood.com/blog/2014/03'> 2014年3月  (19)</option><option value='https://www.d-wood.com/blog/2014/02'> 2014年2月  (29)</option><option value='https://www.d-wood.com/blog/2014/01'> 2014年1月  (32)</option><option value='https://www.d-wood.com/blog/2013/12'> 2013年12月  (26)</option><option value='https://www.d-wood.com/blog/2013/11'> 2013年11月  (18)</option><option value='https://www.d-wood.com/blog/2013/10'> 2013年10月  (35)</option><option value='https://www.d-wood.com/blog/2013/09'> 2013年9月  (29)</option><option value='https://www.d-wood.com/blog/2013/08'> 2013年8月  (12)</option><option value='https://www.d-wood.com/blog/2013/07'> 2013年7月  (32)</option><option value='https://www.d-wood.com/blog/2013/06'> 2013年6月  (26)</option><option value='https://www.d-wood.com/blog/2013/05'> 2013年5月  (12)</option><option value='https://www.d-wood.com/blog/2013/04'> 2013年4月  (3)</option><option value='https://www.d-wood.com/blog/2012/10'> 2012年10月  (2)</option><option value='https://www.d-wood.com/blog/2012/09'> 2012年9月  (2)</option><option value='https://www.d-wood.com/blog/2012/08'> 2012年8月  (9)</option><option value='https://www.d-wood.com/blog/2010/05'> 2010年5月  (1)</option><option value='https://www.d-wood.com/blog/2008/06'> 2008年6月  (1)</option><option value='https://www.d-wood.com/blog/2007/11'> 2007年11月  (6)</option><option value='https://www.d-wood.com/blog/2007/06'> 2007年6月  (5)</option><option value='https://www.d-wood.com/blog/2007/05'> 2007年5月  (1)</option><option value='https://www.d-wood.com/blog/2006/12'> 2006年12月  (2)</option><option value='https://www.d-wood.com/blog/2006/09'> 2006年9月  (1)</option><option value='https://www.d-wood.com/blog/2006/03'> 2006年3月  (3)</option><option value='https://www.d-wood.com/blog/2006/02'> 2006年2月  (3)</option><option value='https://www.d-wood.com/blog/2006/01'> 2006年1月  (4)</option><option value='https://www.d-wood.com/blog/2005/12'> 2005年12月  (2)</option><option value='https://www.d-wood.com/blog/2003/12'> 2003年12月  (1)</option> </select> <script defer src="data:text/javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwoKKGZ1bmN0aW9uKCkgewoJdmFyIGRyb3Bkb3duID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICJhcmNoaXZlcy1kcm9wZG93bi00IiApOwoJZnVuY3Rpb24gb25TZWxlY3RDaGFuZ2UoKSB7CgkJaWYgKCBkcm9wZG93bi5vcHRpb25zWyBkcm9wZG93bi5zZWxlY3RlZEluZGV4IF0udmFsdWUgIT09ICcnICkgewoJCQlkb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gdGhpcy5vcHRpb25zWyB0aGlzLnNlbGVjdGVkSW5kZXggXS52YWx1ZTsKCQl9Cgl9Cglkcm9wZG93bi5vbmNoYW5nZSA9IG9uU2VsZWN0Q2hhbmdlOwp9KSgpOwoKLyogXV0+ICovCg=="></script> </div><div id="categories-4" class="widget widget_categories"><h2 class="widgettitle">Categories</h2><ul><li class="cat-item cat-item-3"><a href="https://www.d-wood.com/blog/category/ci">Continuous Integration</a> (1)</li><li class="cat-item cat-item-4"><a href="https://www.d-wood.com/blog/category/document-workflow">Document & Workflow</a> (23)</li><li class="cat-item cat-item-5"><a href="https://www.d-wood.com/blog/category/front-end_all">Front-End</a> (105)<ul class='children'><li class="cat-item cat-item-45"><a href="https://www.d-wood.com/blog/category/front-end_all/babel">Babel</a> (9)</li><li class="cat-item cat-item-381"><a href="https://www.d-wood.com/blog/category/front-end_all/front-end_general">Front-End General</a> (35)</li><li class="cat-item cat-item-7"><a href="https://www.d-wood.com/blog/category/front-end_all/grunt-yeoman">Grunt & Yeoman</a> (32)</li><li class="cat-item cat-item-18"><a href="https://www.d-wood.com/blog/category/front-end_all/npm-bower">npm & Bower</a> (16)</li><li class="cat-item cat-item-34"><a href="https://www.d-wood.com/blog/category/front-end_all/webpack">webpack</a> (13)</li></ul></li><li class="cat-item cat-item-6"><a href="https://www.d-wood.com/blog/category/git">Git</a> (45)</li><li class="cat-item cat-item-390"><a href="https://www.d-wood.com/blog/category/google">Google</a> (28)<ul class='children'><li class="cat-item cat-item-2"><a href="https://www.d-wood.com/blog/category/google/android">Android</a> (4)</li><li class="cat-item cat-item-395"><a href="https://www.d-wood.com/blog/category/google/chrome-developer-tools">Chrome Developer Tools</a> (3)</li><li class="cat-item cat-item-397"><a href="https://www.d-wood.com/blog/category/google/g-suite">G Suite</a> (3)</li><li class="cat-item cat-item-398"><a href="https://www.d-wood.com/blog/category/google/google-analytics">Google Analytics</a> (1)</li><li class="cat-item cat-item-392"><a href="https://www.d-wood.com/blog/category/google/google-apps-script">Google Apps Script</a> (6)</li><li class="cat-item cat-item-394"><a href="https://www.d-wood.com/blog/category/google/google-fonts">Google Fonts</a> (4)</li><li class="cat-item cat-item-396"><a href="https://www.d-wood.com/blog/category/google/google-general">Google General</a> (5)</li><li class="cat-item cat-item-393"><a href="https://www.d-wood.com/blog/category/google/google-maps">Google Maps</a> (2)</li></ul></li><li class="cat-item cat-item-8"><a href="https://www.d-wood.com/blog/category/html-css_all">HTML & CSS</a> (109)<ul class='children'><li class="cat-item cat-item-410"><a href="https://www.d-wood.com/blog/category/html-css_all/bootstrap-3">Bootstrap 3</a> (8)</li><li class="cat-item cat-item-379"><a href="https://www.d-wood.com/blog/category/html-css_all/bootstrap-4">Bootstrap 4</a> (6)</li><li class="cat-item cat-item-403"><a href="https://www.d-wood.com/blog/category/html-css_all/bootstrap-5">Bootstrap 5</a> (1)</li><li class="cat-item cat-item-48"><a href="https://www.d-wood.com/blog/category/html-css_all/html-css_general">HTML & CSS General</a> (69)</li><li class="cat-item cat-item-27"><a href="https://www.d-wood.com/blog/category/html-css_all/sass-compass">Sass & Compass</a> (17)</li><li class="cat-item cat-item-30"><a href="https://www.d-wood.com/blog/category/html-css_all/susy2">Susy2</a> (8)</li></ul></li><li class="cat-item cat-item-9"><a href="https://www.d-wood.com/blog/category/ide-editor_all">IDE & Editor</a> (27)</li><li class="cat-item cat-item-411"><a href="https://www.d-wood.com/blog/category/java">Java</a> (10)</li><li class="cat-item cat-item-10"><a href="https://www.d-wood.com/blog/category/javascript_all">JavaScript</a> (79)<ul class='children'><li class="cat-item cat-item-382"><a href="https://www.d-wood.com/blog/category/javascript_all/javascript_general">JavaScript General</a> (31)</li><li class="cat-item cat-item-11"><a href="https://www.d-wood.com/blog/category/javascript_all/jquery">jQuery</a> (39)</li><li class="cat-item cat-item-17"><a href="https://www.d-wood.com/blog/category/javascript_all/node-js">Node.js</a> (4)</li><li class="cat-item cat-item-20"><a href="https://www.d-wood.com/blog/category/javascript_all/react">React</a> (5)</li></ul></li><li class="cat-item cat-item-12"><a href="https://www.d-wood.com/blog/category/macos_all">macOS</a> (97)<ul class='children'><li class="cat-item cat-item-43"><a href="https://www.d-wood.com/blog/category/macos_all/automator-applescript">Automator & AppleScript</a> (14)</li><li class="cat-item cat-item-383"><a href="https://www.d-wood.com/blog/category/macos_all/macos_general">macOS General</a> (77)</li><li class="cat-item cat-item-13"><a href="https://www.d-wood.com/blog/category/macos_all/macports-2">MacPorts</a> (6)</li></ul></li><li class="cat-item cat-item-14"><a href="https://www.d-wood.com/blog/category/middleman_all">Middleman</a> (33)<ul class='children'><li class="cat-item cat-item-15"><a href="https://www.d-wood.com/blog/category/middleman_all/middleman-3">Middleman 3</a> (32)</li><li class="cat-item cat-item-16"><a href="https://www.d-wood.com/blog/category/middleman_all/middleman-4">Middleman 4</a> (1)</li></ul></li><li class="cat-item cat-item-19"><a href="https://www.d-wood.com/blog/category/php">PHP</a> (11)</li><li class="cat-item cat-item-21"><a href="https://www.d-wood.com/blog/category/research">Research</a> (1)</li><li class="cat-item cat-item-22"><a href="https://www.d-wood.com/blog/category/rspec-3">RSpec 3</a> (6)</li><li class="cat-item cat-item-23"><a href="https://www.d-wood.com/blog/category/ruby">Ruby</a> (59)</li><li class="cat-item cat-item-24"><a href="https://www.d-wood.com/blog/category/ruby-on-rails_all">Ruby on Rails</a> (70)<ul class='children'><li class="cat-item cat-item-409"><a href="https://www.d-wood.com/blog/category/ruby-on-rails_all/ruby-on-rails-3">Ruby on Rails 3</a> (35)</li><li class="cat-item cat-item-25"><a href="https://www.d-wood.com/blog/category/ruby-on-rails_all/ruby-on-rails-4">Ruby on Rails 4</a> (56)</li><li class="cat-item cat-item-26"><a href="https://www.d-wood.com/blog/category/ruby-on-rails_all/ruby-on-rails-5">Ruby on Rails 5</a> (14)</li></ul></li><li class="cat-item cat-item-28"><a href="https://www.d-wood.com/blog/category/server-network_all">Server & Network</a> (81)<ul class='children'><li class="cat-item cat-item-44"><a href="https://www.d-wood.com/blog/category/server-network_all/aws">AWS</a> (1)</li><li class="cat-item cat-item-47"><a href="https://www.d-wood.com/blog/category/server-network_all/docker">Docker</a> (6)</li><li class="cat-item cat-item-49"><a href="https://www.d-wood.com/blog/category/server-network_all/server-network_general">Server & Network General</a> (39)</li><li class="cat-item cat-item-33"><a href="https://www.d-wood.com/blog/category/server-network_all/vagrant-virtualbox">Vagrant & VirtualBox</a> (35)</li></ul></li><li class="cat-item cat-item-29"><a href="https://www.d-wood.com/blog/category/shell">Shell</a> (17)</li><li class="cat-item cat-item-412"><a href="https://www.d-wood.com/blog/category/spring-boot">Spring Boot</a> (1)</li><li class="cat-item cat-item-31"><a href="https://www.d-wood.com/blog/category/tips">Tips</a> (40)</li><li class="cat-item cat-item-32"><a href="https://www.d-wood.com/blog/category/topics">Topics</a> (15)</li><li class="cat-item cat-item-387"><a href="https://www.d-wood.com/blog/category/windows">Windows</a> (21)<ul class='children'><li class="cat-item cat-item-388"><a href="https://www.d-wood.com/blog/category/windows/windows-10">Windows 10</a> (7)</li><li class="cat-item cat-item-35"><a href="https://www.d-wood.com/blog/category/windows/windows-xp">Windows XP</a> (14)</li></ul></li><li class="cat-item cat-item-36"><a href="https://www.d-wood.com/blog/category/wordpress_all">WordPress</a> (103)<ul class='children'><li class="cat-item cat-item-50"><a href="https://www.d-wood.com/blog/category/wordpress_all/vccw">VCCW</a> (10)</li><li class="cat-item cat-item-380"><a href="https://www.d-wood.com/blog/category/wordpress_all/wordpress_general">WordPress General</a> (50)</li><li class="cat-item cat-item-37"><a href="https://www.d-wood.com/blog/category/wordpress_all/wp-plugin">WP Plugin</a> (28)</li><li class="cat-item cat-item-38"><a href="https://www.d-wood.com/blog/category/wordpress_all/wp-plugin-dev">WP Plugin Dev</a> (5)</li><li class="cat-item cat-item-39"><a href="https://www.d-wood.com/blog/category/wordpress_all/wp-theme-dev">WP Theme Dev</a> (10)</li></ul></li><li class="cat-item cat-item-40"><a href="https://www.d-wood.com/blog/category/zend-framework">Zend Framework</a> (61)</li><li class="cat-item cat-item-41"><a href="https://www.d-wood.com/blog/category/info">お知らせ</a> (1)</li><li class="cat-item cat-item-42"><a href="https://www.d-wood.com/blog/category/book-review">書評・読書メモ</a> (4)</li></ul></div><div class="widget"></div></aside></div><footer class="footer"> <address class="copyright">Copyright © d-wood.com</address></footer> <script type="speculationrules">{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wpmt\/wp-*.php","\/wpmt\/wp-admin\/*","\/wpmt\/wp-content\/uploads\/*","\/wpmt\/wp-content\/*","\/wpmt\/wp-content\/plugins\/*","\/wpmt\/wp-content\/themes\/deadwood2\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}</script> <style id='core-block-supports-inline-css' type='text/css'>.wp-container-core-buttons-is-layout-7e5fce0a{justify-content:flex-start;}</style> <script defer id="toc-front-js-extra" src="data:text/javascript;base64,Ci8qIDwhW0NEQVRBWyAqLwp2YXIgdG9jcGx1cyA9IHsidmlzaWJpbGl0eV9zaG93Ijoic2hvdyIsInZpc2liaWxpdHlfaGlkZSI6ImhpZGUiLCJ3aWR0aCI6IkF1dG8ifTsKLyogXV0+ICovCg=="></script> <script defer type="text/javascript" src="https://www.d-wood.com/wpmt/wp-content/plugins/table-of-contents-plus/front.min.js" id="toc-front-js"></script> <script defer type="text/javascript" src="https://www.d-wood.com/wpmt/wp-content/themes/deadwood2/js/app.min.js" id="my-script-js"></script> <script defer type="text/javascript" src="https://www.d-wood.com/wpmt/wp-includes/js/comment-reply.min.js" id="comment-reply-js" data-wp-strategy="async"></script> <script defer type="text/javascript" src="https://www.d-wood.com/wpmt/wp-includes/js/hoverIntent.min.js" id="hoverIntent-js"></script> <script defer type="text/javascript" src="https://www.d-wood.com/wpmt/wp-content/cache/autoptimize/js/autoptimize_single_24d0e1d9a812f96542472198a840bfbc.js" id="megamenu-js"></script> </body></html>