はじめに
Ionic
というWebとios
、Android
、Electron
等のネイティブアプリを同じコードで作れるフレームワークのVue.js
対応がα版ながら登場したらしいので、試してみました。
Ionic
を使ったことがないので詳しくは知らないですが、React
でいうところのReact Navive
みたいな感じですかね?
これまではangular
にしか対応していなかったところ、Vue.js
に対応したということで話題に上がっているようです。
参考
Ionic、Vue.jsインテグレーションのαリリースを発表
やってみる
まずはvue-cli
でプロジェクトを作っていきます。
vue create my-ionic-project
> Please pick a preset
default
プロジェクトに移動してionic
のnpmモジュールをインストールします。
cd my-ionic-project
npm install @ionic/vue
プロジェクト内の余計なファイルを消して
rm src/assets/logo.png src/components/HelloWorld.vue
main.js
にionic
のモジュールを読み込む設定を追記します。
import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false
import { Ionic } from '@ionic/vue';
Vue.use(Ionic);
new Vue({
render: h => h(App),
}).$mount('#app')
これでionic
の機能をVue
の中で使えるようになったはずです。
とりあえずボタンをクリックしたらモーダルが出るようにしてみましょう。
App.vue
を以下のように書き換えます。
<template>
<ion-button shape="round" color="primary" fill="outline" @click="showModal">Show Modal</ion-button>
</template>
<script>
export default {
name: 'app',
methods: {
async showModal() {
// ボタンがクリックされたらionicのモーダルを表示
const loading = await this.$ionic.loadingController.create({
spinner: 'hide',
duration: 5000,
message: 'Please wait...',
translucent: true,
cssClass: 'custom-class custom-loading'
});
loading.present();
}
}
}
</script>
<style>
</style>
動作するか見てみます。npm run serve
をしてhttp://localhost:8080
にアクセスしてみましょう。
とりあえずPCブラウザ上でのボタンの表示・動作が確認できました。
が、ローディングのモーダル内のアイコンが表示されていないです。CSSの設定が別途必要なんですかね?
とりあえずドキュメントもまだないですし、雰囲気だけ掴んだので先に進みます。
続いて、これをelectron
でネイティブアプリ化してみます。ビルドにはionic
のcliを使う必要があるらしいので、
npm install -g ionic
ionic init
としてみましたが、Project type
の選択肢にvue
がありません!
ちょっと調べてみると公式GithubのissueのTODOにCreate Project Type
等が挙がっていました。
こちらの記事のWhats Next
にも
While it may still be a bit early for @ionic/vue and there’s a lot more to test before we recommend it for production, we’re happy to roll this out to the community and open it up for your help.
なんで書かれていますし、冷静に考えればまだアルファ版でバージョンも0.0.1
なのでとりあえずコンポーネントを動かせるようになったという段階のようですね。
終わりに
Vue.js
でネイティブアプリを構築するとなるとweex
だったりvue-native
なんかが候補として挙がることが有りましたが、今後はionic
にも期待したいですね。