あいつの日誌β

働きながら旅しています。

はじめての elm-lang

あらすじ

grunt, gulp, webpack ツールは違えど Javascript を bundle する事前準備で疲弊していることに変わりがない今日この頃ですが、elm-lang は何も考えなくても bundle してくれるので意外とアリかもしれないぞと思ったので練習します。

いい感じの動画があったのでそちらで練習しました。 もしそちらの動画を参考にする場合は使用されている Syntax が 0.18 では削除されていて動かない箇所があるので読み替える必要があります。

  • [1..3] -> range 1 3
  • Html.App.beginnerProgram -> Html.beginnerProgram
  • type' -> type_

install

% brew install elm
% elm --version
0.18.0

hello world

% mkdir practice-elm && cd $_
% elm package install -y
% elm reactor

create exercise.elm

module Main exposing (..)

import Html

main =
  Html.text "Hello World"

確認

% open http://localhost:8000/exercise.elm

increment

create increment.elm

elm 0.18 から Html.App.beginnerProgram ではなく Html.beginnerProgram に変更されています

import Html exposing (..)
import Html.Events exposing (..)

main =
  Html.beginnerProgram { view = view, model = model, update = update }

--model
type alias Model =
  Int

model : Model
model =
  0

--update
type Msg
  = Inc
  | Dec

update : Msg -> Model -> Model
update msg model =
  case msg of
    Inc ->
      model + 1
    Dec ->
      model - 1

-- view
view : Model -> Html Msg
view model =
    div []
        [ button [ onClick Dec ] [ text "-" ]
        , div [] [ text (toString model) ]
        , button [ onClick Inc ] [ text "+" ]
        ]

まとめ

近年のフロント側の技術の進歩は目覚ましく、いろいろ覚えることがたくさんあるので elm-lang に対して最初は良い印象はありませんでした。

virtual-dom を採用しているし、 redux の思想と共通するので一度 redux が絡むアプリを触っておくと違和感がないと思います。

So The Elm Architecture is easy in Elm, but it is useful in any front-end project. In fact, projects like Redux have been inspired by The Elm Architecture, so you may have already seen derivatives of this pattern.

あと webpack 不要なのが個人的には嬉しいです。とある週末に「ひさしぶりに家でプログラミング書くか」「以前書いた webpack.config.js をコピーして...」「あれーなんかいろいろ変わってる」「やっと直った」「もう寝ないと:0」みたいな経験するぐらいなら新しい言語触りたい。

参考にした動画

exercise.elm: https://www.youtube.com/watch?v=Rf2CkojtxFw

increment.elm: https://www.youtube.com/watch?v=vb7ZdjSblok