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
mofumofu3n
June 22, 2018
Programming
1.4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Crystalでツールを作ってみた
mofumofu3n
June 22, 2018
More Decks by mofumofu3n
See All by mofumofu3n
コードリーディングを通じて得られたこと
mofumofu3n
2
1.3k
Other Decks in Programming
See All in Programming
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
380
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
140
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
140
メールのエイリアス機能を履き違えない
isshinfunada
0
200
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
9
4.4k
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
510
What's New in Android 2026
veronikapj
0
240
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
510
その節約、円になってますか?
isamumumu
1
640
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
200
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
290
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
190
Featured
See All Featured
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
470
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
760
Joys of Absence: A Defence of Solitary Play
codingconduct
1
420
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
270
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
370
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
For a Future-Friendly Web
brad_frost
183
10k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
330
Mind Mapping
helmedeiros
PRO
1
290
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Transcript
Crystal でツールを作ってみた Crystal でツールを作ってみた @mofumofu3n
自己紹介 自己紹介
Tatsuya Tanaka(@mofumofu3n) トラベルブック株式会社 今はRuby 、昔はAndroid Crystal 始めました
さっきまで沖縄にいました! さっきまで沖縄にいました!
Crystal 0.25.0 リリース Crystal 0.25.0 リリース
reveal.cr の紹介 reveal.cr の紹介 https://github.com/mofumofu3n/reveal.cr https://github.com/mofumofu3n/reveal.cr
reveal.js はHTML やMarkdown で記述したファイル をプレゼンテーションにできるライブラリ reveal.js を簡単に使えるようにしたCrystal 製のツー ル yusukebe
さん作の をCrystal で書いてみた revealgo
使い方 使い方 マークダウンファイル(index.md) を指定して起動 ポート指定 テーマの変更 $ revealcr index.md Open
http://127.0.0.1:4000 $ revealcr -p 8080 index.md Open http://127.0.0.1:8080 $ revealcr -t solarized Open http://127.0.0.1:4000
仕組み 仕組み reveal.js はサブモジュールとして取り込み 指定されたmarkdown ファイルの名前をreveal.js 用 のテンプレートに埋め込み ローカルにhttp サーバーを立ち上げる
<section data-markdown=" ファイル名" ...>
使った標準API 使った標準API ecr le http/server option_parser
ハマったポイント ハマったポイント
1. Crystal アップデート 1. Crystal アップデート
http/server の実装方法 http/server の実装方法 0.24.0 まで 0.24.0 まで require "http/server"
HTTP::Server.new("0.0.0.0", 8080, [ HTTP::StaticFileHandler.new("."), ]).listen
0.25.0 から 0.25.0 から require "http/server" server = HTTP::Server.new([ HTTP::StaticFileHandler.new("."),
]) server.bind "127.0.0.1", 8080 # <- リファレンス通りに書いたがエラーになる server.listen
2. ドキュメントが間違ってた 2. ドキュメントが間違ってた
server.bind "127.0.0.1", 8080 https://crystal-lang.org/api/0.25.0/HTTP/Server.html https://crystal-lang.org/api/0.25.0/HTTP/Server.html server.bind_tcp "127.0.0.1", 8080 https://crystal-lang.org/api/master/HTTP/Server.html https://crystal-lang.org/api/master/HTTP/Server.html
3. option_parser の使い方 3. option_parser の使い方
$ revealcr -p 8080 # 8080 を受け取りたい
OptionParser.parse! do |parser| parser.on("-p", "--port", "port with running.") do |v|
port = v end end OptionParser.parse! do |parser| # 第二引数で= 以降を書かないと値が受け取れない parser.on("-p PORT", "--port=PORT", "port with running.") do |v| port = v end end
4. デバック方法 4. デバック方法
lldb でデッバックできた。けど、変数ウォッチ出来 ない。。 gdb も試したけど、Mac OS だとうまく動かない
皆さんどうやってデバックしていますか? 皆さんどうやってデバックしていますか?
良かったポイント 良かったポイント
Ruby のシンタックスと似てるから入りやすい 型( ・∀・) イイ!! 複数の型が指定できるのに少し戸惑った 言語でライブラリの作成やパッケージマネージャー をサポートしてる
宣伝 宣伝 エンジニア絶賛募集中です! https://www.wantedly.com/companies/travelbook