13
10

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.

Elm Reactor で Hello World

Last updated at Posted at 2016-04-07

Elm Reactor

Elm Reactor はインタラクティブな開発ツールです。Elm Platform に含まれています。
Elm Reactor により起動させた HTTP サーバーを通じて Elm で書いたプログラムを実行することにします。

別の方法として、トランスパイラーの elm-make を手動で実行して JavaScript に変換した上でブラウザーで実行する方法が挙げられます。

Elm に取り組む動機

Cycle.js (RxJS) や Redux の開発者やユーザーのあいだで Elm アーキテクチャ (日本語訳) が定期的に話題として触れられることから、Elm アーキテクチャに興味をもつようになりました。Android や Swift でも Elm アーキテクチャを実現するための取り組みがなされています。

Elm アーキテクチャを学ぶことで今後の仮想 DOM を前提としたライブラリやフレームワークの進化の方向性を占うのに役立つのではないかという期待をしています。

Elm の日本語チュートリアルは少ないですが、Haskell を学んでいればコードを読むことができるでしょう。私は以前「すごいHaskellたのしく学ぼう!」を読んでちょっとしたコードを書く練習を続けていました。

Elm に取り組む別の動機はドメイン駆動設計の練習として抽象型データを定義するコードを書く機会を増やしたいことです (ドメイン駆動設計 基本を理解する)。

Web API をもとにした SPA (Single Page Application) の開発に移行することで、従来はサーバーサイドが担っていた Model と View の責務がクライアントサイド JavaScript に移ってきているので、TypeScript や Flow などの型システムに対応しながら、Model の開発の方法論を学んでゆくことを今後の課題として考えています。

Elm Platform の導入

npm コマンドで Elm のコマンドツール一式を導入します。

npm install -g elm

プロジェクトをセットアップする

elm-make コマンドでプロジェクトをセットアップします。

mkdir elm-project
cd elm-project
elm-make --yes

パッケージを導入する 

elm-package でパッケージを導入します。今回は elm-lang/html を導入します。

elm-package install elm-lang/html --yes

0.17 以前は evancz/elm-html でした。

コードを書く

Hello.elm
import Html exposing (text)

main = text "Hello, World!"

HTTP サーバーを起動させる

HTTP サーバーを起動させましょう。オプションでポート番号を指定します。

elm-reactor --port 3000

ブラウザーで localhost:3000/Hello.elm にアクセスしてプログラムが動くのかを確認します。

elm-make でトランスパイルする

今度は elm-make を実行してトランスパイルしてみましょう。

elm-make Hello.elm

生成された index.html にブラウザーでアクセスしてプログラムが動くか確認しましょう。

プログラムをリファクタリングする

Elm アーキテクチャを学ぶことを想定して、プログラムをリファクタリングしてみましょう。こちらのチュートリアルを参考にさせてもらいました。

Hello.elm
import Html exposing (..)

main : Html
main =
    h1 [] [ text "Hello World" ]

今度は view 関数を定義してみよう。

Hello.elm
import Html exposing (..)

view : String -> Html
view message =
  h1 [] [ text message ]

main : Html
main =
  view "Hello World!"

次に取り組むことは?

Elm アーキテクチャを挙げます。コードの例を試すために start-app パッケージを導入します。

elm-package install evancz/start-app --yes
13
10
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
13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?