1 of 39

Ma_gician

<Vue にはできないこと色々>

世界中のフロントエンダーの残業時間を減らす、�新しい JavaScript フロントエンドフレームワーク

2 of 39

読み方

Ma_gician 「マジシャン」

3 of 39

どういうもの?

新しいアーキテクチャで作られた

JavaScipt フロントエンド フレームワーク

4 of 39

特徴は?

  • 極端に少ないコード量で動作可能。�
  • 依存モジュールがない。�
  • フルスクラッチで書かれている。

5 of 39

どこで見られるの?

  • アルファ版と正式名称は、�2020年01月25日(土)に公開予定です。

6 of 39

マイルストーン

  • 令和元年:オープンソース化の準備�
  • 令和二年:オープンソース化�
  • 令和五年:GitHub の★数で Vue を超える

7 of 39

コードが減る様子を見てみましょう

8 of 39

Vue.js の実装を Ma_gician で書き替え

1. new Vue が書かれている <script> を削除

2. ライブラリの読み込みを vue から ma_gician に変更

3. <div id="controller"> の > の直前に :: を追加

* Lightning Talk では、ここでライブコーディングします

9 of 39

Vue.js の�リアクティブ

<script src="assets/js/vue"></script>

<div id="controller">

<input v-model="message">

<p>Message = {{ message }}</p>

</div>

<script>

new Vue({

el: '#controller,

data: { message: '' }

})

</script>

10 of 39

Ma_gician の�リアクティブ

<script src="assets/js/ma_gician"></script>

<div ::>

<input v-model="message">

<p>Message = {{ message }}</p>

</div>

11 of 39

<script> を書かない利点

  • 要素に宣言的にリアクティブの指定ができるので、id の採番が不要。�
  • リアクティブ状態の HTML を文字列で localStorage などに保存可能。

12 of 39

結論

  • Ma_gician で実装すると、コード量が減る�
  • コード量が減れば、バグの可能性も減る�
  • バグが減れば、作業時間も減る�
  • 作業時間が減れば、残業時間も減る

Q.E.D.

13 of 39

更に機能紹介

14 of 39

アジェンダ

  • <img> fallback
  • Nested Filter
  • HTML Imports��
  • 無精髭

15 of 39

<img> fallback

16 of 39

<img> のロードに失敗した時

  • ブラウザ標準のエラー表示になってしまう。�
  • エラー時は no-image 画像に差し替えたいという仕様がよくある。

17 of 39

<img>

<section>

<img src=”assets/img/space.jpg”>

<img src=”assets/img/space-xxx.jpg”>

</section>

space-xxx.jpg は無いので

<img> がエラーになる。

18 of 39

<img> の fallback

<section>

<img src=”assets/img/space.jpg”

x-fallback=”assets/img/no-image.gif”

_>

<img src=”assets/img/space-xxx.jpg”

x-fallback=”assets/img/no-image.gif”

_>

</section>

<img> に URL を指定し、

アクティベートする。

19 of 39

よくある質問 (1)

  • 全部の <img> に x-fallback を書くんですか?

20 of 39

<img> の fallback

<section>

<img src=”assets/img/space.jpg” _>

<img src=”assets/img/space-xxx.jpg” _>

</section>

<script src=”assets/js/bo_otstrap.js”></script>

bo_otstrap.js に書けば

全部の <img> に反映。

21 of 39

よくある質問 (2)

  • 全部の <img> に アクティベータを書くんですか?

22 of 39

<img> の fallback

<section _>

<img src=”assets/img/space.jpg” >

<img src=”assets/img/space-xxx.jpg”>

</section>

<script src=”assets/js/bo_otstrap.js”></script>

<img> を囲ってるタグに

_ を付与すれば OK。

追加したコードは 1byte だけになりました。

23 of 39

fallback のまとめ

  • <img> を横断して処理するのは、�Vue.js よりも jQuery の方が向いている。�
  • Ma_gician のアーキテクチャなら�ライブラリ向きの処理でも容易に対応できる。��

24 of 39

つまり

  • Vue.js + jQuery = Ma_gician��

25 of 39

Nested Filter

26 of 39

Vue.js の filter

  • Vue インスタンスに filter 定義を登録する。�
  • Vue インスタンス以外では filter を定義できない。

27 of 39

Ma_gician の filter

  • コントローラ要素に filter を一括定義できる。�
  • 子要素にも filter を定義できる。�
  • 子要素の filter は、その要素の子要素だけに適用される。

28 of 39

Vue.js の�filter

<div id="controller">

<p>{{ price | addUnit }}</p>

</div>

<script>

new Vue({

el: '#controller',

data: { price: 23400 },

filters: {

addUnit: function (price) {

return price + '円'

}

}

})

</script>

Vue インスタンスで�filter を一括定義

29 of 39

Ma_gician の�filter

<div x-state="{ price: 23400 }"

x-filters="{

addUnit (price) { return price + '円' }

}"

::>

<div>

<p>{{ price | addUnit }}</p>

</div>

</div>

:: を付与した要素に�filter を一括定義

30 of 39

Ma_gician の�Nested filters

<div x-state="{ price: 23400 }"

x-filters="{

addUnit (price) { return price + '円' }

}"

::>

<div>

<p>{{ price | addUnit }}</p>

</div>

<div x-filters="{

addUnit (price) { return '$' + price }

}">

<p>{{ price | addUnit }}</p>

</div>

</div>

子要素にも filters を�定義できる

31 of 39

Nested Filters の利点

  • 部分的に例外的な filter を適用できる。�
  • filter のスコープを宣言的に明示できる。

32 of 39

HTML Imports�(Single File Component)

33 of 39

ワイヤーフレーム

<main>

<section>

<h1>

ここにタイトル

</h1>

<div>

ここにユーザ情報

</div>

</section>

</main>

34 of 39

HTML Imports の

適用後

<main>

<section _>

<h1 x-import="title.html">

ここにタイトル

</h1>

<div x-import="user-info.html">

ここにユーザ情報

</div>

</section>

</main>

35 of 39

Ma_gician の HTML Imports

  • ライブコーディングでご紹介。

36 of 39

自己紹介

  • Ma_gician を作った人

名前:Stew Eucen(悉生 游漩)� 読み方: しちゅう ゆうせん

国籍:日本

  • SNS

Twitter: @StewEucen

Facebook: facebook.com/stew.eucen

37 of 39

OSS 活動に向けて

スポンサー募集中です!

38 of 39

Ma_gician が何をしてるのか。

気になる方は、LT 終了後に

最寄りの Stew Eucen まで

お声がけください!

39 of 39

ご静聴ありがとうございました!