お問い合わせ

技術

Elmで学ぶwebアプリの仕組みと関数型言語

2023.06.06

著者:井上 健太

はじめに

Elmは主にweb開発等の対話型アプリケーションに使用される純粋関数型言語の1つで、シンプルさ、簡単さがその特徴になっています。さらに公式のチュートリアルが分かりやすく作られているため、web開発や関数型言語の初心者にオススメの言語です。

本記事では、そのElmを見ながらwebアプリや関数型言語の特徴をまとめていきます。

Elmの公式チュートリアル


webアプリの仕組み

ElmではThe Elm Architectureと呼ばれるモジュールを使って簡単にwebアプリを作ることができます。 これを詳しく見ていきましょう。

まず、webアプリの基本的な仕組みであるBrowser.sandboxを見ていきます。

import Browser import Html exposing (Html, button, div, text) import Html.Events exposing (onClick) main = Browser.sandbox { init = init, update = update, view = view }

Browser.sandboxinit, update, modelの3要素からなり、それぞれ任意の型Model, Msgに対し、以下のような型を持っています。

init : Model update : Msg -> Model -> Model view : Model -> HTML Msg

このことからupdateMsgModelからModelを返し、viewModelからHTML Msgを返すことがわかります。

つまり、webアプリの仕組みとしては以下の図になります。

initがシステムの初期値です。 viewは上の矢印で、システムからModel型の値を受け取り返り値のHTML MsgからHTMLをブラウザに表示します。 updateは下の矢印で、ブラウザからの入力であるMsg型の値を受け取り、元々持っていたModel型の値を新しい値に更新します。

例はElmの公式チュートリアルにもあるように、ボタンを押すと数字が増えるwebアプリを見るのがわかりやすいでしょう。

-- INIT type alias Model = Int init : Model init = 0 -- UPDATE type Msg = Increment | Reset update : Msg -> Model -> Model update msg model = case msg of Increment -> model + 1 Reset -> 0 -- VIEW view : Model -> Html Msg view model = div [] [ div [] [ text (String.fromInt model) ] , button [ onClick Increment ] [ text "+" ] , button [ onClick Reset ] [text "reset" ] ]

この例だとModelInt型の値で、初期値init0を与えておきます。viewがこの値を受け取って、ブラウザに値の表示とIncrementResetを返すボタンを表示しています。 updateはブラウザからIncrementResetのどちらが押されたかという情報を受け取って、Modelの値を更新する関数になっています。

Elmを使ってわかること

Elmは純粋関数型言語であるので、全ての関数はその引数のみに依存します。 すなわち上のinit, update, viewは全て独立した関数であり、webアプリはこの3つの独立した機構から構成されていることが分かります。

このように関数型言語ならば、複雑なプログラムも型と関数によって大枠に分解して考えることができます。これこそが関数型プログラミングの大きなメリットの1つになっています。


まとめ

純粋関数型言語Elmを用いてwebアプリの仕組みと関数型言語を用いるメリットについてまとめました。


一覧に戻る


採用情報

Recruit


“技術で世界に勝負をかけて未来を拓く”
当社はこのような志で設立され、業界のリーディングカンパニーを目指して努力を続けています。
若い会社であるため、入社した社員全員で歴史を作り上げていくことを実感できることでしょう。
現在、採用活動を積極的に展開中です。
技術で世界に勝負をかける日本インサイトテクノロジーで、存分にお力を発揮してください。


新卒採用情報はこちら
キャリア採用情報はこちら


お問い合わせ

Contact


お問い合わせはこちら