18
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Elm2Advent Calendar 2019

Day 14

Elmスクリプトをサッと実行する

Posted at

Elmを書いていて、どんな結果が表示されるのかすばやく見てみたい!と思われたことはないでしょうか。

Elmにはビルトインの高機能なREPLが備わっていますし、elm reactorコマンドやEllieのようなオンラインIDEもありますので、開発するうえで困ることはほとんどないかもしれません。わたしはコマンドラインツールが好きなので、ターミナルから同じようにElmを試せる選択肢もあると楽しいかも?と思いついてしまいました。

GitHubを検索してみるとrun-elmというパッケージがすでに公開されていますが、elmコマンドがサブコマンドをサポートしていなかった頃から更新されていない様子で、Elm 0.19のコンパイラではうまく動いてくれないようです。

というわけで、自分で作ってみることにしました。

elm-renderのご紹介です。

使い方

インストール

最初に、実行したいElmファイルを管理するプロジェクトを作りましょう。elm-renderはnpmパッケージですので、npmからインストールしてnpxで実行するのが便利です。

$ mkdir elm-render-test
$ cd elm-render-test
$ npm init -y
$ npm install elm-render --save

Elmを書く

今回はこんな内容にしてみました。

module Example exposing (main)

import Html

main =
  let
    today =
      14

    christmas =
      24
  in
  Html.h1 []
    [ Html.text <|
        "クリスマスまであと" ++ String.fromInt (christmas - today) ++ "日!"
    ]

実行する

$ npx elm-render Example.elm
<h1>クリスマスまであと10日!</h1>

うまくいきました :tada:

elmコマンドをグローバルインストールしていることを前提としていますが、もしnode_modules以下などの別のパスを指定したいときは--elm-binaryオプションで変更できます。

$ npx elm-render --elm-binary=/path/to/your/elm Example.elm

しくみ

RE:DOMというDOM操作ライブラリと、Node.jsでRE:DOMを使えるようにするNO:DOMというパッケージを使って、Elmが出力するJavaScriptをレンダリングして表示しています。

RE:DOMとElmの組み合わせは、SSRにも応用できそうで夢が広がりますね!

できないこと・今後の課題

思い付きを急いで形にしただけなので、パッと思い付くだけでもこんなに制限があります。

  • elm/coreelm/html以外のパッケージは使えない
  • 複数のElmモジュールに対応しておらず、実行できるのはmainを公開しているモジュールだけ
  • テスト、エラーハンドリングが適当

改善点やすてきな使い道を考えついた方はぜひ教えてください!

18
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?