Skip to content

Commit faa518e

Browse files
committed
秋のブログ週間: VueFes登壇レポート
1 parent bba26e6 commit faa518e

7 files changed

+317
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
title: "秋のブログ週間2025 "
3+
date: 2025/10/31 00:00:00
4+
postid: a
5+
tag:
6+
- インデックス
7+
category:
8+
- Culture
9+
thumbnail: /images/2025/20251031a/thumbnail.jpg
10+
author: admin
11+
lede: "秋のブログ週間とは2020年から始まったブログリレーの企画です。元ネタは、秋の読書週間(文化の日を中心とした10/27〜11/9の2週間)です。これに合わせて、平日にブログ記事を投稿していこうというブログリレーなイベントです。"
12+
---
13+
<img src="/images/2025/20251031a/unnamed.jpg" alt="unnamed.jpg" width="1024" height="1024" loading="lazy">
14+
15+
# 秋のブログ週間とは
16+
17+
2020年から始まったブログリレーの企画です。元ネタは、秋の読書週間(文化の日を中心とした10/27〜11/9の2週間)です。これに合わせて、平日にブログ記事を投稿していこうというブログリレーなイベントです。
18+
19+
「春の入門祭り」「夏の自由研究」「秋のブログ週間」「冬のアドベントカレンダー」と四季の名を冠に持つ、フューチャー技術ブログ4大ブログリレーの1つと言われています。
20+
21+
テーマは秋の読書週間のイメージで、普段のソースコードがでてくる技術記事ではなく、ソファーでゆっくり読めるような、読み物(エッセー)よりの記事を書いていこう、としています。元ネタが読書週間ですし、積読消化を進めるための書評記事もOKとしています。気になるタイトルの記事を読んで読書欲を刺激していきましょう。
22+
23+
12月にはお馴染みQiitaさんのアドベントカレンダーにも参加したいと思いますので、秋のブログ週間はちょうどその中間のまったりとした、秋の夜長を楽しむためにも読み物成分を中心として楽しんでいただければです。
24+
25+
2025年はハロウィンの本日から開始することになりました。
26+
27+
| Date | Name | Title |
28+
|---------|--------|--------------------------------------|
29+
| 1週目 | 🎃 | - |
30+
| 10/31 木 | 永井 優斗 | [Vue Fes Japan 2025にてライトニングトークに登壇しました](/articles/20251031b/) |
31+
| 2週目 | 👻 | |
32+
| 11/4 火 | 内堀 航輝 | 新卒1年目で勉強してた時に感じたこと |
33+
| 11/5 水 | 清水 雄一郎 | TBD |
34+
| 11/6 木 | 小橋 昌明 | TBD |
35+
| 11/7 金 | 澁川 喜規 | TBD |
36+
| 3週目 | 🍬 | - |
37+
| 11/10 月 | 大前七奈 | TBD |
38+
39+
40+
いつもはコードが本文に書かれていることも多いフューチャー技術ブログですが、この連載はスマホ片手で読めるような記事成分を高めたいと思います。約2週間、どうぞお付き合いください。
41+
Lines changed: 276 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,276 @@
1+
---
2+
title: "Vue Fes Japan 2025にてライトニングトークに登壇しました&フューチャーアーキテクトがスポンサーをしました"
3+
date: 2025/10/31 00:00:01
4+
postid: b
5+
tag:
6+
- Vue.js
7+
- VueFes
8+
- 登壇レポート
9+
category:
10+
- Programming
11+
thumbnail: /images/2025/20251031b/thumbnail.jpeg
12+
author: 永井優斗
13+
lede: "![KIMG20251025_170540455.jpeg]写真は私の登壇の様子を参加していた別の社員に撮っていただいたものです。FVGの永井優斗です。"
14+
---
15+
16+
<img src="/images/2025/20251031b/KIMG20251025_170540455.jpeg" alt="KIMG20251025_170540455.jpeg" width="1200" height="901" loading="lazy">
17+
18+
写真は私の登壇の様子を参加していた別の社員に撮っていただいたものです。
19+
20+
# 1. はじめに
21+
22+
FVGの永井優斗です。[秋のブログ週間](/articles/20251031a/)1本目です。
23+
24+
2025年10月25日に開催された「Vue Fes Japan 2025」のライトニングトーク(LT)に登壇いたしました。昨年のプラチナスポンサーセッション([昨年の登壇報告記事](/articles/20241128a/)) に続き、2年連続での登壇となります。
25+
26+
今回フューチャーアーキテクト株式会社は、今回ゴールドスポンサーおよびルームネイミングライツスポンサーとして協賛しました。ネーミングライツにより、1つの部屋(トラック)は「経営とITをデザインする フューチャーアーキテクトトラック」として会場内でアナウンスされたほか、`#vuefes_future` のハッシュタグで本トラックの公演内容はX上でポストされました。
27+
28+
『React Nativeならぬ"Vue Native"が実現するかも? 新世代マルチプラットフォーム開発フレームワークの LynxとLynxのVue.js対応を追ってみよう』 というタイトルで、今年3月にOSS化されたばかりのフレームワーク「Lynx」と、そのVue.js対応の動向についてお話ししました。
29+
30+
また、登壇とは別の時間は、私は当日ボランティアスタッフとしても活動しており、ハンズオンの出欠を確認したりしておりました。
31+
32+
# 2. CfP(Call for Proposal)の採択
33+
34+
今回はスポンサーセッションではなく、公募(いわゆる「CfPを通す^[1]」)での登壇です。VueFesでは、CfPのスピーカーの採択は、完全に匿名で応募者の名前を隠したうえで登壇タイトルと詳細をみて判断をしているそうです。その話を聞いて、著名なスピーカーでなくとも、ニッチな話をもっていけば、もしかしたら面白がって採択されるかもな?と思い、ニッチなネタとして3月のLynx公開時からLynxのVue対応のネタを温めていました。
35+
36+
また、私はTSKaigi 2025にも運営スタッフとして参加しています。そのAfter Eventで知り合った[siminoriさん](https://vuefes.jp/2025/speaker/noriyuki-shimizu)と、「(上記のような)Lynxネタを温めており、VueFesのLTに応募をしようと思っている」と話したところ、意気投合し、お互いLTでCfPに応募しようと盛り上がりました。まさか、二人ともLT登壇が決まるとは思わず、スピーカーの紹介がWebサイトに載った時には大変驚きました。
37+
38+
来年はTSKaigiの登壇…かな…!
39+
40+
# 3. 登壇内容と資料
41+
42+
当日の登壇資料はこちらです。
43+
44+
<script defer class="speakerdeck-embed" data-id="2c1a80db76cd4cf291789367a341d9d7" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>
45+
46+
LTなので詳細を語ることを省きつつも、Vueでモバイル開発することへの過去のチャレンジを振り返りつつ、3月発表されたLynxに着目していること、Vue対応の経緯と現状について話しました。
47+
48+
また、VueLynxについては[海外の方によってまとめられた記事](https://www.vuemastery.com/blog/vue-native-vue-lynx/)があるため、自分がこれを発表する意味はなんだろうと考えた結果、自分自身がLynxを触った感想も入れ込みました。それを入れようとおもったがゆえに、9月に[Lynx記事](https://future-architect.github.io/articles/20250902a/)を仕込んだりするわけですが笑
49+
50+
## 4. 当日の様子と反響
51+
52+
昨年に続き、2年連続での登壇、3年連続の参加となりましたが、やはりVue Fes Japanの熱気は格別でした。
53+
毎回思うことですが、”Fes"という言葉が正しいと思えるくらいにお祭り感のある、たのしいカンファレンスでした。
54+
55+
登壇後の反応としては、Lynxそのものを知らなかったという話や、LynxとLynxのVue対応、あれだけ盛り上がってたのにいまは確かにそうでもないなといったコメントをいただきました。
56+
57+
**<X上での反応>**
58+
59+
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Lynx 初聞き<br>2025年3月に出たのね<a href="https://t.co/8OD0OQqLyU">https://t.co/8OD0OQqLyU</a><a href="https://twitter.com/hashtag/vuefes_mates?src=hash&amp;ref_src=twsrc%5Etfw">#vuefes_mates</a></p>&mdash; yuki / ほにゃにゃ (@honyanyas) <a href="https://twitter.com/honyanyas/status/1981996315744842055?ref_src=twsrc%5Etfw">October 25, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
60+
61+
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">確かにLynx出た直後は話題になってたけど、それ以降あんまり話題になってない感じするな<a href="https://twitter.com/hashtag/vuefes?src=hash&amp;ref_src=twsrc%5Etfw">#vuefes</a> <a href="https://twitter.com/hashtag/vuefes_mates?src=hash&amp;ref_src=twsrc%5Etfw">#vuefes_mates</a></p>&mdash; thirdlf (さどるふ) (@thirdlf1) <a href="https://twitter.com/thirdlf1/status/1981996967162249284?ref_src=twsrc%5Etfw">October 25, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
62+
63+
また、自己紹介スライドにあった、BBQインストラクターやパエリア検定上級が気になったと声をかけてくださった人もいました笑
64+
65+
## スポンサーブース
66+
67+
フューチャーアーキテクトは、今回ゴールドスポンサーとしてブースも出展していました。
68+
69+
今回は配布物(ノベルティ)を3種類用意し、くじ引きでどれかが当たる企画を実施しました。1等は最近発売された当社の渋川よしきが著者の1人である[「JavaScript/TypeScript実力強化書―⁠―関数・非同期処理・型システム完全攻略」](https://gihyo.jp/book/2025/978-4-297-15194-2)に渋川のサイン入りでお渡ししました。
70+
71+
くじはVueFesだからと、Vue.jsを使ったHTMLファイルで作成しました。(GeminiさんがHTMLファイル1枚で9割方作成してくれました。生成されるまで30秒くらい。ほんとにすごいね。)
72+
73+
実際には一瞬で抽選処理は終わるんですが、ドキドキ感のある「抽選中」の演出をつけたものを作成しました。
74+
75+
<img src="/images/2025/20251031b/vuefes_lot.gif" alt="vuefes_lot.gif" width="802" height="697" loading="lazy">
76+
77+
<details><summary>くじのソースコードはこちら</summary>
78+
79+
```html vuefeslot.html
80+
<!DOCTYPE html>
81+
<html lang="ja">
82+
<head>
83+
<meta charset="UTF-8">
84+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
85+
<title>くじ引き</title>
86+
<script src="https://unpkg.com/vue@3"></script>
87+
<style>
88+
body {
89+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
90+
display: flex;
91+
justify-content: center;
92+
align-items: center;
93+
min-height: 100vh;
94+
margin: 0;
95+
background-color: #f4f7f9;
96+
}
97+
#app {
98+
text-align: center;
99+
background-color: white;
100+
padding: 30px 40px;
101+
border-radius: 12px;
102+
box-shadow: 0 10px 25px rgba(0,0,0,0.1);
103+
width: 90%;
104+
max-width: 400px;
105+
}
106+
h1 {
107+
color: #333;
108+
margin-bottom: 10px;
109+
}
110+
button {
111+
padding: 15px 35px;
112+
font-size: 1.2em;
113+
font-weight: bold;
114+
cursor: pointer;
115+
border: none;
116+
background: linear-gradient(45deg, #ff8a00, #e52e71);
117+
color: white;
118+
border-radius: 8px;
119+
transition: transform 0.2s, box-shadow 0.2s;
120+
margin: 25px 0;
121+
box-shadow: 0 4px 15px rgba(229, 46, 113, 0.4);
122+
}
123+
button:disabled {
124+
background: #ccc;
125+
cursor: not-allowed;
126+
box-shadow: none;
127+
}
128+
button:hover:not(:disabled) {
129+
transform: translateY(-2px);
130+
box-shadow: 0 6px 20px rgba(229, 46, 113, 0.5);
131+
}
132+
#result {
133+
margin-top: 20px;
134+
font-size: 2em;
135+
font-weight: bold;
136+
color: #e52e71;
137+
height: 60px;
138+
display: flex;
139+
justify-content: center;
140+
align-items: center;
141+
}
142+
.finished-message {
143+
color: #555;
144+
font-weight: bold;
145+
}
146+
.prize-list {
147+
list-style: none;
148+
padding: 0;
149+
margin-top: 25px;
150+
text-align: left;
151+
}
152+
.prize-list li {
153+
margin-bottom: 10px;
154+
font-size: 1.1em;
155+
background-color: #f9f9f9;
156+
padding: 10px;
157+
border-radius: 5px;
158+
}
159+
160+
/* ドキドキ感を出すためのアニメーション */
161+
@keyframes drumroll {
162+
0% { transform: scale(1); opacity: 0.7; }
163+
25% { transform: scale(1.1); opacity: 1; }
164+
50% { transform: scale(1); opacity: 0.7; }
165+
75% { transform: scale(1.1); opacity: 1; }
166+
100% { transform: scale(1); opacity: 0.7; }
167+
}
168+
169+
.drawing-text {
170+
font-size: 1.5em; /* 結果より少し小さく */
171+
color: #555;
172+
animation: drumroll 1.2s infinite;
173+
}
174+
</style>
175+
</head>
176+
<body>
177+
178+
<div id="app">
179+
<h1>🥢Future Architectくじ🥢</h1>
180+
<button @click="startDraw" :disabled="isFinished || isLoading">くじを引く</button>
181+
182+
<div id="result">
183+
<p v-if="isLoading" class="drawing-text">抽選中...</p>
184+
<p v-else-if="result">{{ result }}</p>
185+
</div>
186+
187+
<div v-if="isFinished" class="finished-message">
188+
<p>くじはすべてなくなりました!</p>
189+
</div>
190+
191+
<hr>
192+
193+
<h2>残り本数</h2>
194+
<ul class="prize-list">
195+
<li v-for="prize in prizes" :key="prize.name">
196+
{{ prize.name }}: 残り <strong>{{ prize.stock }}</strong> 本
197+
</li>
198+
</ul>
199+
</div>
200+
201+
<script>
202+
const { createApp, ref, computed } = Vue
203+
204+
createApp({
205+
setup() {
206+
const prizes = ref([
207+
{ name: '🥇 1等', stock: 5 },
208+
{ name: '🥈 2等', stock: 60 },
209+
{ name: '🥉 3等', stock: 100 },
210+
]);
211+
212+
const result = ref('');
213+
// 抽選中かどうかを管理する状態
214+
const isLoading = ref(false);
215+
216+
const totalStock = computed(() => {
217+
return prizes.value.reduce((total, prize) => total + prize.stock, 0);
218+
});
219+
220+
const isFinished = computed(() => totalStock.value === 0);
221+
222+
// くじを引く処理を2段階に分ける
223+
const startDraw = () => {
224+
if (isFinished.value || isLoading.value) return;
225+
226+
isLoading.value = true; // 抽選開始
227+
result.value = ''; // 前回の結果をクリア
228+
229+
// 2500ミリ秒 (2.5秒) 後に結果を出す
230+
setTimeout(() => {
231+
drawLottery();
232+
isLoading.value = false; // 抽選終了
233+
}, 2500);
234+
};
235+
236+
// 実際の抽選ロジック
237+
const drawLottery = () => {
238+
const random = Math.floor(Math.random() * totalStock.value) + 1;
239+
let accumulated = 0;
240+
for (const prize of prizes.value) {
241+
if (prize.stock > 0) {
242+
accumulated += prize.stock;
243+
if (random <= accumulated) {
244+
result.value = `🎉 ${prize.name} 当選! 🎉`;
245+
prize.stock--;
246+
break;
247+
}
248+
}
249+
}
250+
};
251+
252+
return {
253+
prizes,
254+
result,
255+
startDraw,
256+
isFinished,
257+
isLoading // テンプレートで使えるようにする
258+
};
259+
}
260+
}).mount('#app');
261+
</script>
262+
263+
</body>
264+
</html>
265+
```
266+
267+
</details>
268+
269+
ありがたいことに、昨年を大幅に上回る人数の方がスポンサーブースに立ち寄っていただいたこともあり、ノベルティは13時頃にはすべてはけてしまったようです。
270+
それ以降に立ち寄ってくださった皆様、申し訳ございません。
271+
272+
# 5. 最後に
273+
274+
今回のセッションでお話しした「VueLynx」は、まだプロトタイプが公開された段階で、正直なところ、この先どうなるかは分かりませんし、Lynxそのものも、まだ日本語での情報が少ない状況です。登壇資料の最後に書いた通り、本登壇を通じて、実現した時のワクワク感が参加者の皆さんに届き、少しでも盛り上がれば幸いです。
275+
276+
最後になりましたが、このような素晴らしい技術コミュニティの「お祭り」を企画・運営をし、LT登壇の機会をいただきました、Vue.js日本ユーザーグループの皆様、そして当日、LTにご参加いただいた皆様、ありがとうございました。
79.1 KB
Loading
176 KB
Loading
630 KB
Loading
59.9 KB
Loading
237 KB
Loading

0 commit comments

Comments
 (0)