2020年現在 Web系企業で採用されてる技術についてまとめてみた

# はじめに
2020年も始まりましたね！
タイトル通りですが、2020年現在スタートアップや大手のWeb系IT企業で採用されている、トレンドとなっている技術についてそれぞれのジャンル毎に求人や採用ページ、ブログを元にまとめてみました。
いくつかピックアップしている形になるので、記述できてないものもありますが、ご了承くださいm(＿ ＿)m
(適宜アップデートしていきたいと思います。)
(自分のメイン領域がバックエンドなので、そちらに偏っていると思います)

# 言語編
## Ruby
サーバーサイドのスクリプト言語、動的型付け言語です。
まつもとゆきひろさん（Matzさん）により開発されたオブジェクト指向スクリプト言語。
日本生まれの言語です。 
整数や文字列なども含めデータ型はすべてがオブジェクトであり、純粋なオブジェクト指向言語です。
有名なフレームワークである `Ruby on Rails` を使うと開発スピードが早く、
スタートアップで採用されやすい言語だと思います。
https://github.com/ruby/ruby

### 代表的なフレームワーク
* Ruby on Rails
　言わずと知れた有名フルスタックフレームワーク。
　Model View Controller（MVC）アーキテクチャに基づいています。
　Rubyのフレームワークの中でも、採用事例が多いのでは無いでしょうか。
　https://github.com/rails/rails

* Sinatra
　こちらは `Ruby on Rails` に比べて、MVCアーキテクチャに基づかない設計で作成されており、
　全体のサイズも小さく、シンプルです。
　`Ruby on Rails` を採用するほどでも無い場合に是非。
　https://github.com/sinatra/sinatra

## PHP
  サーバーサイドのスクリプト言語、動的型付け言語です。
  WEBアプリ・サービス開発に特化した言語と言われており、
  比較的初心者に優しい？言語と言われています。
  (型が無いので個人的には優しいのか微妙な気がしますが・・・。)
  一応PHP7.Xから、`declare(strict_types=1); `で型付けができるようにはなっています。
  開発スピードが早く、こちらも `Ruby` と同じくスタートアップで採用されやすい言語だと思います。
  https://github.com/php/php-src

### 代表的なフレームワーク
* Laravel
　Model View Controller（MVC）アーキテクチャに基づいた、フルスタックフレームワークです。
　フレームワークに要求される機能がほとんど実装されており、
　こちらもPHPでの採用事例が多いのでは無いでしょうか。
　https://github.com/laravel/laravel

* Symfony
　こちらも `Laravel` と同じく、
  Model View Controller（MVC）アーキテクチャに基づいた、フルスタックフレームワークです。
  バージョン1.0のリリースが 2007年1月と比較的古く、息の長いフレームワークです。
  (今はバージョン4.X系です。)
  https://github.com/symfony/symfony

## Python
　サーバーサイドのスクリプト言語、動的型付け言語です。
　同じ数の空白でインデントされたまとまりを一つのブロックと認識します。
　Webアプリケーションやデスクトップアプリケーションといった様々なシステムの開発が行えます。
　科学計算、機械学習の分野において採用されるケースが多いです。
　https://github.com/python

### 代表的なフレームワーク
* Django(ジャンゴ)
　Model-Template-View（MTV）アーキテクチャに基づいた、フルスタックフレームワークです。
　フレームワークに要求される機能がほとんど実装されています。
　PythonでWebアプリケーションを作る場合に、採用されることが多いです。
　https://github.com/django/django

* Flask(フラスク)
　`Django` に比べて、軽量なマイクロフレームワークです。
　標準で提供する機能を最小限に保っているようで、拡張性が高く、シンプルなフレームワークです。
　`Django` だとオーバースペックな場合に是非。

## Go(Golang)
Googleによって開発された、静的型付け言語になります。
`Go` といった言語名がググりにくいためか、 `Golang` の呼び方が親しまれています。
並行処理が言語レベルでサポートしており( `goroutine` )、 
コンパイルの速さ、メモリ安全性、パフォーマンスの良さから、ここ数年採用されるケースが増えている気がします。
また、フレームワークを使わないケースが増えている言語です。
https://github.com/golang/go

