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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Shinobu Hayashi
October 27, 2021
Programming
580
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ブラウザ作りのすゝめ
ブラウザ作りはいいぞ!という話
Shinobu Hayashi
October 27, 2021
More Decks by Shinobu Hayashi
See All by Shinobu Hayashi
AI フレンドリーなエラー監視を TypeScript で実現する
shinyaigeek
2
330
巨大モジュラーモノリスのテスト戦略.pdf
shinyaigeek
0
97
ESLint Rule により事業, 技術ドメインに沿った制約と誓約を敷衍させるアプローチのすゝめ
shinyaigeek
1
6k
Big “heart” of mud, 10000 lines VCL generated from .vcl.handlebars
shinyaigeek
0
320
Managing "side effect" in Frontend Development
shinyaigeek
3
4.1k
爆速の日経電子版開発の今
shinyaigeek
3
3.3k
加速するEdge Computing
shinyaigeek
6
7.1k
ASTをいじいじして僕のかんがえた最強のDXを得る
shinyaigeek
0
500
フロントエンド
shinyaigeek
0
230
Other Decks in Programming
See All in Programming
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
200
OS アップデート対応の取り組み方がもっと共有されてほしい
andpad
0
110
スマートグラスで並列バイブコーディング
hyshu
0
280
act1-costs.pdf
sumedhbala
0
200
フィードバックで育てるAI開発
kotaminato
1
110
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.8k
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
0
170
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
240
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2k
自作OSでスライド発表する
uyuki234
1
3.7k
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
530
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
480
Featured
See All Featured
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
340
We Are The Robots
honzajavorek
0
270
Visualization
eitanlees
152
17k
The SEO Collaboration Effect
kristinabergwall1
1
500
Building Adaptive Systems
keathley
44
3.1k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
760
The browser strikes back
jonoalderson
0
1.4k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
220
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Fireside Chat
paigeccino
42
4k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
310
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Transcript
ブラウザ作りのすゝめ @Shinyaigeek/Shinobu Hayashi
Who am I • Shinobu Hayashi • GitHub & Twitter:
@Shinyaigeek • vs 卒論 🔥 • 4月から某メディア企業でWebをやります👶 • 💕 : 🎯 🍻 🍣 🕸
イベント参加前夜... という無茶振りがきた ...
自作ブラウザ Shinyaic についての 話をします
Agenda 🗒 1. ブラウザの仕組み(簡略な) 🤓 2. 実装方法 🤖 3. 参考リンク集
(後で資料もツイートします) 📕 4. Shinyaic Browserの実装状況 ⏩ 5. ブラウザを作る楽しさ 🔥
ブラウザの仕組み(概略図)(実際にはもう少し細かい)
実装方法 (HTML Parser) • HTML ファイルから DOM を構築する • 丁寧に行うのであれば
◦ 1文字 (Character) ずつ解析して Token に落とし込む(開始タグ, 閉じタグ, self closing tag, text, attribute key, etc…) ◦ それをもとにDOMを構築していく • Shinyaicでは簡単に ◦ < から始まったら開始タグとして処理 ▪ まずattributesをタグが閉じられるまで処理する ▪ そのタグの子を再帰的に parseしていく • といった実装になっています
実装方法 (CSSOM) • まず #id1 や p , .class1 といった
selector をparseする ◦ pseudu elementsやcombinatorにも配慮が必要 • selectorのparseが終わり { にぶつかるとそのブロックの parseにはいる • ブロック内のparseでは, key: value; とし処理していく • @以下のメディアクエリも処理する
実装方法 (RenderTreeの構築) • DOM と CSSOM によって RenderTree を構築する •
RenderTree はその名の通り, 矩形情報を算出する処理や , 描画する処理に必要な情報が入る Nodeで構 成されるTree <-> Document OM Tree • display: none; が付与されている要素や, <head />, <meta />は描画されないのでRenderTreeに含まれ ない • <div /> か <p /> かといった情報も省き, 内部表現としてInline Node, Block Node, Text Node, Scroll Node, Document, Nodeとして表現した • どのNodeにどのstyleが割り当てられるかも計算する • Useragent Stylesheetの反映などもここで行った
実装方法 (RenderTreeの構築) • どのDOM Nodeにどのstyleが割り当てられるか というアルゴリズムは思っていた以上に大変だっ た • 最初シンプルに作るなら, 結合子のことは考えずに
シンプルなセレクターにのみ対応するのがいいか も
実装方法(Layout) • RenderTreeを元に, そのNodeの種類やstyleによって矩形情報を計算する ◦ 例えばinline, blockかで幅や並びの計算は変わってくる ◦ Blockだとまずwidth, 次に位置,次に再帰的に子要素を計算し子要素から高さを割り出す
• テキストがこのフォントで描画された時高さがどうなるかなどの計算も必要 • paddingやwidthなど割り当てられたstyleがあればそれを元に計算する
実装方法(paint) • ここでlayoutした情報をもとに実際に描画する • iced という描画エンジンを利用 • styleから色味やフォントを描画エンジン向けの表現にする
参考にしたリンク集 • How Browsers Work: Behind the scenes of modern
web browsers : ブラウザの仕組みが細かく解説 されている • lmt-swallow/puppy-browser :セキュキャンの資料に作られたブラウザ . 知る限り最もシンプルで読みや すい. • ブラウザレンダリングの仕組み :日本語資料でわかりやすい • W3C/WHATWG: 実際に実装する際にはここを読んでいく ◦ MDNをリンク集として、まず MDNで調べる箇所を調べてジャンプするとわかりやすい ◦ TC39って何?W3Cって何?ってなる人は Web技術の調査方法 を読むといいかも
Shinyaic の進捗 • example.com を表示できるようになった • HTTP通信には, 自作HTTP Clientの konnnyakuを利用している
◦ TCPの上から実装した ◦ TLSについてはnative-tlsを利用 • JSはほぼ進捗がない ◦ とりあえずJS -> bytecodeにして, bytecodeを実行する部分を学生の うちに作ってしまいたい ◦ なのでWeb APIもまだ • HTML, CSSについても足りない部分はま だ多い
ブラウザを作る楽しさ • 仕様を読んでいくモチベーションにつながる • Webフロントエンドをやるだけではなかなか身につかない知識もついていく ◦ 通信プロトコル ◦ 描画エンジン •
仕様の量は膨大なため, そう簡単には終わらない, なので盆栽の気分で一生楽しめる趣味 • 使うだけではなく実際に作ることでブラウザの内部についてより身近に詳しく知れる • 既存のブラウザは凄い😇 • みんなもブラウザ, 作ろうや....
❌ 早く雑に作る ⭕ 早く小さく作る • このような完全に趣味に振り切ったような個人開発であっても , 成果は大事 ◦ モチベーションに繋がる
🔥 ◦ 正直苦行かと聞かれると苦行なのでモチベーションがないとなかなか続かない • 早く成果を出すために, テストを書くことをサボる, するべき抽象化をしない, 設計をちゃんと考えないといっ た, 雑に作ることをしていてはいつか破綻する ◦ ブラウザ作りは時間がかかるので , 早く成果を出すことと長く続けることを意識する • 早く作るために雑に作るのではなく , 早く作るために小さく作る ◦ まずHTMLをparseするところからしよう , まずは <body><p>hoge</p></body>をparseできるように, 次に attributeあってもparseできるように.... ◦ RenderTreeの構築をしたいけど , CSSとNodeのマッチングは難しそうなので一回単純なセレクターのみに対して マッチングできるようにしよう ...
当たり前のことを当たり前にする(仕 様に従えば)当たり前に動く
ご静聴有難うございました