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
17
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
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
850
システム思考で問題に対処する
yussak
0
340
ブラウザ研修 2026
recruitengineers
PRO
7
1.2k
Digitization部 紹介資料
sansan33
PRO
2
7.7k
PLATEAU で バーチャル花火大会
tatsuya1970
0
170
LLM Internals: 언어 모델의 계보와 알고리즘 진화 (2023~2026)
inureyes
PRO
0
650
Genie Codeハンズオン基礎編
taka_aki
1
130
エンドユーザー視点で見る SansanのMeraki活用と内製自動化
sansantech
PRO
0
110
20260804_Q4AzureUpdateBite_FabricDataAgentの精度を高める設計.pdf
matayuuu
1
150
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
860
35分でわかるEffective Platform Engineering
nwiizo
4
390
FPGAが実現する遠方宇宙の高空間分解能天体撮影 -大型地上望遠鏡の視力を補正する「補償光学」とは?-
komei_mt
0
420
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
350
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
280
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
280
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
940
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
420
Utilizing Notion as your number one productivity tool
mfonobong
4
550
Embracing the Ebb and Flow
colly
88
5.1k
Raft: Consensus for Rubyists
vanstee
141
7.6k
Docker and Python
trallard
47
4.1k
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