Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
やるのか
Search
chatii
August 19, 2026
Technology
99
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.6k
LAMPをこじらせてサーバーレスに乗り遅れたPHPerがLambdaに入門してみる
chatii
2
1.8k
LaraDock がいろいろ参考になった話
chatii
0
150
Other Decks in Technology
See All in Technology
【Findyテック文化祭ワークショップ】新卒エンジニア&採用担当と作る、 なりたい姿と今やるべき一歩
dip_tech
PRO
0
140
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
580
Datadog で始める トークンセーフティなAI 導⼊と定着
vkbaba
1
120
AI駆動開発で仕様はどこまで書くべきか? ― 人とAIの責務境界から考える開発プロセスの実践
takahiromatsui
1
200
ボードゲームの遊び相手をFoundation Modelsで作る / iOSDC Japan 2026
genda
0
220
音声コミュニティを守るAI監視基盤_ 90%以上の入力削減を支えたServerless設計と運用判断
shuheioka123
0
110
ScotSecure West 2026 - Glasgow
raybugg
0
200
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
4
760
Making AI Agents Safe and Fast- Jev, Obsidian, and the Meta-Harness
x5gtrn
PRO
0
160
あなたの知らないAmazon VPC Route Server/Amazon VPC Route Server you don't know about
masakiokuda
0
110
なぜAI任せのゲームは面白くならないのか?
hirohasuyoutube
0
250
営業オントロジーの作り方と、エージェントからの辿り方 ── ナレッジワークの現場から
kworkdev
PRO
1
180
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
460
Side Projects
sachag
456
43k
A Modern Web Designer's Workflow
chriscoyier
699
190k
For a Future-Friendly Web
brad_frost
183
10k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
340
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
440
Believing is Seeing
oripsolob
1
230
How Software Deployment tools have changed in the past 20 years
geshan
2
34k
Designing for Timeless Needs
cassininazir
1
510
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