Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RFC駆動のPHP学習術 Fukuoka.php edition
Search
Takayuki Fujisawa
October 14, 2020
Programming
450
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RFC駆動のPHP学習術 Fukuoka.php edition
Takayuki Fujisawa
October 14, 2020
More Decks by Takayuki Fujisawa
See All by Takayuki Fujisawa
RFC駆動のPHP学習術.pdf
takayukifujisawa
3
440
PHPのEnum事情
takayukifujisawa
1
770
レガシーなアプリケーションにこそTypeScriptを採用するべきではないかと思ったのでちょっとまとめてみたよっていう話をするスライドです / Legacy code needs TypeScript
takayukifujisawa
1
450
History of JavaScript
takayukifujisawa
1
240
usb_boot_ubuntu
takayukifujisawa
0
260
なぜPHPにはEnumがないのか
takayukifujisawa
0
5.2k
Other Decks in Programming
See All in Programming
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.8k
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
0
360
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
190
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
130
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
120
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.6k
Performance Engineering for Everyone
elenatanasoiu
0
250
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
630
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
210
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
2.5k
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.8k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
760
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
How to make the Groovebox
asonas
2
2.3k
The agentic SEO stack - context over prompts
schlessera
0
840
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
The Curse of the Amulet
leimatthew05
2
13k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
330
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
380
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
200
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Transcript
#fukuokaphp RFC駆動のPHP学習術 - Fukuoka.php Vol.32 Edition - 2020/10/14 Takayuki Fujisawa
#fukuokaphp Takayuki Fujisawa 所属:株式会社ラクス Twitter: @miracle_fjsw 表のおしごと:品質管理やセキュリティ・技術仕様の標準化 裏のおしごと:社内エンジニアの学びの場の創出(勉強会イベントの主催)
#fukuokaphp みなさん PHPの学習って どうやっていますか?
#fukuokaphp - 書籍(はじめてのPHP、パーフェクトPHP、実践 〇〇、オライリー本…) - 技術系のWeb記事
#fukuokaphp こういうことありますよね? • 知識が陳腐化・古くなる • 学習した内容が自分自身に定着しない・曖昧な理解
#fukuokaphp そんなみなさんに紹介したい学習法が
#fukuokaphp 「RFC駆動学習」
#fukuokaphp RFCとは • 「Request For Comments」 • https://wiki.php.net/rfc • PHPの次期バージョンに取り込まれる新機能や改善の提案
• PHPコア開発者のコミュニティの中でメーリングリストなどで 議論・投票が行われ、採択される
#fukuokaphp 例えばこんなやつ https://wiki.php.net/rfc/match_expression_v2 PHP8:match式の提案
#fukuokaphp RFC駆動学習とは
#fukuokaphp RFC駆動学習とは • RFCに記載されている提案内容を理解し、
#fukuokaphp RFC駆動学習とは • RFCに記載されている提案内容を理解し、 記載されている課題感・背景などから
#fukuokaphp RFC駆動学習とは • RFCに記載されている提案内容を理解し、 記載されている課題感・背景などから 言語仕様・PHP界隈の動向への理解を深める、 というオレオレ手法
#fukuokaphp RFCの基本構成 • 提案内容 • 現状のPHPが抱える課題 • 提案の実装例
#fukuokaphp RFCの基本構成 • 提案内容 • 現状のPHPが抱える課題 • 提案の実装例 • ただ読むだけだと
「こんな新機能が増えるのか、なるほど」で終了しちゃう
#fukuokaphp RFCの基本構成 • 提案内容 • 現状のPHPが抱える課題 • 提案の実装例 • ただ読むだけだと
「こんな新機能が増えるのか、なるほど」で終了 RFC駆動学習は、 提案の背景・課題・周辺事項を じっくり理解し、 気付き・発見・学びを獲得 することが目的
#fukuokaphp なぜ RFC?
#fukuokaphp なぜ RFC? • 採用されるRFCは、コミュニティの中で同意を得られたもの
#fukuokaphp なぜ RFC? • 採用されるRFCは、コミュニティの中で同意を得られたもの • = 多くの人が課題を感じているもの、ニーズがあるもの
#fukuokaphp なぜ RFC? • 採用されるRFCは、コミュニティの中で同意を得られたもの • = 多くの人が課題を感じているもの、ニーズがあるもの • = 活用される可能性が高い知識領域
#fukuokaphp なぜ RFC? • 採用されるRFCは、コミュニティの中で同意を得られたもの • = 多くの人が課題を感じているもの、ニーズがあるもの • = 活用される可能性が高い知識領域 •
= 優先して学ぶべき・理解しておくべき領域
#fukuokaphp なぜ RFC? • 採用されるRFCは、コミュニティの中で同意を得られたもの • = 多くの人が課題を感じているもの、ニーズがあるもの • = 活用される可能性が高い知識領域 •
= 優先して学ぶべき・理解しておくべき領域 • ∴ あてもなく学習するよりも、 生きた知識になる確率が高く、効率が良い
#fukuokaphp なぜ RFC? • 提案内容が一つのTopicsとして、過去と未来がまとまっている
#fukuokaphp なぜ RFC? • 提案内容が一つのTopicsとして、過去と未来がまとまっている • 現状把握(過去)しつつ、知識のアップデート(未来)ができる
#fukuokaphp そんなRFC駆動学習について 自身の実例を ダイジェストで紹介します
#fukuokaphp 例1:match式
#fukuokaphp 例1:match式 • swtich文によく似た新しい別の記法 ◦ https://wiki.php.net/rfc/match_expression_v2 • 条件により代入処理を分岐させる際にシンプルに記述できる
#fukuokaphp 例1:match式
#fukuokaphp 例1:match式 switch文は緩い比較を行います。 これは非常に驚くべき結果をもたらす 可能性があります。
#fukuokaphp そうだったのか!
#fukuokaphp 例1:match式(再掲) • swtich文によく似た新しい別の記法 ◦ https://wiki.php.net/rfc/match_expression_v2 • 条件により代入処理を分岐させる際にシンプルに記述できる
#fukuokaphp 例1:match式(再掲) • swtich文によく似た新しい別の記法 ◦ https://wiki.php.net/rfc/match_expression_v2 • 条件により代入処理を分岐させる際にシンプルに記述できる • switch文の条件判定は「緩い比較」が行われているという課題を、理解
していなかった
#fukuokaphp 例1:match式(再掲) • swtich文によく似た新しい別の記法 ◦ https://wiki.php.net/rfc/match_expression_v2 • 条件により代入処理を分岐させる際にシンプルに記述できる • switch文の条件判定は「緩い比較」が行われているという課題を、理解
していなかった • 不十分な理解に対する「そうだったのか!」という「発見」
#fukuokaphp 例1:match式(再掲) • swtich文によく似た新しい別の記法 ◦ https://wiki.php.net/rfc/match_expression_v2 • 条件により代入処理を分岐させる際にシンプルに記述できる • switch文の条件判定は「緩い比較」が行われているという課題を、理解
していなかった • 不十分な理解に対する「そうだったのか!」という「発見」 ◦ 自分自身の抜け漏れを認識 ◦ 「発見」の感覚が鮮明に記憶に残る
#fukuokaphp 例2:JIT
#fukuokaphp 例2:JIT • Just-In-Time Compiler ◦ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ◦ https://wiki.php.net/rfc/jit
#fukuokaphp 例2:JIT • Just-In-Time Compiler ◦ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ◦ https://wiki.php.net/rfc/jit
• 高速化できることは書かれているが、なぜ・何が高速化されるのかは明 記されていない
#fukuokaphp 疑問は調べるチャンス
#fukuokaphp 例2:JIT(調べた結果) • 通常の処理 ◦ ソースコード → OPcode(中間言語)に変換 → ZendVMがネイティブコードに変換(解釈)して実行
#fukuokaphp 例2:JIT(調べた結果) • 通常の処理 ◦ ソースコード → OPcode(中間言語)に変換 → ZendVMがネイティブコードに変換(解釈)して実行
• JIT ◦ ソースコード → OPCodeに変換 → ネイティブコードに変換してキャッシュ ◦ 次にリクエストが来た時、キャッシュされたネイティブコードを実行
#fukuokaphp 例2:JIT(調べた結果) • 通常の処理 ◦ ソースコード → OPcode(中間言語)に変換 → ZendVMがネイティブコードに変換(解釈)して実行
• JIT ◦ ソースコード → OPCodeに変換 → ネイティブコードに変換してキャッシュ ◦ 次にリクエストが来た時、キャッシュされたネイティブコードを実行 ▪ OPcodeを解釈する時間が短縮されるため速い
#fukuokaphp 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識
#fukuokaphp 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識 ◦ PHPのソースコードが実行されるまでのコンパイルの流れ
#fukuokaphp 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識 ◦ PHPのソースコードが実行されるまでのコンパイルの流れ ◦ OPcache … OPCodeをキャッシュして使いまわす仕組み。
JITはOPcacheの拡張版
#fukuokaphp 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識 ◦ PHPのソースコードが実行されるまでのコンパイルの流れ ◦ OPcache … OPCodeをキャッシュして使いまわす仕組み。
JITはOPcacheの拡張版 ◦ Preload … PHP7.4で入ったOPCacheを起動時に作る仕組み
#fukuokaphp 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識 ◦ PHPのソースコードが実行されるまでのコンパイルの流れ ◦ OPcache … OPCodeをキャッシュして使いまわす仕組み。
JITはOPcacheの拡張版 ◦ Preload … PHP7.4で入ったOPCacheを起動時に作る仕組み ◦ JIT使ってもWebアプリケーションは劇的に速くはならないという事 実 ▪ I/Oのボトルネックの方が大きい
#fukuokaphp 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識 ◦ PHPのソースコードが実行されるまでのコンパイルの流れ ◦ OPcache … OPCodeをキャッシュして使いまわす仕組み。
JITはOPcacheの拡張版 ◦ Preload … PHP7.4で入ったOPCacheを起動時に作る仕組み ◦ JIT使ってもWebアプリケーションは劇的に速くはならないという事 実 ▪ I/Oのボトルネックの方が大きい 注:OPCache から JITの話。 素のPHPからOPcacheの導入は、一定効 果あると思います。
#fukuokaphp 例2:JIT(再掲) • Just-In-Time Compiler ◦ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ◦ https://wiki.php.net/rfc/jit
• 高速化できることは書かれているが、なぜ・何が高速化されるのかは明 記されていない
#fukuokaphp 例2:JIT(再掲) • Just-In-Time Compiler ◦ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ◦ https://wiki.php.net/rfc/jit
• 高速化できることは書かれているが、なぜ・何が高速化されるのかは明 記されていない • 理解する行為を通したPHP高速化周辺の一連の知識の 「学び」のトリガー
#fukuokaphp 例3: Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON
#fukuokaphp 例3:Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON • 構文エラーに出力されるトークンが混乱を招くのでやめたい ◦ https://wiki.php.net/rfc/rename-double-colon-token
#fukuokaphp PAAMAYIM NEKUDOTAYIM
#fukuokaphp םייתדוקנ םיימעפ
#fukuokaphp םייתדוקנ םיימעפ (ヘブライ語でダブルコロンの意)
#fukuokaphp 例3:Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON • 構文エラーに出力されるトークンが混乱を招くのでやめたい ◦ https://wiki.php.net/rfc/rename-double-colon-token
#fukuokaphp 例3:Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON • 構文エラーに出力されるトークンが混乱を招くのでやめたい ◦ https://wiki.php.net/rfc/rename-double-colon-token •
PHPコア内部で使用されているこのトークンは初見殺し 「T_DOUBLE_COLON」に変更すべき、という提案
#fukuokaphp 例3:Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON • 構文エラーに出力されるトークンが混乱を招くのでやめたい ◦ https://wiki.php.net/rfc/rename-double-colon-token •
PHPコア内部で使用されているこのトークンは初見殺し 「T_DOUBLE_COLON」に変更すべき、という提案 • この提案そのものは否決された
#fukuokaphp #externals https://externals.io/
#fukuokaphp T_PAAMAYIM_NEKUDOTAYIMについての議論 https://externals.io/message/110728
#fukuokaphp T_PAAMAYIM_NEKUDOTAYIMについての議論 https://externals.io/message/110728 「T_PAAMAYIM_NEKUDOTAYIM」 を 「T_DOUBLE_COLON」 に変えろって言ってるけど
#fukuokaphp T_PAAMAYIM_NEKUDOTAYIMについての議論 https://externals.io/message/110728 そもそもエラーメッセージに 「T_PAAMAYIM_NEKUDOTAYIM」 って表示しなければ良いのでは? ※開発者に必要ない情報だし
#fukuokaphp v7.4 Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM) ↓
v8.0 Parse error: syntax error, unexpected token "::"
#fukuokaphp 例3:Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON • 構文エラーに出力されるトークンが混乱を招くのでやめたい ◦ https://wiki.php.net/rfc/rename-double-colon-token •
PHPコア内部で使用されているこのトークンは初見殺し 「T_DOUBLE_COLON」に変更すべき、という提案 • この提案そのものは否決された
#fukuokaphp 例3:Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON • 構文エラーに出力されるトークンが混乱を招くのでやめたい ◦ https://wiki.php.net/rfc/rename-double-colon-token •
PHPコア内部で使用されているこのトークンは初見殺し 「T_DOUBLE_COLON」に変更すべき、という提案 • この提案そのものは否決された • 「問題の本質」にフォーカスすることの重要性を再認識する というPHPの枠を超えた「気付き」
#fukuokaphp その他にも色々な事例があります (飛ばします)
#fukuokaphp 例4:Saner string to number comparisons (簡潔な文字列と数値の比較)
#fukuokaphp 例4:Saner string to number comparisons • 文字列と数値を緩い比較(==)した時の不思議な振る舞いの是正 ◦ https://wiki.php.net/rfc/string_to_number_comparison
#fukuokaphp 例4:Saner string to number comparisons • 文字列と数値を緩い比較(==)した時の不思議な振る舞いの是正 ◦ https://wiki.php.net/rfc/string_to_number_comparison
#fukuokaphp • RFCに記載されている課題 例4:Saner string to number comparisons ・PHPの世界では緩い比較は常に避けるべき ・けど、in_array()とswitch文ではこの問題に遭遇しちゃう
#fukuokaphp 例4:Saner string to number comparisons(再掲) • 文字列と数値を緩い比較(==)した時の不思議な振る舞いの是正 ◦ https://wiki.php.net/rfc/string_to_number_comparison
#fukuokaphp 例4:Saner string to number comparisons(再掲) • 文字列と数値を緩い比較(==)した時の不思議な振る舞いの是正 ◦ https://wiki.php.net/rfc/string_to_number_comparison
• こちらのRFCはswitch文だけでなくin_array()の課題にも気付かせてく れる一粒で二度おいしい良コスパRFC
#fukuokaphp 例4:Saner string to number comparisons(再掲) • 文字列と数値を緩い比較(==)した時の不思議な振る舞いの是正 ◦ https://wiki.php.net/rfc/string_to_number_comparison
• こちらのRFCはswitch文だけでなくin_array()の課題にも気付かせてく れる一粒で二度おいしい良コスパRFC • ちなみにin_array()は第三引数をtrueにしましょう
#fukuokaphp 例5:Attributes
#fukuokaphp 例5:Attributes • これまでPHPDocに記述していた @before などのアノテーションを、 正式にPHPの言語仕様として記述できるようにするもの ◦ https://wiki.php.net/rfc/attributes_v2 •
自身の幅を広げてくれるナイスなRFC /** * @before ←これが */ public function setupSomeFixtures(){ } ↓ #[before] ←こうなる public function setupSomeFixtures(){ }
#fukuokaphp 例5:Attributes • RFCに記載されている課題 doc-commentsはただの文字列でしかない。 (ライブラリ開発者がアノテーションを実装するには) 追加で文 字列を解析する処理を書かなければならない。
#fukuokaphp PHPUnitのコードを見てみた
#fukuokaphp 例3:Attributes • RFCに記載されている課題 https://github.com/sebastianbergmann/phpunit/blob/master/src/Util/Annotation/DocBlock.php
#fukuokaphp 例3:Attributes • RFCに記載されている課題 _人人人人人人人人人_ > 正 規 表 現 <  ̄Y^Y^Y^Y^Y^Y^Y^Y ̄ https://github.com/sebastianbergmann/phpunit/blob/master/src/Util/Annotation/DocBlock.php
#fukuokaphp 例5:Attributes • おー…確かにゴリゴリ文字列解析してるなぁ…
#fukuokaphp 例5:Attributes • おー…確かにゴリゴリ文字列解析してるなぁ… • と同時に「意外と泥臭い仕組みで実現してるんだな」という親近感
#fukuokaphp 例5:Attributes • おー…確かにゴリゴリ文字列解析してるなぁ… • と同時に「意外と泥臭い仕組みで実現してるんだな」という親近感 • からの「あれ、これオレでも実装できるんじゃね?」という希望
#fukuokaphp 例5:Attributes • おー…確かにゴリゴリ文字列解析してるなぁ… • と同時に「意外と泥臭い仕組みで実現してるんだな」という親近感 • からの「あれ、これオレでも実装できるんじゃね?」という希望 • アノテーションを使って振る舞いを変えるというのは、一部のライブラリ開発者
だけが扱える特殊技能、という先入観がなくなり、自分が開発する際のパター ンの一つに加わった。
#fukuokaphp 例5:Attributes(再掲) • これまでPHPDocに記述していた @before などのアノテーションを、 正式にPHPの言語仕様として記述できるようにするもの ◦ https://wiki.php.net/rfc/attributes_v2 •
自身の幅を広げてくれるナイスなRFC
#fukuokaphp 例5:Attributes(再掲) • これまでPHPDocに記述していた @before などのアノテーションを、 正式にPHPの言語仕様として記述できるようにするもの ◦ https://wiki.php.net/rfc/attributes_v2 •
自身の幅を広げてくれるナイスなRFC • 学習の過程で、自分自身の引き出しが増えるという「気付き」
#fukuokaphp 例6:Weak Reference(v7.4)
#fukuokaphp 例6:Weak Reference(v7.4) • PHPで「弱参照」が使えるようになる ◦ https://wiki.php.net/rfc/weakrefs • 元々PECL拡張としては存在していたものがコアの機能として再提案
#fukuokaphp 「弱参照ってなに?」
#fukuokaphp 例6:Weak Reference(調べた) https://qiita.com/miracle-FJSW/items/f35c3e90a5d14eb6eba3
#fukuokaphp 例6:Weak Reference(v7.4) • PHPで「弱参照」が使えるようになる ◦ https://wiki.php.net/rfc/weakrefs • 元々PECL拡張としては存在していたものがコアの機能として再提案 •
PHPのメモリ管理・GCまわりに詳しくなった • (ちなみに)PHPのGCサイクルは、どれだけメモリ使用しているかに依らず、オ ブジェクトが10,000個作られた時 • JIT同様、RFCをトリガに一連の学びの機会を与えてくれた
#fukuokaphp そんなこんなで RFCには学びや気づきの ポイントがたくさんあります
#fukuokaphp そんなこんなで RFCには学びや気づきの ポイントがたくさんあります 人によって学び・気付きの ポイントは異なると思います
#fukuokaphp RFC駆動学習により • 知識のアップデートが行われる • その過程で、自分自身の知識の抜け漏れが補完される • RFCはPHPerにとって共通課題であることが多く、学び効率が良い • 副次的な効果として、早期にPHPの変更点をキャッチアップできるので、PHP
バージョンアップする際、慌てないで済む
#fukuokaphp RFC駆動学習により • 知識のアップデートが行われる • その過程で、自分自身の知識の抜け漏れが補完される • RFCはPHPerにとって共通課題であることが多く、学び効率が良い • 副次的な効果として、早期にPHPの変更点をキャッチアップできるので、PHP
バージョンアップする際、慌てないで済む • 新機能なのでやってて楽しい、継続できる ◦ べんり!使ってみたい!というポジティブな感情が大事 ◦ 継続できれば学習のトリガは何でも良く、その一つがRFC駆動
#fukuokaphp どうやって始めたらいいでしょう? • PHP RFC Bot(@PHPRFCBot)をフォローする • いいねがそこそこついてるものを重点的にチェック(感覚で30くらい) • Google翻訳を駆使して読んだり、Qiita等の先人の記事を読んだり…
• #externals(https://externals.io/)を覗いてみるのもヨシ • RFCの読み方については、へーしゃの別のエンジニアが語った 資料があるので下記参照 ◦ RFCの歩き方:https://speakerdeck.com/ykanoh/how-to-read-php-rfc
#fukuokaphp RFCは学びの宝庫
#fukuokaphp RFC駆動学習を通じて 自身の抜け漏れを補完しつつ 知識のアップデートをしてみては?
#fukuokaphp ところで
#fukuokaphp 一人でやるのは大変ですよね!(断言)
#fukuokaphp 毎月勉強会をやっていますのでよろしければ… https://rakus.connpass.com/event/192297/
#fukuokaphp 毎月勉強会をやっていますのでよろしければ… https://rakus.connpass.com/event/192297/ おわり!