Nuxt3+Electronで簡易なアプリを作成してみる

photo of woman writing on tablet computer while using laptop NuxtJS
Photo by Antoni Shkraba on Pexels.com
この記事は約7分で読めます。

心地よい春の季節となりました、一方で私にとっては毎年悩まされる花粉症の時期でもあります。人一倍症状が強いので、きつめの薬を飲んで耐え忍んでいる今日この頃です。しかし、今年はかなりキツめな気がしてます、、一日中鼻がむずむずし、鼻水も止まりません、ティッシュがすぐに尽きてしまう。。なお、環境省からの2019年の全国疫学調査レポートによると、スギの花粉症有病率が10代〜50代で45%以上、60代で30%程度とあり(参考リンク)、日本の労働者の3割以上がこの時期に花粉症で思考が鈍ってしまったり薬の作用でぼーっとしたりしているのかと思うと経済への影響も無視できないなという気がしています。(ただこれを機会と見ると大きな市場といえるかも。日本の人口推計データの参考:10〜69歳は8,000万人 ー人口推計 – 2023年(令和5年) 3 月 報 -)

さて、今回はWeb技術でデスクトップアプリケーションを作成できるフレームワークであるElectronでnuxt3を使った簡単なアプリケーションを作ってみたいと思います。Nuxt3の開発のしやすさをそのままElectronでの開発で活かせるのでいい感じです。本記事でのゴールは、EC2のインスタンスを起動及び停止する簡単なアプリケーションとしたいと思います。

ゴールのイメージ

EC2のインスタンスIDを設定して、インスタンスの起動や停止、状態を取得するだけの簡単なアプリケーションです。「開発目的等で頻繁に利用するインスタンスをAWSコンソールにログインすることなくGUIでサクッと操作できる」というところがベネフィットになります。

環境

  • macOS Catalina (intel cpu)
  • nuxt 3.3.2
  • vuetify 3.1.8 
  • electron-builder 23.6.0 os19.6.0
  • Node.js 16.19.1

nuxtプロジェクトの作成

ここでは、プロジェクトトップの見通しを良くするため、nuxtのclientディレクトリ 一式をsrcディレクトリ下に移動することとします。

nuxt.config.tsでsrcの場所を指定します。

nuxt-electronのセットアップ

nuxtのelectronモジュールを使用します。以下のとおりnuxt-electronをインストールします。

続いてnuxt.config.tsでモジュールのロードを指定します。

nuxt.config.ts

次にelectron/main.tsというファイルを作成します。今回は、nuxt-electronのexampleソースを参考にします。ライセンスも併記しておきます。

electron/main.ts

package.json

最後にpackage.jsonにエントリーポイントを追加します。

veutify3のセットアップ

以下のページを参考にvuetify3をセットアップします。

Nuxt 3 で Vuetify 3 を使う

今回のセットアップ後のソースは以下のようになります。

src/plugins/vuetify.ts

nuxt.config.ts

vuetifyのcssスタイル読み込み等を設定します。

src/assets/css/main.scss

プリロードスクリプト

electronでは、レンダラープロセスというコンテキストでプログラムが実行されます。そして、このコンテキストではプログラムの安全性確保のため通常Node.jsのAPIにアクセスしたりできないようサンドボックス化されています。そこで、レンダラープロセスからそのような特権APIを呼び出すためにプリロードという仕組みが用意されています。プリロード経由でレンダラープロセスにAPIを公開することで、安全に特権APIを呼ベるようになります。

今回はawsのプロファイルを読み書きをするための機能を実装する目的で以下のようにプリロードスクリプトを作成します。

electron/preload.ts

window.apiというネームスペースでレンダラープロセスからAPIを呼ベるようにします。

src/@types/global.d.ts

コンポーネントからwindow.api.xxxxという指定で呼べるようにtypeを定義します。

electron/main.ts

レンダラープロセスからAPIを呼び出せるように実体を定義します。

参考 https://www.electronjs.org/ja/docs/latest/tutorial/tutorial-preload

アプリケーションの作成

aws-sdkのv3をインストールします。v3では、ソースがTypeScriptベースで再構築されており、またクライアントがサービスごとに独立したモジュール構造になっているようです。

aws-sdk v3のインストール (EC2クライアント)

今回は、EC2クライアントを使用するため以下のようにしてクライアントをインストールします。

コンポーネントの作成

src/app.vue

src/layouts/default.vue

src/pages/index.vue

ただコンポーネントを表示するだけとします。

src/components/AwsEc2ControlPanel.vue

長いですがやっていることは、awsのec2の起動・停止・情報取得及び設定ファイルの読み書きです。

aws-sdk v3のクライアントは、以下のようにクライアントオブジェクトの初期化時にregioncredentialsを渡すようなインターフェースになっています。また、起動や停止など呼び出すコマンドに対して各コマンド用のクラスが用意されており、コマンド実行はコマンドオブジェクトを作成してクライアントのsendメソッドに渡すことで実行されるような形になっています。詳細は、公式のドキュメントを参考にしてください。

参考 https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-ec2/

ビルド+実行

package.jsonを以下のように修正しておきます。

package.json

以下のコマンドで実行します。

ビルドに成功すると、releaseの下にアプリケーションバイナリが生成されます。

アプリケーションをクリックしてみましょう、以下のようなアプリケーションの画面が表示されるはず。

設定編集画面で設定を入力して保存します。

インスタンス情報を取得してみます。

上手く取得できているようです!

おわりに

nuxt3とelectronの組み合わせでAWSのEC2を操作するだけの簡単なデスクトップアプリケーションを作成してみました。electronの作法については別途学ぶ必要がありますが、nuxt3の開発の良さをそのままelectronで活かせるのが嬉しいですね。最近は、electron以外にOSのwebブラウザを利用するものであったり、Node.jsでなくdenoを使うものであったりと色々と進化しているようです。VSCodeやSlackアプリなどもelectronで作成されており、しっかりしたアプリケーションを作成する候補としてelectronを学んでおくのは良いのではないでしょうか。

今回のサンプル

githubにアップロードしておきました。

GitHub - moritetu/nuxt3-electron-template: nuxt3 electron template with vuetify
nuxt3 electron template with vuetify. Contribute to moritetu/nuxt3-electron-template development by creating an account ...

その他

誤記や間違いがあれば教えてください。

参考リンク

コメント

タイトルとURLをコピーしました