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
Crystal で実際のウェブサービスは作れるのか?
Search
Pine Mizune
January 22, 2016
Programming
0
780
Crystal で実際のウェブサービスは作れるのか?
『 東京 Crystal 勉強会 #3 in 恵比寿 』 の発表資料
http://crystal.connpass.com/event/22754/
Pine Mizune
January 22, 2016
Tweet
Share
More Decks by Pine Mizune
See All by Pine Mizune
多言語対応と絵文字ジェネレーター / i18n of Emoji Generator
pine
0
850
C++ 製グラフィックライブラリ Skia の紹介 / Introduction to the graphics library Skia written by C++
pine
0
1.9k
asyncio + aiohttp で作るウェブサービス / How to develop a web service with asyncio and aiohttp
pine
0
680
Lerna による明示的疎結合アーキテクチャ
pine
1
660
CircleCI 2.0 x JavaScript
pine
3
560
Perl 卒業式
pine
0
360
Android Studio の気になる warnings を抑制する方法まとめ
pine
0
510
Emoji Generator meets Browser Extensions
pine
1
3k
近年の OSS 開発における CI 選択のベストプラクティス
pine
3
4.5k
Other Decks in Programming
See All in Programming
Gemini for developers
meteatamel
0
100
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
110
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
610
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
380
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
480
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
470
CSC307 Lecture 03
javiergs
PRO
1
490
ぼくの開発環境2026
yuzneri
0
240
24時間止められないシステムを守る-医療ITにおけるランサムウェア対策の実際
koukimiura
1
120
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.2k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
110
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
97
Agile that works and the tools we love
rasmusluckow
331
21k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
250
How to train your dragon (web standard)
notwaldorf
97
6.5k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
920
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
330
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
260
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
Transcript
$SZTUBMͰ࣮ࡍͷ8FC4FSWJDF ࡞ΕΔͷ͔ 'SJ !QJOF
ϓϩϑΟʔϧ • *%)/!QJOF • $SZTUBM+1ӡӦ • DSFOW $SZTUBM7FSTJPO.BOBHFS ࡞ऀ •
झຯͰ࠷͔ۙ͘+BWB4DSJQU$SZTUBM • .PCJMF'BDUPSZ *OD
͡Ίʹ • Πϯετʔϧํ๏ DSFOWCSFXBQUZVNQBDNBOFUD • ެࣜυΩϡϝϯτͷຊޠ༁͕͋Γ·͢ IUUQKBDSZTUBMMBOHPSHEPDT $SZTUBMΛ৮ͬͨ͜ͱແ͍ํ ͜ͷػձʹੋඇΠϯετʔϧΛ
࣍ • $SZTUBMͱ • $SZTUBMपΓͷۙگ • ࣮ࡍʹαʔϏεΛ։ൃͯ͠Έͯ – ࡞ͨ͠αʔϏεʹ͍ͭͯ
– ࣮༻ʹ͑͏Δͷ͔ – ॴײ • ·ͱΊ
$SZTUBMͱ ˓ߴ͍දݱྗ ˓ߴ͍ੜ࢈ੑ º͍ ಉ࣮࣌ݱ Λඪ $ݴޠ 3VCZ ˓ඇৗʹߴ
ºදݱྗ͕͍͠ ºੜ࢈ੑ͕͍
$SZTUBMͱ • 3VCZ෩ͷγϯλοΫε • ܕਪϕʔεͷ੩తݴޠ • ߴͳωΠςΟϒίʔυΛग़ྗ • ΞϧθϯνϯͷManas
Tech 社を中心に OSS で開発 • ࠷৽൛W ݱࡏ
$SZTUBMपΓͷۙگ • Wʹ͚ίϯύΠϥશ໘ॻ͖͠ • ίϯύΠϧͷվળ • ϚΫϩɾܕγεςϜશൠͷमਖ਼ • σϑΝΫτΛࢦͨ͠8"'ͷग़ݱ •
,FNBM JOTQJSFECZ4JOBUSB • 'SPTU JOTQJSFECZ3BJMT
࣮ࡍʹ$SZTUBMͰ αʔϏεΛϦϦʔεͨ͠ αʔϏεհ࣮༻ੑײ
$SZTUBMͰ࡞ͨ͠αʔϏε ґଘϥΠϒϥϦΛՄࢹԽ͢Δ8FC4FSWJDF IUUQTIBSETSPDLT ü όʔδϣϯ͕ݹ͘ͳ͍ͬͯͳ͍͔Ұཡදࣔ ü
શମͷঢ়ଶΛόοδʹͯ͠ϦϙδτϦʹදࣔ ˞ྨࣅαʔϏε
4IBSET3PDLTγεςϜߏ "1*4FSWFS +PC8PSLFS 8PSLFS5BTL 4UBUJD'JMFT GPS+PC2VFVF GPS"OBMZ[FE%BUB 4FSWFS$POPIB
4IBSET3PDLT$SZTUBM֎ͷٕज़બ • ϑϩϯτΤϯυ ü 41"ߏ ü ϑϨʔϜϫʔΫ7VF 1VSFDTT ü ݴޠɾπʔϧ-JWF4DSJQU
-&44 +BEF HVMQ 8FCQBDL • +PC8PSLFS ü (PW ü ύοέʔδཧHPN ü ϥΠϒϥϦHPXPSLFS
࣮༻໘Ͱಛච͢Δ߲ • ґଘཧ4IBSET • 8FCϑϨʔϜϫʔΫ,FNBM • σʔλϕʔε – .Z42-DSZTUBMNZTRM –
3FEJTDSZTUBMSFEJT • δϣϒΩϡʔ • σϓϩΠπʔϧ
ґଘཧTIBSET 4IBSET • ݴޠඪ४ͷύοέʔδϚωʔδϟ • :".-ܗࣜͰTIBSEZNMʹఆٛ • ࠶ؼతʹґଘղܾ •
ґଘύοέʔδ(JUͰμϯϩʔυ • ཱͬͨෆ۩߹ͳ҆͘ఆಈ࡞ "VUIPS ZTCBEEBEFO <$SZTUBM$PMMBCPSBUPS>
name: sharock_api version: 0.1.0 dependencies: kemal: github: sdogruyol/kemal version: ~>
0.7.0 mysql: github: waterlink/crystal-mysql version: ~> 0.4.0 redis: github: stefanwille/crystal-redis version: ~> 1.2.1 pool: github: ysbaddaden/pool version: ~> 0.2.0 resque_client: github: pine613/crystal-resque-client version: 0.1.0 sharock_resolver: github: shardsrocks/sharock-resolver branch: master authors: - Pine Mizune <
[email protected]
> license: MIT TIBSEZNM ґଘఆٛ • ϥΠϒϥϦ໊ • ϦϙδτϦ • όʔδϣϯ
,FNBM • *OTQJSFECZ4JOBUSB • γϯϓϧɾര – ࠷খߏϨεϙϯε࣌ؒЖT • 3PVUJOH8FC4PDLFU+40/αϙʔτ
• 03.4FTTJPOαϙʔτؚ·ͣ "VUIPS TEPHSVZPM ϑϨʔϜϫʔΫ,FNBM
require "kemal" # Dispatcher get "/" do "Hello World!" end
# WebSocket ws "/socket" do |socket| socket.send "Hello from Kemal!" end ,FNBM ˞ެࣜαΠτIUUQLFNBMDSDPN
σʔλϕʔε.Z42- DSZTUBMNZTRM • MJCNZTRMDMJFOUϥούʔ • جຊతͳΫΤϦ࣮ߦ͕Մೳ • /BNFEQMBDFIPMEFSαϙʔτ •
03.Ͱͳ͍ • ଟͷόάܕ҆શͰͳͭ͘Β͍ "VUIPS XBUFSMJOL
DSZTUBMNZTRM def find_one_latest_version(package_id) params = { “package_id” => package_id }
inflate_one ::MySQL::Query .new(%{ SELECT * FROM `package_deps` WHERE `package_id` = :package_id ORDER BY `version` DESC LIMIT 1 }, params) .run(@conn) end ˞4IBSET3PDLTͷ࣮ࡍͷίʔυ
σʔλϕʔε3FEJT DSZTUBMSFEJT • 1VSF$SZTUBM • ര – DSZTUBMSFEJT ίϚϯυඵ
– SFEJTSC ίϚϯυඵ • ͕ඇৗʹߴ͍ "VUIPS TUFGBOXJMMF
require "redis" redis = Redis.new redis.set("foo", "bar") redis.get("foo") redis.rpush("list", "1",
"2", "3") redis.lrange("list", 0, 2) DSZTUBMSFEJT
δϣϒΩϡʔ • 3VCZͰݴ͏3FTRVF4JEFLJR • $SZTUBMͰͷ࣮ແ͍ • 4IBSET3PDLTͰHPXPSLFSΛ༻ ü (PͰͷ3FTRVFޓ࣮ ü
3FTRVFൺഒ4JEFLJRൺഒૣ͍ • HPXPSLFS͔Β$-*ܦ༝Ͱ$SZTUBMݺͼग़͠
σϓϩΠπʔϧ • $SZTUBMͰͷ࣮ແ͍ • ݱࡏଞݴޠͷπʔϧΛ͏ͷ͕٢ ü ྫ$BQJTUSBOP • 4IBSET3PDLT ü
ݱঢ়$*͔Β44) #BTI4DSJQU ü $SZTUBMͷσϑΝΫτͪ
·ͱΊ ݱঢ়ͷ$SZTUBMͷ࣮༻ੑ
·ͱΊ p 1PTJUJWF ü ݴޠɾύοέʔδཧ҆৺ͯ͑͠Δ ü ࣮༻తʹ͑Δஈ֊͕ݟ͖͑ͯͨ p /FHBUJWF ü ࡉ͔ͳϥΠϒϥϦͷ՝
ü ͔Ώ͍ॴʹख͕ಧ࣮͘ɾػೳ͜Ε͔Β ü $SZTUBMͰ࣮ࡍʹӡ༻͞ΕΔ͔൱͔͕ݤ
։ൃࢿۚʹ͝ڠྗΛ IUUQTTBMUCPVOUZTPVSDFDPNUFBNTDSZTUBMMBOH
pO