Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Crystalでツールを作ってみた

 Crystalでツールを作ってみた

mofumofu3n

June 22, 2018
Tweet

More Decks by mofumofu3n

Other Decks in Programming

Transcript

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

    View full-size slide

  2. 自己紹介
    自己紹介

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  5. Crystal 0.25.0
    リリース
    Crystal 0.25.0
    リリース

    View full-size slide

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

    View full-size slide

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

    yusukebe
    さん作の をCrystal
    で書いてみた
    revealgo

    View full-size slide

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

    View full-size slide

  9. 仕組み
    仕組み
    reveal.js
    はサブモジュールとして取り込み
    指定されたmarkdown
    ファイルの名前をreveal.js

    のテンプレートに埋め込み
    ローカルにhttp
    サーバーを立ち上げる
    ...>

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  13. 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

    View full-size slide

  14. 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

    View full-size slide

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

    View full-size slide

  16. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  19. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide