Haskellについて今日は紹介するよ!
- Haskellとは?
- Haskellができることって?
- Haskellの勉強方法は?
- Haskellの将来性は?
などの疑問をお持ちの方の悩みを解決できる記事になっています!
この記事では、現役のフリーランスエンジニアがHaskellの特徴、できること、将来性、勉強方法について解説します!
記事を読めば、Haskellの特徴や効率的な勉強方法について理解できますよ!
それでは、見てみましょう!
- Haskellに興味がある人
- Haskellで何ができるか知りたい人
- Haskellの学び方を知りたい人
目次
Haskellとは?
Haskellは、1990年に発表された純粋関数型プログラミング言語です。名称はアメリカの数学者、Haskell Curryから由来しています。1987年の当時は純粋関数型プログラミング言語が12以上もあり、乱立していたため、言語仕様を標準化するためにHaskellが誕生しました。
Haskellには次のような関数型プログラミングをサポートする言語仕様が備わっています。
- 高階関数
- モナド
- カリー化
- パターンマッチング
Haskellは、主にバックエンド(サーバーサイド)で動作するプログラミング言語です。そのため、APIサーバー開発に使われることが多いです。
Haskellの特徴とは?
Haskellの特徴は、次の通りです。
- 静的型付け言語
- 純粋関数型言語
- 遅延評価
- Cabalでパッケージ管理
- YesodでWebアプリケーション開発
- 本・ドキュメントサイトが充実している
静的型付け言語
Haskellは、「静的型付け言語」です。
静的型付け言語とはプログラムが実行される前に、プログラムの整合性や合理性を担保する仕組みをもったプログラミング言語です。
プログラミング言語には、「静的型付け言語」と「動的型付け言語」があります。
Haskellは静的型付け言語であり、プログラム上で使われる値の型を定義することで安全性を確保しています。
Haskell以外の静的型付け言語は次のものがあります。
- Java
- Kotlin
- TypeScript
- Swift
一方、「動的型付け言語」とはプログラムが実行されるタイミングでプログラムの整合性をチェックします。そのため、プログラムが実行されるまでバグに気付きづらいです。
Haskellと同じサーバーサイドで実装されるRuby、PHPなどは、「動的型付け言語」です。そのため、型を定義する必要はありません。しかし、プログラムを実行するまで正しい値が使われているかは分からず、エンジニア自身が安全性を担保する必要があります。
主要な動的型付け言語は次の通りです。
- PHP
- Ruby
- Python
- JavaScript
両者ともメリット、デメリットがあるので覚えておきましょう。
種類 | メリット | デメリット |
動的型付け言語 |
|
|
静的型付け言語 |
|
|
純粋関数型言語
Haskellは、純粋関数型プログラミング言語です。
プログラミングの手法には大きく分けて二つあります。
- 命令型
- 関数型
命令型とは、一般的なプログラミングスタイルで、プログラムの命令を一つずつ順番に実行していく手法です。
関数型とは、単一の処理を関数という単位にまとめて、それを合成してプログラムを組み立てるプログラミングスタイルです。
手法 | 特徴 | 主なプログラミング言語 |
命令型 | プログラムの命令を一つずつ順番に実行していく手法 | C |
関数型 | 処理を関数単位にまとめて、それを合成してプログラムを組み立てる手法 | Haskell, Scala |
Haskellは、この純粋関数型プログラミングをサポートする機能を多く備えています。具体的には次のようなものです。
- モナド
- カリー化
- 関数合成
- 高階関数
関数型プログラミング言語に慣れていない人は難しい印象を抱くかもしれません。しかし、使いこなせれば強力な武器になることは間違いないです。JavaScripなどでも関数型プログラミングは注目され、言語仕様として取り入れられています。
今後、関数型プログラミングはより発展すると期待されています。Haskellから関数型プログラミングのパラダイムを学ぶことは他のプログラミング言語でも有用になります。
注目の関数型プログラミングとは?初心者にわかりやすく解説!遅延評価
Haskellは、遅延評価という式の評価方式を採用しています。
遅延評価とは、式の評価をすぐに行わずに遅延して行う評価手法です。
簡潔に言うと、値が必要になるときまで評価を後回しにする仕組みです。
値を必要なときだけ取り出すので、効率的なプログラムを実行できるのが特徴です。
Cabalでパッケージ管理
引用元: Cabal
Haskellのパッケージ管理は「Cabal」を使います。
パッケージ管理とは、アプリケーション開発で必要な機能を管理することです。
パッケージとは、便利な機能がまとまったものです。例えば
- ログイン機能パッケージ
- 検索機能パッケージ
- データベースの接続パッケージ
- テスト管理パッケージ
- フォーム管理パッケージ
などがあります。パッケージは、プログラミング開発をサポートするために作られたひとまとまりの機能です。アプリケーションにメールやログイン機能を追加するときは、「自分で実装する」か「パッケージを使用する」ことになります。実際の開発の現場では、「パッケージを使用する」機会が圧倒的に多いです。なぜなら、「自分で実装する」場合はゼロから作らなければならず、コストがかかるからですね。その点、パッケージは既に出来上がっているのですぐに機能を追加できます。
エンジニアはアプリケーションで必要なパッケージをインストールしますが、パッケージの数が多くなると管理も大変になります。その管理の複雑性を解決するために、Cabalが使われます。
パッケージのインストール方法
パッケージのインストールは、install
コマンドを使います。
cabal install パッケージ名
インストール時には、パッケージの依存関係もチェックされて自動的にダウンロードされます。
インストール可能なHaskellライブラリの詳細は、Hackageで確認できます。
引用元: Hackage
YesodでWebアプリケーション開発
引用元: Yesod
HaskellのWebアプリケーション開発では、Yesodがよく使われます。
Webアプリケーションフレームワークとは、Webアプリケーションを開発するためのサポート機能がまとまっているツールのことです。
Webアプリケーションには、データベースの操作、httpリクエストの処理、メールなど多くの機能が必要とされます。これら全ての機能をゼロから作ると大変ですよね。Webアプリケーションフレームワークは、そのようなWebに関わる機能が備わっています。そのため、初心者の人でもすぐにアプリケーション開発ができるようになっています。
Yesodは、Restfulに対応し、パフォーマンス性に優れたHaskell用のWebアプリケーションフレームワークです。
強力な型システムで、安全なWebアプリケーション構築を目的としています。
書籍・ドキュメントサイトが充実している
Haskellの書籍は充実しています。日本語の書籍も多く、最新のバージョンを学ぶことができます。
書籍はたくさんありますが、いくつかおすすめをご紹介しておきます。
「すごいHaskellたのしく学ぼう!」で基礎を習得し、次に「Haskellで作るWebアプリケーション」「関数プログラミング実践入門増補改訂」で実践的なHaskellの使い方や関数型プログラミングの作法を学習しましょう。
また、本に加えて、Haskellのサイトを見ておくのをおすすめします。
Haskellを使うと何ができるの?
Haskellを使うと様々なアプリケーションを開発できます。
よく開発されるアプリケーションは、次の通りです。
- Webアプリケーション
- スクレイピングプログラム
- APIサーバー
Webアプリケーション
Webアプリケーションとは、Webで提供されているサービスのことです。
例えば、ショッピングサイトや求人サービス、ブログなどです。
HaskellのWebアプリケーション開発では、Webアプリケーションフレームワークが使われるのが主流です。前述した通り、フレームワークはWebアプリケーション開発に特化した機能が提供されています。エンジニアはゼロから構築しなくても、フレームワークを使えばすぐにWebアプリケーション開発をすることができます。
今では、独自のフレームワークで開発している企業は少ないでしょう。一部、大企業は独自フレームワークを使っているかもしれませんが、ほとんどの企業はオープンソースのHaskellフレームワークを使っています。
そのため、上述したフレームワークの使い方を覚えておくといいでしょう。
スクレイピングプログラム
スクレイピングとは、Webサイトにある情報を取得して加工する技術です。
例えば、複数の求人サービスのデータを一度に確認できるWebサイトがあるとしましょう。複数の求人サービスのデータ取得を人の手でやることも可能ですが、膨大な時間がかかります。
その作業をコンピュータにやらせるのが、スクレイピングプログラムです。
Haskellでは、「Scalpel」などでスクレイピングを作ることができます。
APIサーバー
Haskellは、APIサーバーの開発にも使われます。
APIとは「Application Programming Interface(アプリケーション・プログラミング・インターフェース)」の略で、「プログラム同士をインターフェースを通じで繋げる機能」です。
APIの仕組みを使うと、様々なプログラムを組み合わせて一つのサービスを作ることができます。
例えば、TwitterやインスタグラムもAPIを提供しており、API経由でツイートや写真を取得できます。そして、その取得したデータを自分のWebサイトに表示させることができます。
APIサーバーは、APIの仕組みを利用して、データを提供するサーバーです。
APIサーバー構築でもフレームワークは使われます。
Haskellで作られているサービス
Haskellは人気がありますが、他のプログラミング言語と比べると業務で使われることが少ないです。しかし、日本国内でもいくつかの企業がHaskellを使用しています。
例えば、株式会社LEMO ではAPI開発にHaskellを使用しています。
これからバックエンドエンジニアを目指す人は、Haskellも検討してみましょう!
関数型プログラミング言語のパラダイムを身につければ、他のプログラミング言語でも強力な武器になりますよ!
Haskellが使えるとなれる職種
Haskellが使えると、バックエンドエンジニアになれます。
バックエンドエンジニアは、Webサイトの裏方の役割をします。
裏方の役割とは、サーバーやデータベースの仕組みを作ることです。
例えば、ショッピングサイトでは、商品の管理や在庫の管理、決済の手続きなど多岐に渡ってやることがあります。
その一つ一つの機能はサーバーという場所で処理がされます。
そのサーバーで行われる処理を作るのがバックエンドエンジニアです。
バックエンドエンジニアの詳しい解説は、こちらをご確認ください。
バックエンドエンジニアとは?仕事内容、年収・将来性について解説!Haskellエンジニアの年収は?
Haskellエンジニアの年収は、どのくらいでしょうか。Haskellエンジニアを目指す人は気になるところでしょう。
転職支援サービスなどを見ると、Haskellエンジニアの年収は500〜900万円程度とされています。
実際に「求人検索エンジン「スタンバイ」」によると、平均年収は670万で設定されています。
引用元: 求人検索エンジン「スタンバイ」調べ
日本の平均年収と比べると、かなり高い傾向ですね。
スキルの高いHaskellエンジニアは独立して、もっと稼いでいます!
エンジニアは作ってナンボの世界なので、スキル次第ではもっと高い年収を狙うことも可能です。
Haskellの今後の将来性は?
Haskellは、今後も一定の需要が期待されます。
なぜなら、関数型プログラミングが今注目をされ、他のプログラミング言語仕様にも採用されているからです。
また、Haskellのコミュニティは活発で日々進化をしています。安全性と実用性の高さからエンジニアの間でも高い人気があります。エンジニアが求めるプログラミング言語は、企業でも使われる傾向が高いです。Haskellを学び、関数型プログラミングのアプローチを活用して効率性を上げたいと思う人も多いでしょう。
さらに現在、日本のIT業界は深刻な人手不足に陥っています。実際に、経済産業省のデータによると、2025年には約40万人、2030年には約45万人が不足すると試算されています。
労働人口が年々減少しているのも関わらず、企業はITへの投資をするため、エンジニアの需要が高くなっているのです。
これからバックエンドエンジニアを目指す人は、Haskellの勉強も検討してみてください!そして、新しい技術を常にキャッチアップしていけばエンジニアの価値を高め続けられますよ!
Haskellを習得するには
Haskellを習得するためには、まずは基礎を学習して、次に実践学習をしましょう。
- プログラミング学習サイトでHaskellを始める
- プログラミング本でHaskellの仕様を理解する
- ポートフォリオを作る
プログラミング学習サイトでHaskellを始める
基礎を身につけるには、プログラミング学習サイトがおすすめです。
なぜなら、プログラミング学習サイトは、環境構築が不要ですぐにプログラミングを始められるからです。
例えば、Progateなどのプログラミング学習サイトを活用すれば、簡単にプログラミングを始められます!
Progateは「Git」「コマンドラインツール」を学べるので試してみてください!
Progateでプログラミングを学習する方法を解説【独学で可能】ウォークスルー Haskellでは、Haskellの基礎を学習できるコースがあります。
プログラミング本でHaskellの仕様を理解する
基礎学習では、プログラミング本も有効です。
プログラミング学習サイトでは扱えきれない細かい仕様を学べます。
前述した、おすすめの本を活用してみましょう。
ポートフォリオを作る
次に実践として、ポートフォリオやアプリを作りましょう。
アウトプットすることでプログラミングをより理解できます。
基礎ではプログラミング言語の特徴や使い方を学び、実践ではアウトプットすることで効率的にプログラミングを習得できます。
エンジニア未経験者でもできる!絶対ためになる魅力的なポートフォリオの作り方!エンジニアへの具体的なステップ
プログラミングを学習しただけでは、エンジニアにはなれません。
エンジニアになるための具体的なステップは次の記事で解説しているので、参考にしてくださいね!
【初心者のための】未経験からWebエンジニアになる3ステップ【完全保存版】最短でエンジニアになりたい人は
最短でエンジニアを目指すひとは、プログラミングスクールに行きましょう!
独学でも勉強できますが、時間がかかるのは事実です。
実践的なスキルをつけるにはプログラミングスクールの方が効率的です。
なぜなら、プログラミングスクールだと実践的な課題をやったり、プロのエンジニア講師にいつでも質問できるので独学よりも早く習得できるからです。
初心者の頃は、エラーに遭遇すると挫折しやすいです。プロに教わった方が自分で調べるより遥かに効率的です。
その他にも、プログラミングスクールでは実践的なプログラムが用意されています。独学ではできない体系的なプログラミング学習と転職支援を受けられます。
プログラミングスクールは当たり外れがあると言われてます。実際に、無料のプログラミングスクールで失敗したという人もいます。
こちらの記事では、失敗しないために厳選したプログラミングスクールをまとめています。すぐにエンジニアに転職した方は検討してくださいね!
【転職もサポート】おすすめのプログラミングスクール3選!【現役エンジニアが厳選】まとめ
この記事では、Haskellについてまとめました。
今ではたくさんのプログラミング学習サイトや本があります。実際にコードに触れると、プログラミングの雰囲気を掴めますよ!
皆さんがエンジニアになれるのを応援しています!