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
770
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
780
C++ 製グラフィックライブラリ Skia の紹介 / Introduction to the graphics library Skia written by C++
pine
0
1.7k
asyncio + aiohttp で作るウェブサービス / How to develop a web service with asyncio and aiohttp
pine
0
660
Lerna による明示的疎結合アーキテクチャ
pine
1
630
CircleCI 2.0 x JavaScript
pine
3
540
Perl 卒業式
pine
0
330
Android Studio の気になる warnings を抑制する方法まとめ
pine
0
490
Emoji Generator meets Browser Extensions
pine
1
2.9k
近年の OSS 開発における CI 選択のベストプラクティス
pine
3
4.5k
Other Decks in Programming
See All in Programming
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
120
Team operations that are not burdened by SRE
kazatohiei
1
260
WindowInsetsだってテストしたい
ryunen344
1
200
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
470
ASP.NETアプリケーションのモダナイズ インフラ編
tomokusaba
1
420
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
570
LT 2025-06-30: プロダクトエンジニアの役割
yamamotok
0
540
GraphRAGの仕組みまるわかり
tosuri13
8
490
型付きアクターモデルがもたらす分散シミュレーションの未来
piyo7
0
810
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
1
700
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
540
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
240
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
2.7k
We Have a Design System, Now What?
morganepeng
53
7.7k
Six Lessons from altMBA
skipperchong
28
3.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
BBQ
matthewcrist
89
9.7k
The Language of Interfaces
destraynor
158
25k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
KATA
mclloyd
29
14k
Producing Creativity
orderedlist
PRO
346
40k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
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