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
Scalaでつくる ちょっとしたCLIツール
Search
Shunsuke Tadokoro
April 18, 2019
Technology
0
950
Scalaでつくる ちょっとしたCLIツール
Sample code repository:
https://github.com/todokr/scala-cli-samples
Shunsuke Tadokoro
April 18, 2019
Tweet
Share
More Decks by Shunsuke Tadokoro
See All by Shunsuke Tadokoro
ある日「Webエンジニアなら、Webサーバーは作れますよね」と言われたら? ~ 3つのJVM言語で作って学ぶ
todokr
2
520
Onboarding Process for Scala Team
todokr
0
1.8k
Running Scala on AWS Lambda in a Snappy Way
todokr
7
4.3k
新しいプログラミング言語の学び方 HTTPサーバーを作って学ぶ Java, Scala, Clojure
todokr
28
19k
わかる!Java to Clojure
todokr
6
1.8k
Scala絵文字ライブラリに Macroなどを導入してみた
todokr
0
1.3k
Clojureに入門してHTTPサーバーをつくってみた話
todokr
3
1.1k
emojiconに行ってきました
todokr
2
740
Scalaリファクタリング入門「大改造!静的ビフォー・アフター」
todokr
3
1.3k
Other Decks in Technology
See All in Technology
おやつは300円まで!の最適化を模索してみた
techtekt
PRO
0
270
DDD集約とサービスコンテキスト境界との関係性
pandayumi
2
260
RSCの時代にReactとフレームワークの境界を探る
uhyo
9
3k
なぜスクラムはこうなったのか?歴史が教えてくれたこと/Shall we explore the roots of Scrum
sanogemaru
3
910
複数サービスを支えるマルチテナント型Batch MLプラットフォーム
lycorptech_jp
PRO
0
160
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
160
ガチな登山用デバイスからこんにちは
halka
1
210
スプリントレトロスペクティブはチーム観察の宝庫? 〜チームの衝突レベルに合わせたアプローチ仮説!〜
electricsatie
1
160
Oracle Cloud Infrastructure:2025年8月度サービス・アップデート
oracle4engineer
PRO
0
200
落ちる 落ちるよ サーバーは落ちる
suehiromasatoshi
0
140
ZOZOマッチのアーキテクチャと技術構成
zozotech
PRO
3
1.3k
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
19
9k
Featured
See All Featured
Navigating Team Friction
lara
189
15k
Music & Morning Musume
bryan
46
6.8k
Designing for Performance
lara
610
69k
A Modern Web Designer's Workflow
chriscoyier
696
190k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Facilitating Awesome Meetings
lara
55
6.5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Typedesign – Prime Four
hannesfritz
42
2.8k
Docker and Python
trallard
45
3.5k
GitHub's CSS Performance
jonrohan
1032
460k
Transcript
4DBMBͰͭ͘Δ ͪΐͬͱͨ͠$-*πʔϧ !UPEPLS ָ͘͠
୭ͩ ాॴॣ༎!UPEPLS ٻਓݕࡧΤϯδϯ8FCΫϩʔϥɺࠂ৴γεςϜɺ ࠂϩάج൫ɺ0QFO*%$POOFDUೝূɺ3%#.4͓Ҿӽ͠
None
4DBMB w +BWBͱͷ૬ޓӡ༻ੑ w γʔϜϨεͳݺͼग़͠ɺ+BWBඪ४ϥΠϒϥϦͷ࠶ར༻ w ؆ܿੑ w লུՄೳͳߏจɺܕਪɺڧྗͳඪ४ϥΠϒϥϦ w
நͷߴ͍ίʔυɺ৽੍͍͠ޚߏจΛఆٛͰ͖Δදݱྗ w 8IBUͷڧௐɺ)PXͷӅณ w ੩తܕ͚ w ݕূՄೳੑɺϦϑΝΫλͷ͢͠͞ɺυΩϡϝϯτੑ
4DBMBΛձࣾͰ͍͍͚ͨͲ Ͳ͏ͨ͠Β͍͍ͩΖ͏ʁ ձࣾͷٕज़తํͱ͔ɺϝϯόʔͷख़࿅ͱ͔ɺϓϩμΫτॻ͖͠ͱ͔
4DBMBΛձࣾͰ͍͍͚ͨͲ Ͳ͏ͨ͠Β͍͍ͩΖ͏ʁ ձࣾͷٕज़తํͱ͔ɺϝϯόʔͷख़࿅ͱ͔ɺϓϩμΫτॻ͖͠ͱ͔ ·͍ͣ·͠ΐ͏ʂ ͍͖ͳΓϓϩμΫτʹಋೖ͢Δͷେมɻ ͳͷͰɺ·ͣݸਓͰ݁͢ΔۀʹͬͯΈͯɺ ʮΑ͔ͬͨΑʂʯʮ໘ന͍Αʂʯͱڭ͍ͯ͘͠ͷ͕Α͍͔͠Ε·ͤΜɻ
4DBMBͬͯɺͦͦ͜͜େ͖ͳ ϓϩμΫτ͚ͳΜ͡Όͳ͍ͷʁ 5XJUUFSͱ͔"QBDIF4QBSLͱ͔ΞυςΫͱ͔
4DBMBͬͯɺͦͦ͜͜େ͖ͳ ϓϩμΫτ͚ͳΜ͡Όͳ͍ͷʁ 5XJUUFSͱ͔"QBDIF4QBSLͱ͔ΞυςΫͱ͔ ͪΐͬͱͨ͠εΫϦϓτΛ ॻ͘ͷʹ͍͍ײ͡Ͱ͢ (*U)VCͷτϨϯυΛݟΔͱɺ͔֬ʹࢄγεςϜϏοάσʔλɺ ػցֶशܥͷϓϩμΫτ͕ଟ͍Ͱ͢ɻ ͕ɺͪΐͬͱͨ͠ίʔυΛॻ͍ͯαοͱಈ͔͢͜ͱ࣮ಘҙͳΜͰ͢ɻ
r.BSUJO0EFSTLZ -FY4QPPO BOE#JMM7FOOFST 5IFOBNF4DBMBTUBOETGPSlTDBMBCMFMBOHVBHFz ʜ :PVDBOBQQMZ4DBMBUP BXJEFSBOHFPGQSPHSBNNJOHUBTLT GSPNXSJUJOHTNBMMTDSJQUTUPCVJMEJOHMBSHFTZTUFNT
4DBMBେֻ͔ΓͳϓϩμΫτΛ࡞Δͷʹద͍ͯ͠ΔݴޠͰ͕͢ɺ )BDLZͳߦdेߦͷ εΫϦϓςΟϯάे շదʹͰ͖·͢
4DBMBେֻ͔ΓͳϓϩμΫτΛ࡞Δͷʹద͍ͯ͠ΔݴޠͰ͕͢ɺ )BDLZͳߦdेߦͷ εΫϦϓςΟϯάे շదʹͰ͖·͢
# %FNPOTUSBUJPO5JNF .BSLEPXOΛࣼΊಡΈ͢Δ
TDBMBJP4PVSDF w ϩʔΧϧϦϞʔτͷϑΝΠϧಡΈॻ͖ʹศར w ςΩετϑΝΠϧΛߦ୯ҐDIBS୯ҐͰJUBSBUJWFʹ ॲཧͰ͖ΔͷͰɺϑΝΠϧαΠζ͕େ͖ͯ҆͘৺ w HFU-JOFTͯ͠ίϨΫγϣϯϝιουͰΩϝΔͳͲ
# %FNPOTUSBUJPO5JNF εΫϨΠϐϯάΛͬͯΈΔ
4USJOH*OUFSQPMBUJPO w จࣈྻϦςϥϧͷલʹTΛ͚ΔͱɺมΛల։Ͱ͖Δ val price = 1000 s"Price is $price"
// => Price is 1000
5SJQMF2VPUF "Hello triple quote!\nHello stripMargin!" """Hello triple quote! Hello stripMargin!"""
"""|Hello triple quote! |Hello stripMargin!""".stripMargin w վߦΛؚΉจࣈྻΛຒΊࠐΉʹɺΛ͏ w ΠϯσϯτΛଗ͑ΔʹΠϯσϯτจࣈ c ͱTUSJQ.BSHJOΛ͏
4USJOH*OUFSQPMBUJPOͱ5SJQMF2VPUF val response = s"""HTTP/1.1 ${status.value} |Date: ${rfc1123Formatter.format(now)} |Server: SimpleScalaHttpServer
|Content-Type: $contentType |Content-Length: ${body.length.toString} |Connection: Close | |""".stripMargin ͪΐͬͱͨ͠ςϯϓϨʔτΤϯδϯΈ͍ͨʹ͏͜ͱ
$-*πʔϧʹͯ͠ ͬ͞Γ͗͢͠͡Όͳ͍ʁ ύΠϓͱ͔ͰΨϯΨϯͭͳ͍ͰαΫαΫಈ͔͍ͨ͠ΜͰ͚͢Ͳɻ
$-*πʔϧʹͯ͠ ͬ͞Γ͗͢͠͡Όͳ͍ʁ ύΠϓͱ͔ͰΨϯΨϯͭͳ͍ͰαΫαΫಈ͔͍ͨ͠ΜͰ͚͢Ͳɻ ࣮ߦՄೳͳόΠφϦΛੜ͠ αΫαΫಈ͔͢͜ͱͰ͖·͢ 4DBMB/BUJWF(SBBM7.ͷ4VCTUSBJU7.Λ͍ɺ (PͷΑ͏ʹ࣮ߦՄೳͳόΠφϦΛੜ͢Δ͜ͱՄೳͰ͢ɻ +7.ͷىಈΛͨͣʹαΫαΫಈ͔͢͜ͱ͕Ͱ͖·͢ʂ
IUUQXXXTDBMBOBUJWFPSHFOW
# %FNPOTUSBUJPO5JNF .BSLEPXOࣼΊಡΈΛ4DBMB/BUJWFͰߴԽ
·ͱΊ w 4DBMBΛࣄͰ͓͏ʂ w ·ͣݸਓͷۀͰ݁͢ΔൣғͰͬͯΈΑ͏ʂ w 4DBMBεέʔϥϒϧͳݴޠʂ w େ͖͍ϓϩμΫτɺখ͞ͳεΫϦϓτ͍͍ײ͡ʂ w
εΫϦϓςΟϯάʹศརͳػೳΛ͓ͬͯ͜͏ʂ w TDBMBJP4PVSDF w 4USJOH*OUFSQPMBUJPO w 5SJQMF2VPUF w ࣮ߦՄೳͳόΠφϦΛੜ͢Δ͜ͱͰ͖ΔΑʂ w αΫαΫಈ͍ͯɺͦͷ··νʔϜʹڞ༗Ͱ͖Δʂ w མͱ݀͋͠Δ͔ΒؾΛ͚ͭΑ͏ʂ
5IBOLZPV Some(question) match { case Twitter => "@todokr" case
GitHub => "@todokr" case Facebook => "shunsuke.tadokoro" case _ => invokeDynamic }