### 代表的なフレームワーク
* Gin
Webフレームワークです。
比較的軽量で、シンプルなフレームワークだと思います。
他のフレームワークに比べて、速いらしいです。
https://github.com/gin-gonic/gin

* Revel
`Gin` に比べて、フルスタックなフレームワークです。
webアプリケーション開発に必要な機能は揃っているようです。
(まだ触ったことがなく・・。すみません・・・。)
https://github.com/revel/revel

## Java
オブジェクト指向型のサーバーサイドの言語です。
有名な言語なので、IT業界にいれば聞いたことがない方はあまりいないのでは無いでしょうか。
静的型付け言語として有名で、業務システムの開発に用いられているケースが多いです。
事前にコンパイルするため、比較的実行速度が速く、様々なシステムで用いられています。
https://java.com/ja/download/mac_download.jsp

### 代表的なフレームワーク
* Spring Boot
Spring FrameworkベースのWebフレームワークです。
アノテーション(annotation)を使って機能を実装することができ、
コーディング量が減る印象があります。
また、 `Spring Framework` に比べてXMLの記述量も少なく、
わかりやすい構成にすることができます。
https://spring.io/projects/spring-boot

* Play Framework
`Scala` と `Java` で書かれたWebアプリケーションフレームワークです。
Model View Controller (MVC) アーキテクチャを採用しています。
`Ruby on Rails` 、 `Django` から大きな影響を受けたフレームワークらしいです。
https://www.playframework.com/


## Scala
オブジェクト指向言語と関数型言語の特徴を統合したマルチパラダイムのプログラミング言語です。
`Java` と同様のプラットフォーム(Java仮想マシン)で動きます。
`Java` 等のようなオブジェクト指向な書き方もできるし、関数型言語の書き方もできる言語です。
個人的には、少し玄人向きな言語なイメージです。
https://github.com/scala/scala

### 代表的なフレームワーク
* Play Framework  
`Scala` と `Java` で書かれたWebアプリケーションフレームワークです。  
Model View Controller (MVC) アーキテクチャを採用しています。  
`Ruby on Rails` 、 `Django` から大きな影響を受けたフレームワークらしいです。  
https://www.playframework.com/

## Kotlin
IntelliJ IDEAを開発している、JetBrains社が開発している言語です。
`Java` をもっと簡潔・安全になるように改良した言語らしいです。
Java仮想マシン上で動くため、Java言語と互換性があります。
Androidアプリでの開発に用いられるケースが多く、
最近ではサーバーサイドでの採用例も増えてきているように思えます。
https://developer.android.com/kotlin?hl=ja

### 代表的なフレームワーク
* Spring Boot
Spring FrameworkベースのWebフレームワークです。
アノテーション(annotation)を使って機能を実装することができ、
コーディング量が減る印象があります。
また、 `Spring Framework` に比べてXMLの記述量も少なく、
わかりやすい構成にすることができます。
https://spring.io/projects/spring-boot

* Ktor
`Kotlin` 純正のWebフレームワークです。
Spring Bootに比べてサイズも比較的小さく、
ちょっとしたものやマイクロサービスを作るならこちらを使ってみるのも良いのかと思います。
https://github.com/ktorio/ktor

## Swift
AppleのiOSおよびmacOS､Linuxで利用出来るプログラミング言語です。
iOSアプリの開発に用いられることがほとんどです。
自分がバックエンドエンジニアなので、あまり詳しくなくてすみません・・・。
https://www.apple.com/jp/swift/

## JavaScript
JavaScriptはウェブブラウザ上で動作するスクリプト言語です。
最近では `Node.js` といったサーバーサイドの実行環境も出てきており、
Web開発の全領域で使用されています。

