tag:crieit.net,2005:https://crieit.net/tags/Vite/feed 「Vite」の記事 - Crieit Crieitでタグ「Vite」に投稿された最近の記事 2024-04-16T23:38:37+09:00 https://crieit.net/tags/Vite/feed tag:crieit.net,2005:PublicArticle/18812 2024-04-16T23:38:37+09:00 2024-04-16T23:38:37+09:00 https://crieit.net/posts/JS-Google-Apps-Script-vite 【JS】Google Apps Scriptのコードをviteでバンドルする <p>こんにちは、しきゆらです。<br /> 今回は、Google Apps Script(GAS)をViteでビルドしてclaspでプッシュする環境を作っていきます。<br /> ・・・久々のプログラム関連の記事な気がする。</p> <p>個人的に、GASのコードをローカルで書き、JSのバンドラー?ビルダー?を使ってビルドしてclaspでアップロードする、というのがGASを書く上でのお作法だと思っています。</p> <p>claspに関しては、こちらをご覧ください。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/google/clasp">GitHub - google/clasp: 🔗 Command Line Apps Script Projects https://github.com/google/clasp</a></p> <p>ビルドツールも様々あります。<br /> Webpackやparcel、esbuildなどいろいろあるうえに、時代によって流行り廃りが速いのであまり追い切れてません。<br /> ビルドツールについてはいかがいろいろまとまっててよさそう。</p> <p><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/nakaakist/articles/86457bf2908379">JavaScriptビルドツールの整理 各ツールの機能と依存関係</a><br /> <a target="_blank" rel="nofollow noopener" href="https://zenn.dev/mizchi/articles/native-esm-age">Native ESM 時代のフロントエンドビルドツールの動向</a></p> <p>また、過去のツールの流行り廃りは以下あたりが参考になるかと。</p> <p><a target="_blank" rel="nofollow noopener" href="https://stateofjs.com/en-US">State of JavaScript</a></p> <p>ということで、いろいろあるわけですが<br /> 今回は、tauriでちょっと使って動作が速かったviteを使ってGASをビルドする環境を作ってみようと思います。</p> <p><a target="_blank" rel="nofollow noopener" href="https://ja.vitejs.dev/">Vite | 次世代フロントエンドツール</a></p> <p>Tauriを触ったときの記事はこの辺をご覧ください。</p> <p><a target="_blank" rel="nofollow noopener" href="https://shikiyura.com/2023/08/create_simple_app_with_tauri/">【Rust】Tauriで簡易的なアプリを作ってみる</a></p> <p>今回、調べてみるとviteを使ってGASを書く記事はHTMLを作ってWebアプリとしての環境構築ばかりでした。<br /> 欲しいのはJSやTSをビルドするだけの環境です。<br /> 色々調べているとviteの裏側にあるRollupのプラグインでGAS向けのものがあったのでこれを使ってみます。</p> <h2 id="環境構築"><a href="#%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89">環境構築</a></h2> <p>適当なフォルダで以下のツールをインストール。<br /> ここではyarn(v4.1.1)を使ってインストールしていますが、他のツールを使っている場合も同じような感じかと思うので読み替えていただければと。</p> <p><code>yarn add clasp vite rollup-plugin-google-apps-script</code></p> <p>それぞれのリポジトリをいかにおいておきます。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/google/clasp">GitHub - google/clasp: 🔗 Command Line Apps Script Projects</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/vitejs/vite">GitHub - vitejs/vite: Next generation frontend tooling. It's fast!</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/mato533/rollup-plugin-gas#readme">GitHub - mato533/rollup-plugin-gas: Rollup plugin for Google Apps Script. This plugin supports local development of applications that run on Google Apps Script.</a></p> <h2 id="vite/rollupの設定"><a href="#vite%2Frollup%E3%81%AE%E8%A8%AD%E5%AE%9A">vite/rollupの設定</a></h2> <p>viteは設定ファイルが必要です。<br /> しかし、必要なものは以下に参考としてあるので、これをもとにちょっと手直しします。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/mato533/rollup-plugin-gas?tab=readme-ov-file#vite">GitHub - mato533/rollup-plugin-gas: Rollup plugin for Google Apps Script. This plugin supports local development of applications that run on Google Apps Script.</a></p> <pre><code class="javascript">// vite.config.js import { defineConfig } from "vite"; import rollupPluginGas from "rollup-plugin-google-apps-script"; import path from "path"; export default defineConfig({ plugins: [rollupPluginGas()], build: { rollupOptions: { input: "src/main.js", output: { dir: "dist", entryFileNames: "main.js", }, }, minify: false, // trueにすると関数名が消えるのでfalse必須 }, resolve: { alias: { "@": path.resolve(__dirname, "./src"), }, }, }); </code></pre> <p>ここでは<code>src/main.js</code>というファイルを作り、これを<code>dist/main.js</code>へビルドする形を作っていきます。</p> <h2 id="GASのコードを書く"><a href="#GAS%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F">GASのコードを書く</a></h2> <p>では、<code>src/main.js</code>へ適当なコードを書きます。<br /> 単一ファイルだけでなく、せっかくなので分割してimportする形で書いてみます。</p> <pre><code class="javascript">// src/main.js import parts from "./parts"; const greet = () => { Logger.log("hello"); }; global.greet = greet; global.parts = parts; </code></pre> <pre><code class="javascript">// src/parts.js export default parts = () => { Logger.log("parts"); }; </code></pre> <p>では、ビルドします。<br /> ビルドは以下のコマンドでできます。</p> <p><code>yarn run vite build</code></p> <p>ビルドすると以下のようなコードが吐き出されるはず。</p> <pre><code class="javascript">// dist/main.js var global = this; function greet() { } ; function parts() { } ; (function(factory) { typeof define === "function" && define.amd ? define(factory) : factory(); })(function() { "use strict"; const parts$1 = parts = () => { Logger.log("parts"); }; const greet2 = () => { Logger.log("hello"); }; global.greet = greet2; global.parts = parts$1; }); </code></pre> <p>では、コードをGASへアップしましょう。</p> <h2 id="Google Apps Scriptへプッシュする"><a href="#Google+Apps+Script%E3%81%B8%E3%83%97%E3%83%83%E3%82%B7%E3%83%A5%E3%81%99%E3%82%8B">Google Apps Scriptへプッシュする</a></h2> <p>まずは、claspからログインしましょう。<br /> 以下のコマンドを実行すると、ブラウザが立ち上がるので、画面に従ってGoogleアカウントへログインしましょう。</p> <p><code>clasp login</code></p> <p>ログイン後、以下のコマンドでApps Scriptを作成します。 なお、すでに作成済みの場合は場合はcloneでもよいです。</p> <pre><code class="bash">> clasp create ? Create which script? standalon reated new standalone script: <https://script.google.com/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit> Warning: files in subfolder are not accounted for unless you set a '/path/to/project/.claspignore' file. Cloned 1 file. └─ /path/to/project/appsscript.json </code></pre> <p><code>clasp create</code>を実行するとどんなスクリプトか聞かれるので、今回はstandaloneを指定してます。</p> <p>完了すると、URLが表示されます。<br /> これを開くと、作成されたApps Scriptへアクセスできます。<br /> また、<code>clasp open</code>でも開けます。</p> <p>そして、<code>appsscript.json</code>、<code>.clasp.json</code>の2ファイルが生成されます。<br /> <code>.clasp.json</code>ファイルを開き、rootDirを<code>vite.config.js</code>で設定したdistフォルダを指定します。</p> <p><code>// .clasp.json { "scriptId":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "rootDir":"/path/to/project/dist" }</code></p> <p>そして、<code>appsscript.json</code>ファイルをdistフォルダへコピーします。</p> <p>では、<code>clasp push</code>でコードをApps Scriptへアップロードします。</p> <p><code>clasp push</code></p> <p>Apps Scriptを開くと、以下のようにコードが反映されているはずです。<br /> では、関数名を指定して実行ボタンを押して動作確認しましょう。<br /> <a href="https://crieit.now.sh/upload_images/7a5da27598b0ac7c7bde3fb86338c228661e8d0c5f2ec.webp" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7a5da27598b0ac7c7bde3fb86338c228661e8d0c5f2ec.webp?mw=700" alt="Untitled_result.webp" /></a></p> <p>greetを実行すると以下のように表示されるはずです。<br /> <a href="https://crieit.now.sh/upload_images/c069e96e53f499d91294f7f327e3c24f661e8d1ce2c95.webp" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c069e96e53f499d91294f7f327e3c24f661e8d1ce2c95.webp?mw=700" alt="Untitled2_result.webp" /></a></p> <p>はい、これにてviteでGASを書くための環境ができました。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>今回はローカルでGASを書くためviteでビルドする環境を作ってみました。<br /> viteは裏側がrollupであり、プラグインもrollupのものが使えるようなので、プラグインを見てから判断してもよいかもしれません。</p> <p><a target="_blank" rel="nofollow noopener" href="https://ja.vitejs.dev/plugins/">プラグイン | Vite https://ja.vitejs.dev/plugins/</a></p> <p>今回は、ここまで。</p> <p>おわり</p> しきゆら