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
Clojureに入門してHTTPサーバーをつくってみた話
Search
Shunsuke Tadokoro
January 31, 2017
Technology
1.1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Clojureに入門してHTTPサーバーをつくってみた話
第十八回 渋谷JavaのLT資料です。
Shunsuke Tadokoro
January 31, 2017
More Decks by Shunsuke Tadokoro
See All by Shunsuke Tadokoro
ある日「Webエンジニアなら、Webサーバーは作れますよね」と言われたら? ~ 3つのJVM言語で作って学ぶ
todokr
2
590
Onboarding Process for Scala Team
todokr
0
2.1k
Running Scala on AWS Lambda in a Snappy Way
todokr
7
4.7k
Scalaでつくる ちょっとしたCLIツール
todokr
0
1.1k
新しいプログラミング言語の学び方 HTTPサーバーを作って学ぶ Java, Scala, Clojure
todokr
29
20k
わかる!Java to Clojure
todokr
6
1.9k
Scala絵文字ライブラリに Macroなどを導入してみた
todokr
0
1.5k
emojiconに行ってきました
todokr
2
840
Scalaリファクタリング入門「大改造!静的ビフォー・アフター」
todokr
3
1.3k
Other Decks in Technology
See All in Technology
Chainlitで作るお手軽チャットUI
ynt0485
0
280
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
170
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
430
ACE-Step-1.5で見る 音楽生成AIのしくみと“破綻だけ直す”Retake機能の開発【zennfes spring 2026 登壇資料】
personabb
1
550
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
9
1.3k
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク ~実装編~
sonic
0
290
2026年6月23日 Syncable Tech + Start Python Club にて
hamukazu
0
140
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
130
生成 AI 実践ガイド (概略版) AIガバナンス編
asei
0
140
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
1
250
水を運ぶ人としてのリーダーシップ
izumii19
1
130
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
190
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
420
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
210
How GitHub (no longer) Works
holman
316
150k
Agile that works and the tools we love
rasmusluckow
331
21k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Ethics towards AI in product and experience design
skipperchong
2
310
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
170
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
HDC tutorial
michielstock
2
720
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Transcript
$MPKVSFʹೖͯ͠ )551αʔόʔΛͭͬͯ͘Έͨ ौ୩+BWB !UPEPLS ָ͘͠
ా ॴ ॣ ༎ ! U P E
P L S w ג ࣜ ձ ࣾ Ϗ ζ Ϧ ʔ ν ελ ϯόΠ ࣄ ۀ ෦ α ʔ ν ί Ξ ν ʔ Ϝ w 4 D B M B M J B O w & N P K J O F F S
4DBMBº&NPKJͳϥΠϒϥϦΛͭ͘Γ·ͨ͠
ΑΖ͓͘͠ئ͍͠·͢
͓ͳ͢͠Δ͜ͱ w ͜ͱͷൃ w ͭͬͨ͘)551αʔόʔʹ͍ͭͯ w )551αʔόʔʁ w ϦΫΤετ͔ΒϨεϙϯε·Ͱ w
·ͱΊ w )551αʔόʔΛͭͬͯ͘ΈͯΑ͔ͬͨ͜ͱ w $MPKVSFʹೖͯ͠Α͔ͬͨ͜ͱ
͜ͱͷൃ
ʮ)551αʔόʔΛ࡞Δձʯ w ࣾͷ༗ࢤʹΑΔϥϯνษڧձ w ʮ8FCΞϓϦͭ͘Γ͍ͨʂʯ ʮͲͷϨϕϧͰͭ͘Δͷʁʯʮαʔόʔ͔Βͭ͘Δͷ͔ʁʯ w 2JJUBɺ4UBDL0WFSqPXFUDݟͪΌͩΊ w ͏ݴޠͷυΩϡϝϯτ3'$ɺଞݴޠͰͷ࣮ݟ͍͍ͯ
w ʮ5̋,*0ܕΤϯδχΞཆॴʯ
ཱ͔ͪͩΔ͍ͭ͘ͷน w ιέοτͬͯͳΜͰ͔͢ʁ ˠάάͬͯిٿ͔͠ग़ͯ͜ͳ͍ w ը૾͕දࣔͰ͖ͳ͍ ˠόΠφϦͳΜ͔ͩΒ0VUQVU4USFBN8SJUFSͬͪΌμϝ w NVMUJQBSUGPSNEBUB ˠCPVOEBSZʢσʔλͷ۠ΓจࣈྻʣΫϥΠΞϯτ͕ܾΊΔ
4DBMB൛4JNQMF)5514FSWFS
ࠓͷ৽ଔࢀՃͯ͠ γʔζϯ
ࣗ࠶$MPKVSFͰͭ͘Δ͜ͱʹ w ϙʔϧɾάϨΞϜʹ᱐͞Εͨ w ʮ&NBDTͬͯΔͷʹ-JTQॻ͍ͨ͜ͱͳ͍ΜͰ͔͢ʁʯͱઞΒΕͨ w ΞϯαΠΫϩϖσΟΞ͕ͳΜ͔͔ͩͬͨ͢͝
IUUQBOTBJLVSPQFEJBPSHXJLJ-*41
IUUQBOTBJLVSPQFEJBPSHXJLJ-*41
IUUQBOTBJLVSPQFEJBPSHXJLJ-*41
ͭͬͨ͘)551αʔόʔʹ͍ͭͯ
None
)551αʔόʔʁ w MPDBMIPTUͷҙͷϙʔτͰػ w 5$1ଓɺ)551ϦΫΤετΛड͚औΔ w )5.-ը૾ͳͲΛ)551Ϩεϙϯεͱͯ͠ฦ͢
ϦΫΤετ͔ΒϨεϙϯε·Ͱ w DPSFDMK w SFRVFTUDMK w SFTQPOTFDMK
DPSFDMK w ΞϓϦέʔγϣϯͷΤϯτϦʔϙΠϯτ w ҙͷϙʔτͰଓΛͪड͚ɺϦΫΤετ͝ͱʹιέοτੜ w ιέοτੜҎ߱ͷॲཧผεϨουͰ࣮ߦ
+BWB $MPKVSF (defn -main [] (let [address (InetSocketAddress. 3000) server-socket
(ServerSocket.)] (.bind server-socket address (int backlog)) (while true (let [socket (.accept server-socket)] ... class SimpleHttpServer { public static void main(String[] args) { InetSocketAddress address = new InetSocketAddress(3000); ServerSocket serverSocket = new ServerSocket(); serverSocket.bind(address); while (true) { Socket socket = serverSocket.accept(); ... ϦΫΤετ͝ͱʹιέοτੜ
SFRVFTUDMK w ιέοτͷ*OQVU4USFBNΛSFBE͠ɺ )551ϦΫΤετͱͯ͠ύʔε w ϦΫΤετͨͩͷ.BQͱͯ͠දݱ
$MPKVSF (let [stream (FileInputStream. file)] (take-while #(not= -1 %) (repeatedly
#(.read readable)))) +BWB InputStream stream = new FileInputStream(file); try { int b = stream.read(); while(b != -1){ // Ωϟετͯ͠ྻʹ٧ΊΔͳͲ } } catch (IOException e) {} *OQVU4USFBNΛ࠷ޙ·ͰSFBE͢Δ
SFTQPOTFDMK w ϦΫΤετΛݩʹɺϑΝΠϧΛόΠτྻ w ιέοτͷ0VUQVU4USFBNʹ)551Ϩεϙϯεͱͯ͠XSJUF
$MPKVSF (str "HTTP/1.1 200 OK" CRLF "Content-Length: " XXX CRLF
"Content-Type: " YYY CRLF) +BWB String resTxt = "HTTP/1.1 200 OK" + CRLF + "Content-Length: " + XXX + CRLF + "Content-Type: " + YYY + CRLF; จࣈྻͷ݁߹
·ͱΊ
)551αʔόʔΛͭ͘Δޮ༻ w Ұ࣍ใʹ͋ͨΕΔΑ͏ʹͳΔ +BWBEPDɺ3'$ɺ&$."ɺFUD w ΠϯλʔωοτͷΈ͕ݟ͑ͯ͘Δ ιέοτɺΧʔωϧɺ5$1ɺ)551ɺFUD ʮेʹൃୡͨ͠ςΫϊϩδຐ๏ͱݟ͚͕͔ͭͳ͍ʯ w ଞͷϛυϧΣΞͷதʹڵຯΛ࣋ͭ
ࠓ%#Λ࡞ͬͯΈ͍ͨ
$MPKVSFʹೖͯ͠Α͔ͬͨ͜ͱ w ؔྗͷ্ ߴ֊ؔແݶϦετɺԆධՁ͕ۙʹ w εϨουϓʔϧΛҙࣝ͢ΔΑ͏ʹ HPͱUISFBEͬͯԿ͕ҧ͏ʁˠछྨಛੑΛؾʹ͢ΔΑ͏ʹͳͬͨ w ঢ়ଶΛͲ͏ѻ͏ʁ00WT$MPKVSFXBZ $MPKVSFͰʮΞΠσϯςΟςΟʯͱʮঢ়ଶʯΛΓ͢
ൺֱ͢Δ͜ͱͰ͓ޓ͍͕ΑΓ໌֬ʹ
IUUQTBZBUPQHJUIVCJPDMPKVSFCFHJOOFS
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