目的から発しているからこそ、フレームワークの選択肢は1つしかないのです。(ヤギのヒヅメには指が2つあります)Haskellらしさを求めている人にはオススメできないElmはよく「Haskellのような構文」と紹介をされることがあり、ここに惹かれてElmを始めた方の失望の声をよく聞きます。1)型クラスとか、メタプログラミングとか、型レベルプログラミングとか、そういったHaskellで使える発展的な機能を入れないのはなぜでしょうか。いれてくれればいいのに、いじわるですよね?僕だってHaskellのおかげでご飯を食べている身なのでこれらの良さは知っていますし、メタプログラミングを活用したテンプレートエンジンを作ったりしています。そもそもフレームワークを使うのに必要な機能と、フレームワークを作るために必要な機能は多くの場合異なります。草から肥料を作ろうと思った場合、そのフレームワーク(仕組み)自体を作るにはバクテリアに関する知識や化学などの知識が必要になりますが、「ヤギ」といううんこ製造フレームワークを使うのであれば特にそういった知識は必要ありません。ヤギさんの体のなかで全部代わりにやってくれます。使うために存在する言語であることを考えれば、上記のような発展的な言語機能は必須ではないはずです。逆に要望を聞き入れてこれらの「あれば嬉しいがなくてもどうにかなる」機能を入れてしまうと学習コストが無駄に高くなったり人によって書くコードがバラバラすぎて保守性が悪化してしまったりアンチパターンを行ってしまう余地が生まれたり中二病の人が「こんな難しいコード書けるオレかっけー」をやって可読性の悪いコードを書いてしまったり2する原因になります。そもそも「関数型」って「なにができるか」よりも「なにができないか」の方が重要だと僕は思います。変数への再代入ができないようにしたり、「実はこれを制限したほうがより良いコードになるんじゃないか?」と、制約を設けることで品質を保っているはずです。逆に、あまり制限せずにどんどん機能をいれると、残念ながら「うんこ」とさげすまれてしまうこともあります。3基本的に何か新しい機能を入れるのは気軽にできますが、あとで機能を消すことは容易ではありません。「本当に必要なのか」をじっくり慎重に検討します。「慎重に検討」するわけですから、ある機能を入れる必要があると判断されればその機能は導入されます。型クラス相応のものは言語に組み込まれていますから、「実世界のアプリケーション開発において本当に必要な機能だ」と判断されれば、将来上記の機能が導入されることもあるでしょう。現状では、フロントエンド開発用のDSLとしての役割を持つElmは対象とする領域がせまいため、汎用言語であるHaskellなどに存在する機能を導入するメリットよりもデメリットが大きいと判断されているようです。選ぶ自由が残されています。自由ってすばらしい!既存の技術を愛して離れられない人にはオススメできない僕がさくらちゃんを愛しているように、世の中にはReactなどの既存の技術を愛して頭の中がその技術への愛にあふれている方もいます。いった方から見ると「なんだよElmはjsx記法使えないのかよ」とか「JSみたいに引数を省略する機能があったら良かったのに」とか「TypeScriptみたいにany型はないの?」とか不満に思うことでしょう。Elmはここまでに述べたように意思をもって今の形にしています。今後「あ、実際にはやっぱり実用事例とかから考えたらこっちのほうが良かったわ」と方針が変わることもありえますが、まずは今までの固定観念を外してElmをそのまま受け入れてみましょう。なんと、jsx記法を採用していない理由などについてもしっかり公式ドキュメントに書かれています。したら既存技術さんに「この浮気者!」と思われるのがこわいかもしれません。あなたの愛はそんなことで既存技術さんを不安にさせる程度のものではないはずです。既存技術さんもきっとあなたのことを信じてくれることでしょう。束縛と愛は別物なのです。表面的なちょっとした表記上の違いや、ちょっとした楽ができるかどうかにとらわれて、それを補って余りあるElmの膨大な素晴らしさをみすみす取り逃がしてしまうのは本当にもったいないことです。言え、愛なら仕方ありませんよね。公式レポジトリの対応の遅さを気にする人にはオススメできないよくElmの開発状況を見た人が「更新止まってるけどもうオワコンなの?」と不信感をつのらせているのを目にします。Elm自体の開発は、レイテンシーよりもスループットを重視しています。なにか対応が必要になった時にすぐに対応するのではなく、ある程度関連する対応事項や検討事項がたまるまで待って、全体を俯瞰してもっともよいやり方で対応する方針をとっています。することで、対応が遅くなるデメリットがある反面、「この前とりあえず入れた機能、その後の変更の影響でやっぱりいらんかったわー」みたいな無駄な手戻りを減らし、時間あたりの生産性を最大化することができます。ちなみにヤギさんは目の前の草には勝てないので、ついついレイテンシーを優先して出たばかりの芽を食べてしまい、その芽がたくさんの葉っぱをつける機会を奪った結果、全体としては草のスループットが下がってしまいます。草で人生を狂わせそうな性格が最高に愛らしいですね!まとめヤギさんとの暮らしは毎日が試行錯誤の連続です。言うことを聞いてくれないこともあります。特性を理解し認めてあげれば、かけがえのないものを与えてくれるでしょう。毎日たくさんのかけがえのないうんこも与えてくれます。ヤギは草食動物で多くの食物繊維を摂取するため、雑食性の犬やネコに比べてうんこの量が多くなるのです。うんこと言えば、ヤギのうんこはコロコロした粒状のものが一気にお尻の穴からぽろぽろぽろ〜っと出てきます。やってあんなコロコロした形状に成形されるのかヤギの神秘のブラックボックスです。Elmも画面の更新処理などの複雑で分かりにくい部分はブラックボックスとして隠蔽してくれています。制約を増やすことで開発者が本質的な部分に注力できるようにしてくれるElmに興味を持たれた方は、ぜひElmの公式ガイドに目を通してみてください。なんと、公式ガイドの高品質すぎる日本語訳まで存在します。実際にElmを始める人が最初に読む記事も、ぜひ参考にしてみてください。Elmを購入されてもいいかもしれません。2019本書は以下の点などで、高品質な日本語翻訳まであって分かりやすいと評判の公式ドキュメントと差別化を図ってます。2019さくらちゃんの赤裸々な毎日を見たい方はtwitterでご覧いただけます。あの言語を使ったほうがいい場面では僕も使ってます。お仕事依頼はTwitterへhttps://arow.infoFollow株式会社ARoWヘテロジニアスで自律分散型な優しい会社です。従業員がヘテロジニアスな自律分散ノードとして活躍し、代表が汎用ノードとして全体の仕事の調整や、割り振り先がない仕事の処理を担当するボロ雑巾として活躍してます。upLoginユーザーは見つかりませんでした。