Slide 1

Slide 1 text

Crystal でツールを作ってみた Crystal でツールを作ってみた @mofumofu3n

Slide 2

Slide 2 text

自己紹介 自己紹介

Slide 3

Slide 3 text

Tatsuya Tanaka(@mofumofu3n) トラベルブック株式会社 今はRuby 、昔はAndroid Crystal 始めました

Slide 4

Slide 4 text

さっきまで沖縄にいました! さっきまで沖縄にいました!

Slide 5

Slide 5 text

Crystal 0.25.0 リリース Crystal 0.25.0 リリース

Slide 6

Slide 6 text

reveal.cr の紹介 reveal.cr の紹介 https://github.com/mofumofu3n/reveal.cr https://github.com/mofumofu3n/reveal.cr

Slide 7

Slide 7 text

reveal.js はHTML やMarkdown で記述したファイル をプレゼンテーションにできるライブラリ reveal.js を簡単に使えるようにしたCrystal 製のツー ル yusukebe さん作の をCrystal で書いてみた revealgo

Slide 8

Slide 8 text

使い方 使い方 マークダウンファイル(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

Slide 9

Slide 9 text

仕組み 仕組み reveal.js はサブモジュールとして取り込み 指定されたmarkdown ファイルの名前をreveal.js 用 のテンプレートに埋め込み ローカルにhttp サーバーを立ち上げる

Slide 10

Slide 10 text

使った標準API 使った標準API ecr le http/server option_parser

Slide 11

Slide 11 text

ハマったポイント ハマったポイント

Slide 12

Slide 12 text

1. Crystal アップデート 1. Crystal アップデート

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

2. ドキュメントが間違ってた 2. ドキュメントが間違ってた

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

3. option_parser の使い方 3. option_parser の使い方

Slide 18

Slide 18 text

$ revealcr -p 8080 # 8080 を受け取りたい

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

4. デバック方法 4. デバック方法

Slide 21

Slide 21 text

lldb でデッバックできた。けど、変数ウォッチ出来 ない。。 gdb も試したけど、Mac OS だとうまく動かない

Slide 22

Slide 22 text

皆さんどうやってデバックしていますか? 皆さんどうやってデバックしていますか?

Slide 23

Slide 23 text

良かったポイント 良かったポイント

Slide 24

Slide 24 text

Ruby のシンタックスと似てるから入りやすい 型( ・∀・) イイ!! 複数の型が指定できるのに少し戸惑った 言語でライブラリの作成やパッケージマネージャー をサポートしてる

Slide 25

Slide 25 text

宣伝 宣伝 エンジニア絶賛募集中です! https://www.wantedly.com/companies/travelbook