## TypeScript
マイクロソフトによって開発された、 `JavaScript` のスーパーセットです。
`JavaScript` に対して、静的型付けとクラスベースオブジェクト指向を加えた言語です。
`JavaScript` に比べて型があるため、入力補完により、エラーの発見や防止が容易になります。

### 代表的なフレームワーク
* Vue.js
`JavaScript`のフレームワークで流行っている御三家です。
コミュニティによって開発されています。
他フレームワークに比べて部分的に採用可能な印象があります。
https://github.com/vuejs/vue

* React
`JavaScript`のフレームワークで流行っている御三家です。
Facebookとコミュニティによって開発されています。
Webアプリケーションのみならず、 `React Native` という
スマホアプリを開発することができるモバイルアプリケーションフレームワークにも使用されています。
https://github.com/facebook/react

* Angular
`JavaScript`のフレームワークで流行っている御三家です。
Googleとコミュニティによって開発されています。
フルスタックフレームワークな印象があります。
https://angular.jp/

# インフラ
## クラウドコンピューティングサービス
### AWS(Amazon Web Services)
Amazon Web Servicesとは、Amazon.comにより提供されているクラウドコンピューティングサービスです。
本当に多機能なので、ここでは詳細を割愛させてください・・・。
他の方が紹介されている記事が下記になります。
[「AWS is 何」を3行でまとめてみるよ](https://qiita.com/kohashi/items/1bb952313fb695f12577)

### GCP(Google Cloud Platform)
Google Cloud Platformとは、Googleが提供しているクラウドコンピューティングサービスです。
本当に多機能なので、ここでは詳細を割愛させてください・・・。
他の方が紹介されている記事が下記になります。
[[GCP] GCPサービスを勝手にまとめてみた](https://qiita.com/risa0320/items/5f34bc9102e575705274)

### Azure(Microsoft Azure)
Microsoft Azureは、マイクロソフトのクラウドプラットフォームです。
こちらも本当に多機能なので、ここでは詳細を割愛させてください・・・。
他の方が紹介されている記事が下記になります。
[[PublicCloud対比表(AWS/Azure/GCP/Softlayer)](https://qiita.com/nntsugu/items/2428a15e67de42d66947)

## アプリケーションプラットフォーム
### Firebase
現在Googleが管理・開発しているBaaS（Backend as a service）です。
バックエンド(サービスの内、表立って見えない部分。データの処理や保存等々の処理)を意識せずにサービスを開発することができます。
モバイルアプリ開発に使われることも多いので、mBaaS(mobile backend as a Service)と呼ばれたりもします。
https://firebase.google.com/?hl=ja

### Heroku
少し前にSalesforceが買収した、PaaS(Platform as a Service)です。
ユーザーのインフラ管理が不要で、 `git push` を行うだけでリリースが行えたり、
各種アドオンの追加で、ミドルウェアのインストールを行うことができます。
https://jp.heroku.com/

## 仮想化技術
仮想環境を作る技術になります。
一旦作成してしまったら、それを他者に共有したり、その環境をサーバーに配置したりすることができます。
近年のホットワードだと思います。

### Docker
コンテナと呼ばれるOSレベルの仮想化環境を提供するオープンソースソフトウェアです。
仮想化を行うツールの中ではディスク使用量は少なく、仮想環境作成や起動は速いです。
最近かなり採用事例の多い、キャッチアップすべき技術だと思います。
https://www.docker.com/

### Kubernetes(k8s)
コンテナ化したアプリケーションのデプロイ、スケーリング、および管理を行うための、
コンテナオーケストレーションシステムです。
Docker等で構築されたコンテナの管理を行うことができます。
こちらもかなり採用事例の多い、キャッチアップすべき技術だと思います。
https://kubernetes.io/ja/

## マイクロサービス関連技術

### Istio
マイクロサービスとネットワークの間に、「サービスメッシュ」と呼ばれるレイヤを挟み、
マイクロサービス間を接続するネットワークのルーティング、ロードバランシング、
通信の暗号化等々を行なってくれるプラットフォームです。
https://istio.io/

## 構成管理ツール
あらかじめ設定ファイルを作成することで、
それを元にミドルウェアやリソースの配置を行う技術です。
一つ設定ファイルを作っておけば、同様の環境を複数立ち上げることができます。

### Terraform
クラウド上のリソース(AWSのインスタンス等々)を定義ファイルに沿った形になるように生成・配置してくれるツールです。
構築手順を書くのではなく、完成系を定義ファイルに宣言することで、その構成にしてくれます。
https://www.terraform.io/

### Ansible
レッドハットが開発するオープンソースの構成管理ツールです。
あらかじめ用意した設定ファイルに従って、ソフトウェアのインストールや設定を自動的に実行する事が出来ます。
`Python` で作成されています。エージェントレス(設定先サーバーにエージェントを入れる必要がない)なことが特徴です。
https://github.com/ansible/ansible

### Chef
`Ruby` `Erlang` で記述された構成管理ツールです。
Ansibleとは異なり、設定先サーバーにエージェントを入れる必要があります。
`Ruby` で記述するため、 `Ruby` が好きな方にはぴったりです。
https://github.com/chef/chef

# インフラ監視・分析
## Datadog
クラウド型の監視アプリケーションサービスです。
SaaSベースのデータ分析プラットフォームを介して
サーバー、データベース、ツール、およびサービスの監視を提供します。
https://www.datadoghq.com/ja/

## Mackerel
はてなが開発したサーバー管理・監視サービスです。
仮想サーバーなどクラウドサービスをMackerelで統合管理および監視することができます。
https://mackerel.io/ja/

## Prometheus
SoundCloudが中心になって開発しているプル型のリソース監視ツールです。
サーバー管理・監視や、しきい値を超えた場合のアラート等を行うことができます。
UIがかっこいいです。
https://prometheus.io/

## Zabbix
ネットワーク管理のソフトウェアです。
こちらもサーバー管理・監視や、しきい値を超えた場合のアラート等を行うことができます。
C言語、PHP、JavaScriptで記述されてるらしいです。
2004年に初版がリリースされ、比較的歴史が長いツールです。
https://www.zabbix.com/jp

## Sentry
イベントログ収集(エラー検知)のSaaSサービスになります。
バックエンドのエラーのみならず、フロントエンドのエラーを収集して、可視化することができます。
https://sentry.io/

## New Relic
インフラからアプリケーションまで監視・分析してくれるSaaSサービスになります。
https://newrelic.co.jp/

# 可視化ツール
## Looker
シリコンバレーで開発された、データ探索のプラットフォームです。
GitHubと連携して定義のバージョン管理が可能なため、
エンジニアライクなツールだと思います。
https://www.ksk-anl.com/product/looker/

## Redash
オープンソースで提供されているダッシュボードツールです。
RDBのみならず、TreasureDataやBigQueryをデータソースとして、
グラフ等の可視化を行うことができます。
無料は正義。
https://github.com/getredash/redash

# バージョン管理
バージョン管理は現状ほぼ `Git` 一択だと思いますので、
プラットフォームをいくつか紹介したいと思います。

## GitHub
もう説明不要かと思いますが、 `GitHub` です。
ソース共有を行えたり、プルリクエストベースでレビューを行うことができたり、
Issuesを使って課題管理を行うことができます。
https://github.co.jp/

## GitLab
GitLab Inc.が開発したウェブ型のGitリポジトリマネージャーです。
ローカル環境にインストールすることもできます。
海外からの人気が高い？気がします。
https://about.gitlab.com/

## Bitbucket
アトラシアンが開発、運営しているGitリポジトリマネージャーです。
こちらは使ったことがないですが、 `Jira` `Confluence` といった
他のアトラシアン製品と相性が良いのでしょうか。
だいぶ太っ腹で、無料でプライベートリポジトリを無制限に持てたりもします。
https://www.atlassian.com/ja

## GitBucket
オープンソースのGitHubのクローンアプリです。
個人が所有する環境に自由にインストール可能です。
無料は正義。
https://github.com/gitbucket/gitbucket

# CIツール
GitHub等へのpushをトリガーとして、
テスト・コード解析・ビルド・デプロイを自動化することができます。

## CircleCI
クラウド型のCIツールです。
CIツールの中でも、国内の採用事例が最も多いサービスだと思います。
https://circleci.com/ja/

## Travis CI
クラウド型のCIツールです。
ごめんなさい。使ったことないので特に記述できませんでした・・・・。
https://travis-ci.org/

## Jenkins
Javaで書かれたオープンソースのCIツールです。
オープンソースなため、好きな環境にインストール可能です。
無料は正義。
https://jenkins.io/

## GitHub Actions
今注目の、GitHubが公式でリリースしたCIツールです。
GitHubとの親和性は高いのではないでしょうか。
(他のツールも十分ですが・・・。)
https://github.com/features/actions

# コミュニケーションツール
他社とのコミュニケーション用のツールです。
現在はチャット形式が主です。

## Slack
もう説明不要かと思いますが、 `Slack` です。チャット形式でコミュニケーションをとることができます。
Slackという名前は `Searchable Log of All Conversation and Knowledge` から取ったらしいです。
(知りませんでした。。。)
各種クラウドサービスとの連携が豊富です。
https://slack.com/

## Chatwork
Chatwork株式会社が開発した、ビジネスチャットツールです。
テキストメッセージだけでなく、PDF・画像ファイル・ドキュメントなど、
様々なもののアップロード・共有が可能です。
https://go.chatwork.com/ja/index.html

# 情報共有ツール
いわゆる社内wikiです。

## Confluence
アトラシアンによって開発された、Webベースの企業向けwikiのSaasです。
web上でwikiを記述し、チームに展開することができます。
アトラシアン製なので、 `Jira` 、 `Bitbucket` との相性が良いです。
https://www.atlassian.com/ja/software/confluence

## esa
「情報を育てる」という視点で作られた、自律的なチームのための情報共有のSaasです。
Markdown形式で書くことができます。
アイコン・デザインが可愛らしいです。
https://esa.io/

# プロジェクト管理ツール
プロジェクトを進めていく上で必要な、プロジェクト管理ツール(タスク管理ツール)です。

## Asana
タスク管理ツールのためのSaasです。
UIがシンプルで見やすく、直感的な操作が可能です。
https://app.asana.com/

## Trello
ふせんのような形でタスクの管理を行うことのできるSaasです。
こちらもUIがシンプルで見やすく、直感的な操作が可能です。
https://trello.com/

## Jira
アトラシアンによって開発されたプロジェクト管理ツールで、
バグトラッキングや課題管理、プロジェクト管理に用いられます。
https://www.atlassian.com/ja/software/jira

## Redmine
Webベースのプロジェクト管理ツールです。
オープンソースなため無料で使うことが出来、
各種プラグインも豊富に揃っています。
http://redmine.jp/overview/

# 最後に
各種技術・ツールだけでもかなり量が多く、ここでは紹介し切れていないけど採用事例の多い要素や技術がまだまだたくさんあります。
(書ききれずにすみません・・・。特にAWS/GCP/Azureは多い・・・。)

いづれの技術もそれぞれメリット・デメリットがあるかと思いますので、
会社のフェーズ・人員・サービスの特性を考慮した上で、最適な選択をしていきたいものです。
それぞれの技術、どんなものなのかを知っておくことで、いざ選定するときに役立ってくると思います。
ここで紹介した技術はいづれも採用事例もあり、比較的トレンドなものなので、技術選定時にご参考にして頂き、
気になるものがあれば詳しい内容はググって頂けたら良いかと思います。
長い記事になりましたが、読んで頂きありがとうございました！

# 共に働くWebエンジニアを募集しています!
不動産SHOPナカジツでは自社サービスを作っていく仲間を募集しています。
詳しくは[Wantedly](https://www.wantedly.com/projects/134741)からお問い合わせください。