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
970
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.9k
Running Scala on AWS Lambda in a Snappy Way
todokr
7
4.5k
新しいプログラミング言語の学び方 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
760
Scalaリファクタリング入門「大改造!静的ビフォー・アフター」
todokr
3
1.3k
Other Decks in Technology
See All in Technology
Master Dataグループ紹介資料
sansan33
PRO
1
3.9k
Sansan BIが実践する AI on BI とセマンティックレイヤー / data_summit_findy
sansan_randd
0
130
エンジニアにとってコードと並んで重要な「データ」のお話 - データが動くとコードが見える:関数型=データフロー入門
ismk
0
440
Dart and Flutter MCP serverで実現する AI駆動E2Eテスト整備と自動操作
yukisakai1225
0
210
AIエージェントを導入する [ 社内ナレッジ活用編 ] / Implement AI agents
glidenote
1
350
AWS資格は取ったけどIAMロールを腹落ちできてなかったので、年内に整理してみた
hiro_eng_
0
150
ソフトウェア開発現代史: 55%が変化に備えていない現実 ─ AI支援型開発時代のReboot Japan #agilejapan
takabow
1
400
バグと向き合い、仕組みで防ぐ
____rina____
0
240
AIと共に開発する時代の組織、プロセス設計 freeeでの実践から見えてきたこと
freee
3
510
Pythonで構築する全国市町村ナレッジグラフ: GraphRAGを用いた意味的地域検索への応用
negi111111
8
3.3k
【AWS reInvent 2025 関西組 事前勉強会】re:Inventの“感動と興奮”を思い出してモチベ爆上げしたいです
ttelltte
0
130
CloudFormationコンソールから、実際に作られたリソースを辿れるようになろう!
amixedcolor
0
110
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Navigating Team Friction
lara
190
15k
Fireside Chat
paigeccino
41
3.7k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Code Reviewing Like a Champion
maltzj
527
40k
The Invisible Side of Design
smashingmag
302
51k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Scaling GitHub
holman
463
140k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
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 }