<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Vue &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/vue/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Wed, 13 Aug 2025 06:02:54 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>自分の2018年をレビューしてみました</title>
		<link>https://blog.mach3.jp/2018/12/30/review-2018.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Sun, 30 Dec 2018 14:50:42 +0000</pubDate>
				<category><![CDATA[Monologue]]></category>
		<category><![CDATA[2018]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Vue]]></category>
		<category><![CDATA[Work]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=4443</guid>

					<description><![CDATA[2018年も残す所あとわずかとなりましたので、1年間を振り返ってみたいと思います。 Vueの年 Vueを触り始めたのは2017年末だと記憶していますが、今年一年はほとんどVueでしか開発をしない、Vueの年であったと言え [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>2018年も残す所あとわずかとなりましたので、1年間を振り返ってみたいと思います。</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="600" height="338" src="https://blog.mach3.jp/wpapp/wp-content/uploads/2018/12/2018-2019.png" alt="" class="wp-image-4514" srcset="https://blog.mach3.jp/wpapp/wp-content/uploads/2018/12/2018-2019.png 600w, https://blog.mach3.jp/wpapp/wp-content/uploads/2018/12/2018-2019-300x169.png 300w" sizes="(max-width: 600px) 100vw, 600px" /></figure>



<p></p>



<span id="more-4443"></span>



<h2 class="wp-block-heading">Vueの年</h2>



<p>Vueを触り始めたのは2017年末だと記憶していますが、今年一年はほとんどVueでしか開発をしない、Vueの年であったと言えます。Happy Vue Yearってわけですね。HAHAHA</p>



<h3 class="wp-block-heading">Vueは流行っているか</h3>



<p>個人的なプロジェクトでは勿論の事、新規プロジェクトで自分で技術選択が出来ると知るや即Vueをねじ込むといった、ややもすればエゴとも言える姿勢で臨んでいると、別方向から大変ありがたいことにVueプロジェクトの話が降ってきたりしました。</p>



<p>これがシンクロニシティと言われる物なのか、それとも単純にVueが流行っているという事なのかはわかりかねますが、おかげさまではじめは拙かったVueの扱いも手に馴染んで参りました。（一方で相変わらずReactは苦手意識があります。）この導入のし易さがVueの魅力のひとつでありましょう。</p>



<h3 class="wp-block-heading">Vueの何が良い？</h3>



<p>Vueと言えばまずは学習コストの低さがよく挙げられますが、低いと言っても、Vueの書き方やデータバインディングの仕組みや癖など、学ばなければならない事は決して少なくはありません。恐らく競合であり先輩であるReactと比較した上で、そのように評価されているのだと思っています。</p>



<p>それ以上に個人的に推したい点は、コンポーネントデザインという時流に非常にマッチしているという事です。Vueには「単一ファイルコンポーネント」という仕組みがあり、コンポーネントを構成するHTML・JavaScript・CSSを単一のファイルに、コンポーネント毎に書いていけます。</p>



<p>単一ファイルコンポーネントの例 :</p>



<figure class="wp-block-image size-full"><img decoding="async" width="600" height="385" src="https://blog.mach3.jp/wpapp/wp-content/uploads/2018/12/12aec91d3fc807444a56bb0a1c0b9e9f.png" alt="" class="wp-image-4513" srcset="https://blog.mach3.jp/wpapp/wp-content/uploads/2018/12/12aec91d3fc807444a56bb0a1c0b9e9f.png 600w, https://blog.mach3.jp/wpapp/wp-content/uploads/2018/12/12aec91d3fc807444a56bb0a1c0b9e9f-300x193.png 300w" sizes="(max-width: 600px) 100vw, 600px" /></figure>



<p></p>



<p>（公式のサンプルコードをちょっといじっただけの物です。）</p>



<p>コンポーネントの構成要素が1ファイルでカプセル化される事で管理が容易になると同時に、プロジェクトのディレクトリ構成に頭を悩ませる時間を大きく削ってくれることでしょう。また、ファイルの構成がHTMLの構成にほぼほぼ則っているので、初学者にとっても取っつきやすいのではないでしょうか。</p>



<p>ちょっと脇道にそれますが、「単一ファイルコンポーネント」は &#8220;Single File Component&#8221; 略して &#8220;SFC&#8221; と呼ばれる事があります。しかしながら、わたしの年代ではSFCといえばスーパーファミコンですし、わたしの地元ではSFCといえば慶応大学湘南藤沢キャンパスですので、この略称には些か抵抗を感じざるをえません。（極めて個人的な感想です）</p>



<h3 class="wp-block-heading">SVG+Vue+TypeScript に感じるノスタルジー</h3>



<p>もう少しVueの話です。今年の前半にVueでグラフを描画する案件に携わり、描画部分でSVGを使ったのですが、そこでちょっとしたノスタルジーを感じました。また、同じく後半にVueをTypeScriptで書くプロジェクトがあったのですが、そこでも同じ種の感覚が彷彿とされました。</p>



<p>それは、ActionScript3のMovieClipです。<a href="https://blog.mach3.jp/2018/04/11/think-about-clock.html">以前の記事（時間を計測する装置について考えてみる）</a> でも軽く取り上げた話ですが、SVGベースのコンポーネントはMovieClipクラスで部品を作る感覚と非常に類似しています。そこでさらにTypeScriptで <code>const val: SomeClass = new SomeClass()</code> の様な型指定をしはじめると、それはもう完全にソレです。</p>



<p>懐かしさを感じると同時に、インラインSVGベースのコンポーネントに表現の可能性を感じたので、今後積極的に使っていきたいという気持ちになりました。勿論、セマンティックの許す範囲内で。</p>



<h2 class="wp-block-heading">メンターの年</h2>



<p>今年の中盤から12月までにかけて、在る方の技術的なメンターを務めさせていただく機会がありました。<a href="https://www.mach3.jp">松風のサイト</a> で掲載されている様に、以前から個人として教育事業に興味があり、それが小さいながらも実を結んだ形となりました。</p>



<p>Web制作講座としてではなく、明確な目標を達成する為のアドバイスを中心とする、いわゆる「メンター」であったため、カリキュラムなどはなく、都度必要に応じて資料を作成して説明などをしつつ、なんとか年内に目標を達成する事ができました。</p>



<p>生徒さんが抱く疑問点にレスポンシブに対応する事に難しさを覚えつつ、初学者がどこで躓くのかという経験が得られた事、どのタイミングでどの知識が必要になってくるのかという「先読み」の知見が得られた事が収穫であったと言えます。</p>



<h3 class="wp-block-heading">それはそれとして</h3>



<p><a href="https://www.mach3.jp">松風のサイト</a> の情報は古く、未だに横浜市は山手で活動している事になっていますが、現在の拠点は藤沢市です。医者の不養生と言うか灯台下暗しと言うか、2019年早めのリニューアルに向け目下準備中です。</p>



<h2 class="wp-block-heading">リモートワークの年</h2>



<p>2018年はリモートワークでプロジェクトに参画する事が多かった年でした。最も感じたのは、物理的な距離はリモートワークと言えど重要な要素であるという事です。</p>



<h3 class="wp-block-heading">遠方リモートワークの難しさ</h3>



<p>前半は都内のクライアントであったため月次のミーティングなどは直接参加したのですが、後半は遠方のクライアントであったために月一で出張する訳にもいかず、ビデオチャットでの参加となりました。ビデオチャットでのミーティングというのは、難しい物です。その場にいないが故の喋るタイミングの測りづらさ、ほぼ均一に聞こえてくる音声は誰の発言か判断しづらく、また、こちらの音声がちゃんと届いているのかという不安もあります。</p>



<p>ミーティングのみならず実作業においても、実際に物理的に対面したことのない方々とコードを共にしていくというのは何とも表現しようのない難しさがあります。現場の空気が分かっているかどうかが肝なのかもしれません。</p>



<h3 class="wp-block-heading">先んじて顔合わせを</h3>



<p>難しさばかりを書き連ねてしまいましたが、年末に現地に赴いてミーティング参加と少々作業をしたところ、それまで感じていた障壁の様な物が幾分かは払拭出来たように感じました。つまり、遠方のリモートワークに参画する場合は、キックオフの段階で現地で直接話をするのが肝要なのだと思います。きっとその後に続く開発がよりスムーズに進行するでしょう。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>地元藤沢に戻って久しぶりに年間通して過ごしてみたわけですが、なかなかに面白い一年となりました。来年もまた、小さな実をひとつずつ結んでいきたいと思います。</p>



<p>みなさんにとって2018年はどんな年でしたか？ それでは、良いお年を。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SVG Colk Board で Vuex を使ってみた話</title>
		<link>https://blog.mach3.jp/2018/08/06/svgcolkboard-with-vuex.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Sun, 05 Aug 2018 22:39:24 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Illustrator]]></category>
		<category><![CDATA[localStorage]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Vue]]></category>
		<category><![CDATA[Vuex]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=4430</guid>

					<description><![CDATA[先日リリースしたWebアプリ「SVG Colk Board」の紹介と、 その中身の話を少し綴っておきます。 SVG Colk Board を作った話 SVG Colk Board これは何？ Illustrator 上で [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>先日リリースしたWebアプリ「SVG Colk Board」の紹介と、 その中身の話を少し綴っておきます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/Q6wVIsl911oqKE_s8_1B8U7lrpd6z5I6juY0Pm4ZQYCNiBQiTFtX_W0uWzDRU1gLE2PzdDu3PNmiHgrFUqafRIq8mJImNhPFXEb28mhTS4uEzxeD5yUDxiCXUKiPXO7u1W1RxcHUUQ=w1200-h630-no" alt=""/></figure>



<p></p>



<span id="more-4430"></span>



<h2 class="wp-block-heading">SVG Colk Board を作った話</h2>



<p><a href="https://colkboard.netlify.com">SVG Colk Board</a></p>



<h3 class="wp-block-heading">これは何？</h3>



<p>Illustrator 上で図をコピーしてテキストエディタにペーストすると、SVGが出力されます。 しかし、そこで出力されるSVGは不要な記述も多く、末尾に付加されている謎文字のおかげで正常に表示されません。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/dpFNQv8ZK29VeQYJstKNhjaS0fiV3kHAE7el-OW2QO4IvcpSvX5x8KlW8ElqCciEhRn76u6sR2xk0paSmH2-5WisWehSuuqh81yh5XBhN5MVfHqZjoULSQBsk69gO-rYRYBZNKQnUQ=w1200-h480-no" alt=""/></figure>



<p></p>



<p>これらをクリーンに最適化する為に作ったのが SVG Colk Board です。</p>



<h3 class="wp-block-heading">使い方</h3>



<ol class="wp-block-list">
<li>Illustrator上で図をコピーする</li>



<li>それを SVG Colk Board 上でペーストする</li>



<li>配置された図を選択すると「SVG」「DataURI」ボタンが表示される</li>



<li>「SVG」「DataURI」のボタンをクリックすると、それぞれ最適化された結果がクリップボードにコピーされる</li>



<li>結果をテキストエディタにペースト</li>
</ol>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/SUNW2kVI7ky6Odgavh3-g5rTmJ3q--p_cSl6vDjXj-PJt-o9kLKsqfCkUrgz-qvm6Ar0E0v5izvtxxkW7R31t3eMaAFgD1zb25doXOPuU6xqOiCTxKQmsujJO0OF8GMhOy0QHhB8nQ=w1200-h800-no" alt=""/></figure>



<p></p>



<ul class="wp-block-list">
<li>ペーストした図のデータは localStorage に保存されるので、ブラウザを閉じた後も保持されます</li>



<li>つまり貼り付けられる図の数は localStorage の容量依存です</li>



<li>もちろんブラウザをまたいでは保持されません</li>
</ul>



<h2 class="wp-block-heading">SVG Colk Board の中身</h2>



<p>このアプリケーションは <a href="https://jp.vuejs.org/index.html">Vue.js</a> で作られています。 そして Vue と共に利用しているのが <a href="https://vuex.vuejs.org/ja/">Vuex</a> と <a href="https://github.com/robinvdvleuten/vuex-persistedstate">vuex-persistedstate</a> です。</p>



<h3 class="wp-block-heading">Vuex</h3>



<p>ここでは詳しい説明を省きますが、 Vuexとは、中規模以上のアプリケーション開発向けの状態管理ライブラリで、 公式ではこのように説明されています。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Vuex は Vue.js アプリケーションのための 状態管理パターン + ライブラリです。 これは予測可能な方法によってのみ状態の変異を行うというルールを保証し、アプリケーション内の全てのコンポーネントのための集中型のストアとして機能します。<br /><a href="https://vuex.vuejs.org/ja">https://vuex.vuejs.org/ja</a></p>
</blockquote>



<p>簡潔に言うと、状態管理にストア（store）という概念を導入する為のライブラリです。 以下、ものすごくざっくりとした説明をします。</p>



<p>Vue.js のコンポーネントは各々が持つ data の値を基にビューを構築・描画し、必要に応じて処理を行います。 store というのはその data に似た振る舞いをしますが、 data が値へのアクセスで直接変更出来るのに対し、 store はセッターのようなメソッドを介してのみ値を変更する事ができ、 それにより値を保護し、変更を集中管理する事ができます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/dQdUmU0-qeNxQBzUeWfUnx2-eu9AUC5Rx6ZnxT6hkE4yMs0RI2n3AVt2eL0vZzR_Z_KPZBQs3fyimpE6MyN3HvJtt3OOoGbuPXK4BlpCpmJ3wHIJtuuQveiFGPj5MTluMQbgY2doHg=w1200-h800-no" alt=""/></figure>



<p></p>



<p>ざっくりしすぎていてあまりイメージし辛いかと思いますので、下記ページを参考にしてください。</p>



<ul class="wp-block-list">
<li><a href="https://jp.vuejs.org/v2/guide/state-management.html">状態管理 — Vue.js</a></li>
</ul>



<p>先に述べた通り、中規模以上のプロジェクトでなければあまり恩恵にあずかれず、冗長になるだけと感じるかもしれません。 しかし、Vue.js を採用するという事は、ある程度の規模のあるプロジェクトとなる予測が立つとも言えるので、 転ばぬ先の Vuex を問答無用で入れてしまうのも選択肢の一つだと考えられます。</p>



<h3 class="wp-block-heading">vuex-persistedstate</h3>



<p>今回作った様なミニマムなアプリケーションでは正直Vuexは不向きな気がします。 それでもVuexを導入したのは、半分はVuexで習作してみるため、 もう半分はこの <strong>vuex-persistedstate</strong> を使うためです。</p>



<ul class="wp-block-list">
<li><a href="https://github.com/robinvdvleuten/vuex-persistedstate">robinvdvleuten/vuex-persistedstate: <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4be.png" alt="💾" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Persist Vuex state with localStorage.</a></li>
</ul>



<p>vuex-persistedstate は、Vuexのストアの中身（state）をまるっとlocalStorageに保存してくれるプラグインです。 Vuexでストアを書く時にちょっとインポートしてやれば簡単に導入できます。 （下記はREADMEのコードそのままです）</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">import</span> createPersistedState <span class="hljs-keyword">from</span> <span class="hljs-string">"vuex-persistedstate"</span>;

<span class="hljs-keyword">const</span> store = <span class="hljs-keyword">new</span> Vuex.Store({
  <span class="hljs-comment">// ...</span>
  <span class="hljs-attr">plugins</span>: &#91;createPersistedState()]
});
</code></span></pre>


<p>これで（同じブラウザで見る限りは）ページの状態を永続化できるという寸法です。 なんて便利なんでしょうか！</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>もともとはイラレが吐き出すSVGを最適化する事しか考えてなかったのですが、 ちょうどよいお題だと思って Vuex を使って習作してみたというお話でした。 このアプリで使用している netlify の知見も少しずつたまり始めたので、それはまたいずれ。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
