バックエンドの開発をする際、どの言語を使えばいいのか悩んでいる方も多いのではないでしょうか?
今回は、バックエンドの中でも一般的なWebアプリを作成するのに役立つ代表的な言語に絞って特徴をご紹介していきます。
※スマホアプリや、機械学習、AIなどの機能が必要なものに関しては今回は除外します。
この記事を読むことで、バックエンドの言語についての理解を深めることができ、実際に個人開発や業務の際にどの言語を使えばいいのか選定しやすくなります。
バックエンドとはユーザーに見えない部分の機能やプログラムのことです。
もう少し具体的に説明すると、ユーザーが入力したデータを保存したり、データを取得してページに表示したり、ユーザーの見えないところで処理を実行しているものをバックエンドと呼びます。
またバックエンドとは反対に、ユーザーから見えるページ内で処理を実行しているものをフロントエンドと呼びます。
こちらはユーザーが文字を入力するformやクリックするボタン、バックエンドのソフトウェアと直接やり取りをする部分のことを指します。
Webアプリとは、インターネット上でブラウザから使用するアプリのことです。
なお、WebアプリとWebページとは下記のような違いがあります。
ユーザーが入力したデータを保存、表示し、ユーザーごとにカスタムされたサービスを提供しているもの
(例)楽天市場、Facebook、クックパッドなど
あらかじめ開発者が用意したページ内容をユーザーが読み込むだけのもの
また同じアプリの枠組みの中でスマホアプリもありますが、スマホアプリはスマホで直接使用するアプリであり、Webアプリはインターネット上でブラウザから使用するアプリといった違いがあります。
次にWebアプリの利用率のランキングをご紹介します。
GitHubが400万のリポジトリからの遠隔測定とエンジニア4万人以上のからの調査回答を組み合わせて公表したという言語利用率ランキングです。
[引用元] https://octoverse.github.com/
以上のランキングをもとに、バックエンドの言語かつ一般的なユーザー向けのWebアプリを作成できる言語に絞ると、 Java、JavaScript、TypeScript、PHP、Rubyの5つが人気であることがわかります。
今回は以上の5つに加え、エンジニアが次に学びたいランキング1位であるGoを合わせて6つの言語をご紹介していきます。
1995年に誕生したコンパイラ言語です。
コンパイラ言語とは、書いたコードを一旦全部翻訳してからプログラムを一気に実行する方式を持った言語のことです。
後述しますが、コンパイラ言語の対になる言語として、インタプリタ言語もあります。
Javaは、セキュリティや実行速度の性能の良さから愛されてきた言語です。
Javaが使われている代表的なサービスとして、「楽天市場」「SUUMO」「Minecraft」などがあります。
銀行のシステムなどセキュリティが必要なシステムではJavaが使われることが多く、
日本でもJavaは多くの企業で使われています。
そのため日本語の情報も充実しており、エラーに陥った際も解決がしやすいです。
オブジェクト指向とは、それぞれの機能を持ったオブジェクト(モノ)を作成することで、部品ごとにコードをまとめることができ、部品同士の組み立て式で開発を可能にするものです。
機能ごとにプログラムを分解しているため、開発する際の分業がしやすく、修正が必要な場合も修正箇所を特定しやすいなど、開発の生産性が上がります。
Javaはコンパイラ言語であるため、書いたプログラムをまとめて実行してくれます。
そのためインタプリタ言語に比べて実行速度が速いです。
Javaは静的型付け言語です。
型を指定することで、プログラムを実行する前に、エラーやバグを指定してくれる、メモリ領域を最適化してくれる、コードが読みやすくなるなどのメリットがあります。
後述しますが、対になる言語として動的型付け言語があります。
※静的型付け言語とは……静的型付け言語の特徴は“一つひとつ型を定義しながらコードを書く”というもの。
JavaはJVMという仮想マシン(パソコンとプログラムとの通訳のようなもの)上で動くプログラムであり、パソコンの機種やOSにかかわらず動作をさせることが可能です。
そのため「特定のパソコンじゃないと動かない」などの問題も起きることなく開発をおこなうことができます。
Javaはオブジェクト指向を使用しているため、コードの保守性や拡張性にも優れています。
また静的型付け言語であり、型の指定を義務付けているので、バグやエラーのリスクを抑えることができます。
セキュリティを意識して開発された言語である点も踏まえて、これらの特徴は大規模開発に向いていると言えるでしょう。
Javaは記述する際のルールが多く、静的型付け言語であることもその理由の一つです。
そのため学習を初めて使い慣れるまでは、時間がかかります。
Rubyで1行で書けるコードもJavaでは4行書かないといけないなど、記述量が多くなってしまうのがデメリットです。
強みである拡張性や保守性なども小規模開発では発揮されません。
記述量も多いため、スピード感を持って開発したい小規模開発には向いていないと言えるでしょう。
Javaはコンパイラ言語であるため、プログラムの実行をしようとするとコード1行ずつではなく全て実行しなければなりません。
そのため開発時のスピードは遅くなります。
1995年に誕生したインタプリタ言語です。
インタプリタ言語とは、書いたコードを1行ずつ機械語に翻訳してそのプログラムを実行する方式を持った言語のことです。
JavaScriptは日本でも使用率が高いため、日本語の情報も多いです。
フロントエンド(画面の見た目)を実装するのに使われてきたJavaScriptですが、最近では、Node.jsの誕生によってバックエンド(裏側)を実装することもできるようになりました。
フロントエンドの処理とバックエンドの処理を同じ言語で書くことで、学習コストを抑えることができるなど、使い勝手のいい言語となっています。
JavaScriptは動的型付け言語であり、型付けを行わなくても作ったものが動く、記述量も少なくてすむなど、コードを直感的に書きやすいなどの特徴があります。
また、構文がシンプルなことも相まって、JavaScriptは学習コストが低い言語だということができるでしょう。
※動的型付け言語とは……変数を定義する際に、string型やnumber型などの型を定義しなくても、変数に文字列を代入したときにstring型に決めてくれる言語です。
ただし、関数を呼び出す際の引数や戻り値には型を指定できます。
インタプリタ言語であるため、プログラムを1行ずつ実行してくれ、プログラムを書きながらエラーの修正など細かくおこなうことが可能です。
修正後の確認も簡単なため、開発の効率が上がります。
動的型付け言語である点は直感的に書きやすく便利である反面、「プログラムを実行するまでエラーが分からない、型付けを厳格に行っていないためバグの温床になる」などのデメリットがあります。
JavaScriptは解析、解釈、変換というプロセスを踏む必要があり、実行速度では他の言語よりも遅くなってしまいます。
また、インタプリタ言語は書いたプログラムを1行ずつコードを実行するため、まとめて実行するコンパイラ言語に比べて、実行速度が遅くなります。
TypeScriptは2012年に誕生しました。
TypeScriptはJavaScriptから派生して誕生した言語であり、TypeScriptをコンパイル(変換)する際にJavaScriptに変換されます。
近年の中でも特に人気が上昇している言語であり、JavaScriptよりも基本的にTypeScriptを使うような流れがあります。
JavaScriptが動的型づけであるのに対して、TypeScriptは、静的型づけの言語となっています。
これにより厳格な型の指定をおこなうことが可能になり、コーディング中に型のエラーに気づけたり、可読性をあげることができるため、中〜大規模な開発で有利になります。
TypeScriptは静的型付け言語です。
型を指定することで、プログラムを実行する前に、エラーやバグを指定してくれる、メモリ領域を最適化してくれる、コードが読みやすくなるなどのメリットがあります。
小規模〜大規模開発までこなすことができます。
小規模であっても、ある程度のコード量があるならTypeScriptを使うことをお勧めします。
JavaScriptとの棲み分けとしては、個人開発などの小規模の開発でコード量が少ない場合はJavaScript、その他の開発はTypeSctiptでおこなうといった棲み分けでいいでしょう。
JavaScriptというわかりやすい言語から派生した言語のため、他のJavaなどの言語に比べて学習コストは低いです。
最近誕生した言語のため、情報が少なく、エラーに陥った際に解決法を見つけるのに苦労する場合があります。
1994年に誕生したインタプリタ言語です。
Webサイトやブログを簡単に作成できるWordPressは、世界のWebサイトでの使用率は43%、CMSでの使用率では65%と圧倒的使用率であり、PHPから作られています。
[参考] https://kinsta.com/jp/wordpress-market-share/
PHPが使われている代表的なサービスとしては、「Facebook」「Slack」「ぐるなび」などがあります。
※CMSとは……テキストや画像、デザインなどを保存、管理できる 「コンテンツ マネジメント システム」の略
PHPは前述したようにWebサイトを作成する際の使用率も高く、日本でも高い使用率を誇っています。そのため日本語の情報が多く、学習もしやすいです。
PHPもオブジェクト指向言語であり、それぞれの機能を持ったオブジェクト(モノ)を作成することで部品ごとにコードをまとめることができ、開発効率を上げることができます。
PHPは比較的自由にプログラムを書ける言語です。
同じ処理でもさまざまなプログラムの書き方があり、日本語の情報も多いことも相まって学習コストも低いと言えるでしょう。
PHPはインタプリタ言語であるため、プログラムを1行ずつ実行してくれ、プログラムを書きながら、エラーの修正など細かくおこなうことが可能です。
サーバーサイドの言語でありながら、HTMLの中にPHPの処理を埋め込んで書くことができるなど、Web開発に特化していて使いやすい言語です。
記述量が少なくても開発ができ、型の定義をしなくても動くものを作れる点など、小規模開発などでスピード感を持って開発したいときにはPHPが向いています。
また、サービスをリリースし、問題があれば都度修正をおこなう、といった開発にも向いています。
PHPは、さまざまな書き方ができるため、初学者にもお勧めの言語ですが、開発者によって、書き方が違うことは、複数人で共同開発を行う上では、可読性が落ちてしまうなどのデメリットになります。
また、動的型付け言語である点は直感的に書きやすく便利である反面、「プログラムを実行するまでエラーが分からない、型付けを厳格に行っていないためバグの温床になる」などのデメリットがあります。
インタプリタ言語のため実行速度はコンパイラ言語に比べて遅いです。
開発する人数が増えるほど、コードの可読性や厳格な型付けは必要になり、“読みやすさ”が重視されます。
自由にコードを書けるPHPでは、型がわからない、開発者によってコードの書き方が違うなど、“読みやすさ”が失われてしまうことがあります。
そのため大規模開発には向いていないと言えるでしょう。
動的型付け言語のため、プログラム実行時にエラーのチェックなどをすることになります。
そのため、プログラムを実行する前に型のエラーなどに気付きにくく、生産性が落ちることもあります。
1993年に誕生したインタプリタ言語で、日本人のまつもとゆきひろ氏によって開発されました。
人気な言語の中でも日本人が開発した数少ない言語であり、その使いやすさから多くの開発者に親しまれる言語となりました。
Rubyが使われている代表的なサービスとして、「クックパッド」「Hulu」などがあります。
Rubyの特徴についてですが、PHPと似ている部分も多く、よく比較されます。性能の差に若干の差があるものの、大きな違いはありません。
少しだけ両者の違いについて記述しておくと、
PHPの強みは、ブログやECサイトを作成する際のシステムなどが豊富で、利用人数も多く情報が多いこと。
Rubyの強みは、PHPよりも若干型付けのルールが厳しいためエラーに強く、記述量が少ないこと。
強いていうなら少規模でブログやECサイトを作成するならPHP、中規模でWebアプリを作成するならRubyが向いているといえます。
Rubyは日本人のまつもとゆきひろ氏が開発した言語であることや、少ない記述量でコードを書くことができるため、日本でも多く使われています。
そのため情報量も多く、エラーに陥った際に解決法を見つけやすいです。
Java同様オブジェクト指向言語であり、それぞれの機能を持ったオブジェクト(モノ)を作成することで部品ごとにコードをまとめることができ、開発効率を上げることができます。
日本語の情報量も多く、少ない記述でシンプルにコードを書くことができるRubyは学習コストが低いといえます。
Rubyはインタプリタ言語であるため、プログラムを1行ずつ実行してくれ、プログラムを書きながらエラーの修正など細かくおこなうことが可能です。
Javaで4行コードを書かないといけない処理もRubyだと1行で書けるなど、他の言語に比べて少ない記述量で書ける点も人気の理由です。
動的型付け言語である点は直感的に書きやすく便利である反面、「プログラムを実行するまでエラーが分からない、型付けを厳格に行っていないためバグの温床になる」などのデメリットがあります。
インタプリタ言語のため実行速度はコンパイラ言語に比べて遅いです。
2009年に誕生したコンパイラ言語です。
比較的新しい言語で、シンプルに書くことをテーマに作られた言語です。
2020年エンジニアが次に学びたい言語ランキングでも1位になっており、人気が上昇中の言語です。
[引用元] hackerrank.com [pdfファイル] 2020 HackerRank Developer Skills Report
Goはコンパイラ言語であるため、書いたプログラムをまとめて実行してくれます。
そのためインタプリタ言語に比べて実行速度が速いです。
Goは静的型付け言語です。
型を指定することで、プログラムを実行する前にエラーやバグを指定してくれる、メモリ領域を最適化してくれる、コードが読みやすくなるといったメリットがあります。
Goはコンパイラ言語ですが、コンパイラ言語の中では珍しく少ない記述量で比較的簡単に書くことができます。
また記述ルールが厳格に決まっており、書きやすく読みやすいコードを実現しています。
コードがシンプルである点、記述ルールが厳格に決まっている点など、小規模〜大規模に対応できるマルチな言語であるといえます。
GoはコンピュータのCPUに複数の動作を同時に行わせることができます。
そのため処理速度を高めたり、CPUに負担をかけないようにすることが可能です。
Goは比較的新しい言語であるため、情報量が少なくエラーに陥った際に解決法を見つけるのに苦労するかもしれません。
Goではシンプルな設計にするため他の言語にある機能が省かれています。
上記の機能を省くことによってよりシンプルにコードを書けるようデザインされていますが、本当に上記の機能が必要な場合は、他の言語を使うのがいいかもしれません。
以下、それぞれの言語の違いを簡単に表にまとめました。
◎、◯、△の三段階で評価をつけています。
いかがでしたでしょうか?
今回はバックエンドの言語の中でも、利用率の高いものを6つ紹介しました。
それぞれの言語に得意不得意があるため、ご自身の目的に合わせて使う言語を選んでみてください。
またクランチタイマーでは、フルリモートで一緒に働くエンジニアを募集中です。
詳細は、以下のWantedlyページをご確認ください。
SHARE:
お気軽にお問い合わせください。
TEL082-299-2286
代表の佐々⽊が⽉に1回お届けするメールマガジン。
国内外スタートアップの最新情報や最新技術のサマリー、クランチタイマーの開発事例紹介など、ITに関する役⽴つ情報を中⼼にお送りします!