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
960
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.4k
新しいプログラミング言語の学び方 HTTPサーバーを作って学ぶ Java, Scala, Clojure
todokr
28
19k
わかる!Java to Clojure
todokr
6
1.8k
Scala絵文字ライブラリに Macroなどを導入してみた
todokr
0
1.4k
Clojureに入門してHTTPサーバーをつくってみた話
todokr
3
1.1k
emojiconに行ってきました
todokr
2
750
Scalaリファクタリング入門「大改造!静的ビフォー・アフター」
todokr
3
1.3k
Other Decks in Technology
See All in Technology
20251010_HCCJP_AdaptiveCloudUpdates
sdosamut
0
140
AWS Control Tower に学ぶ! IAM Identity Center 権限設計の第一歩 / IAM Identity Center with Control Tower
y___u
1
200
業務効率化をさらに加速させる、ノーコードツールとStep Functionsのハイブリッド化
smt7174
2
150
LLMプロダクトの信頼性を上げるには?LLM Observabilityによる、対話型音声AIアプリケーションの安定運用
ivry_presentationmaterials
0
540
ソフトウェアエンジニアの生成AI活用と、これから
lycorptech_jp
PRO
0
510
20251007: What happens when multi-agent systems become larger? (CyberAgent, Inc)
ornew
1
430
衛星画像超解像化によって実現する2D, 3D空間情報の即時生成と“AI as a Service”/ Real-time generation spatial data enabled_by satellite image super-resolution
lehupa
0
190
Introduction to Bill One Development Engineer
sansan33
PRO
0
300
「改善」ってこれでいいんだっけ?
ukigmo_hiro
0
350
新規事業におけるGORM+SQLx併用アーキテクチャ
hacomono
PRO
0
370
AWSでAgentic AIを開発するための前提知識の整理
nasuvitz
2
200
Wasmのエコシステムを使った ツール作成方法
askua
0
220
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
A better future with KSS
kneath
239
18k
Into the Great Unknown - MozCon
thekraken
40
2.1k
Being A Developer After 40
akosma
91
590k
How STYLIGHT went responsive
nonsquared
100
5.8k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
Reflections from 52 weeks, 52 projects
jeffersonlam
353
21k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
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 }