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
やるのか
Search
chatii
August 19, 2026
Technology
49
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
やるのか
2026-08-19 第190回 PHP勉強会@東京 の登壇資料です
chatii
August 19, 2026
More Decks by chatii
See All by chatii
AWS Lambda で PHP を動かす Bref の布教に来ました。
chatii
0
1.3k
BrefとCDKでライブアップデートしながら開発
chatii
0
280
イベントの告知です (PHP Lovers Meetup Vol.0)
chatii
0
140
名付けできない画面を作ってはならない - 名前を付けるとは何か
chatii
1
3.5k
LAMPをこじらせてサーバーレスに乗り遅れたPHPerがLambdaに入門してみる
chatii
2
1.8k
LaraDock がいろいろ参考になった話
chatii
0
150
Other Decks in Technology
See All in Technology
指示待ちから変化に応じるClaude Codeへ!~環境からAgentへの帰り道を作る~
gotalab555
7
1.5k
Distributed Transactions Under Fire: Building a Zero-Oversell Flash Sale Platform with Amazon Aurora DSQL
yama3133
0
100
EUDIWの枠組みを出発点に民間エコシステムの在り方を考える(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
340
暗号化?某ファイルストレージはどうなるの!? 3rd Partyとうまく付き合う秘密度ラベル設計
kasada
0
210
フィジカルAIの知識ゼロの僕でも AIを使えばここまでできた
tatsuya1970
0
200
8bit CPU 2026
koba789
7
3k
わたしが知り合いゼロの勉強会に 行けるようになるまで
r5ni4
2
830
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
130
「ミスを許さない手順書」を作ってみた 〜 個人的にはこれ以上できることはあまりなさそう/20260827-ssmjp-operation-procedure-update
opelab
12
9k
型落ちシンクライアント端末のPoEモジュールを自作したかった話
logica0419
0
510
Digitization部 紹介資料
sansan33
PRO
2
7.8k
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
500
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
410
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.9k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
530
Discover your Explorer Soul
emna__ayadi
2
1.3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
We Are The Robots
honzajavorek
0
310
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
480
Transcript
「やるのか」 by chatii at PHP勉強会@東京 #190 2026-08-19
ぼくのこと • • • ちゃちい (@chatii) PHPカンファレンス香川 実行委員長 最近は Yarunoka
を作っている
こういう要件、ありますよね • 給料日は毎月 25 日 ◦ • ただし土日祝なら前営業日 資源ごみは第一・第三・第五 土曜日
どうやって対応する?
書けるもの・書けないもの こう書く 人が読めるか 祝日 ただし cron 0 10 25 *
* まあ × 土日祝を避けられない iCal (RRULE) FREQ=MONTHLY; BYMONTHDAY=23,24,25; BYDAY=MO,TU,WE,TH,FR; BYSETPOS=-1 × × 祝日という概念がない 独自実装 if (isHoliday($d)) { ... } (数十行) ◦ ◦ 何でも書ける 全部自分で書く
で、作りました まずはデモアプリを見てもらいます
デモアプリ 🏢 何のシステムか • • • • • • スポットワークの給与振込システム
アルバイトが自分で振込タイミングを選べる 関係するのは銀行の営業日だけ デモ 1 / 経理カレンダー デモ 2 / アルバイトの設定画面 デモ 3 / 振込ルールの編集画面
Yarunoka を作りました スケジュールを書いて・保存して・読むための道具。 さっきのデモは、全部これでできています。
中身は 2 つ Yrnk — スケジュールを書く言語 エンジン — Yrnk を読んで問いに答える実装
JSON で書く。ただのデータなので、DB に入 るし、画面から編集できる。 言語ごとに 1 つ。同じ Yrnk なら、同じ答えを 返す。
エンジンが答えるのは 3 つだけ • • • この日時は予定に入っているか — matches 前回から今までに予定はあったか
— hasMatchIn この期間の予定はいつか — occurrencesIn
しないこと • • • ❌ ジョブを実行しない ❌ state を持たない ❌
次回実行日時を覚えない catch-up も throttling も、呼び出し側が「どう期間を切るか」で表現する。
Yarunoka =「やるのか?」 エンジンが答える問いが、そのまま名前。 ただし線引きがある。エンジン自身は「実行すべきか」を答えない。 • • isDue() は yarunoka/core にない
Laravel ブリッジ側にある 「予定に入っているか」と「だから実行すべきか」は別の問い。後者はアプリの 判断。
Yrnk 内部ではこのJSONで表現しています
分解する • • • days — 軸。何日か、何曜日か、第何曜日か shift — 修飾。選ばれた日を条件に合う日まで動かす
times — 時刻
締めの軸が違うだけ
記述の意味 shift — 三連休の答え • • • 基準日を、条件に合う日まで動かす 連続する非営業日は同じ日に着地して 1
回にまとまる 9/18 (金) 締めのぶんが、9/21〜23 を越えて 9/24 (木) に着地した
記述の意味 or_same — チェックボックスの正体 • • • 省略はデフォルトではない。別の意味 java.time の
next / nextOrSame と同じ区別 間違えると「営業日の月だけ 1 日ずれる」気づきにくいバグ
記述の意味 calendar — 「営業日」は誰が決めるのか schedule は「営業日」という語を使うだけ。中身は持たない。
resolvers — 名前はホストが束ねる 同じ名前を、両側がそれぞれのやり方で束ねる
保存するのはスケジュールだけ • • カレンダーと timezone はアプリの環境。config にある 行ごとに持たせると、休業日を 1 日足すのに全行を書き換えることになる
DSL なので、どの言語でも扱える • • • 言語非依存の仕様書 + JSON Schema エンジンは、その仕様の実装。言語ごとに
1 つ 適合性テストスイートを仕様側が配って、各実装が通す デモでブラウザとサーバが同じ答えを出していたのは、これが理由
いま公開しているもの • PHP — yarunoka/core 1.2.2 ◦ • Laravel —
yarunoka/laravel 1.0.0 ◦ • Eloquent キャスト、バリデーションルール TypeScript — @yarunoka/core 0.3.1 ◦ • 振込日の計算、artisan payouts:show ブラウザ側のプレビュー headless UI — @yarunoka/builder 0.1.2 ◦ 振込ルールの編集画面、アルバイトの設定画面 4 つ全部、さっきのデモで動いています
これから • Python, Java, C# とかあるといいのでは ◦ • Swift, Kotlin
とかあるといいのでは ◦ • 業務系で重宝すると思う ネイティブアプリに内包する 時間軸のあるゲームとか? ◦ 「8月前半」「8月後半」とか表現できそう
まとめ • • • 📐 スケジュールはルール。ルールはデータとして書ける 💾 データにすると、保存でき、表示でき、ユーザーに編集させられる 🔗 仕様を切り出したので、サーバと画面が同じルールを共有できる
ありがとうございました
リンク • • • • 公式サイト — https://yarunoka.dev GitHub —
https://github.com/yarunoka-dev Packagist — https://packagist.org/packages/yarunoka/ npm ◦ ◦ https://www.npmjs.com/package/@yarunoka/core https://www.npmjs.com/package/@yarunoka/builder