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
110
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
290
イベントの告知です (PHP Lovers Meetup Vol.0)
chatii
0
140
名付けできない画面を作ってはならない - 名前を付けるとは何か
chatii
1
3.6k
LAMPをこじらせてサーバーレスに乗り遅れたPHPerがLambdaに入門してみる
chatii
2
1.8k
LaraDock がいろいろ参考になった話
chatii
0
160
Other Decks in Technology
See All in Technology
AIがGISを代替する日:〜すべてをAIが創る時代に、私たちがFOSS4Gに関わる意味〜
lehupa
1
220
会社説明資料_最新版
demaecan
0
32k
大江戸Ruby会議でデータベース クライアントの話をするのは 間違っているだろうか
yahonda
1
110
Microsoft Entra Kerberos で実現するクラウド デバイス管理
tamaiyutaro
2
660
狙われているAPIの脆弱性!今こそ手をつけるべき根本的な対策とは?
nagix
0
110
Sizing, Benchmarking and Performance Tuning Apache Flink Clusters
rmetzger
0
150
The future of architectural work
ufried
0
200
HQ駆動開発で最高のAI-Contextを作ろう
sansantech
PRO
1
120
[JAWS Festa 2026]一番いい仕事は、請求書に現れない / jawsfesta2026
sh_fk2
2
440
bpf_arenaとstruct_opsを使うのが難しかった話
masu_mi
0
220
[dbts2026]数十PBの超巨大データ×AI活用を支えるSnowflakeの実力〜大規模環境におけるアーキテクチャと運用のリアル〜
y_matsubara
0
130
属人化したISMS運用をGitHubとAIで仕組み化した1年間の記録
sioncojp
4
2k
Featured
See All Featured
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
470
30 Presentation Tips
portentint
PRO
1
460
GraphQLとの向き合い方2022年版
quramy
50
15k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
460
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
370
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
930
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Code Review Best Practice
trishagee
74
20k
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