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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Shunsuke Tadokoro
April 18, 2019
Technology
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Scalaでつくる ちょっとしたCLIツール
Sample code repository:
https://github.com/todokr/scala-cli-samples
Shunsuke Tadokoro
April 18, 2019
More Decks by Shunsuke Tadokoro
See All by Shunsuke Tadokoro
ある日「Webエンジニアなら、Webサーバーは作れますよね」と言われたら? ~ 3つのJVM言語で作って学ぶ
todokr
2
600
Onboarding Process for Scala Team
todokr
0
2.1k
Running Scala on AWS Lambda in a Snappy Way
todokr
7
4.7k
新しいプログラミング言語の学び方 HTTPサーバーを作って学ぶ Java, Scala, Clojure
todokr
29
21k
わかる!Java to Clojure
todokr
6
1.9k
Scala絵文字ライブラリに Macroなどを導入してみた
todokr
0
1.5k
Clojureに入門してHTTPサーバーをつくってみた話
todokr
3
1.1k
emojiconに行ってきました
todokr
2
840
Scalaリファクタリング入門「大改造!静的ビフォー・アフター」
todokr
3
1.3k
Other Decks in Technology
See All in Technology
20260608_Codexの可能性_ノンプログラマー向け_大城追記
doradora09
PRO
0
770
JavaScript 研修 (2026)
recruitengineers
PRO
1
360
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
1.8k
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
初めてのGitHub Actions / GitHub Actions at First
tooppoo
0
140
AIが自社のTableauを操作する世界へ:Tableau MCP超入門
tbtykk
0
110
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
160
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
930
GitHub CopilotのFinOps- AI CreditのObservabilityと価値を生むためのエージェント設計
yuriemori
0
130
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
590
老害フォレンジッカーはAI羊の夢を見るか?
tadmaddad
0
200
Featured
See All Featured
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
460
Abbi's Birthday
coloredviolet
3
9.2k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
The SEO identity crisis: Don't let AI make you average
varn
0
530
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Navigating Team Friction
lara
192
16k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
Writing Fast Ruby
sferik
630
63k
The Invisible Side of Design
smashingmag
301
52k
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 }