Edited at

いつもお世話になっているあのソフトウェアがどの言語で書かれているか調べてみた

More than 1 year has passed since last update.

「次に勉強するべきはどの言語?」を考えるための材料として、身近にあるソフトウェアが何言語で書かれているかをリストアップしてみました。

リストは完全に私の独断によるもので、特に他意はありません。

アプリケーションよりはミドルウェア寄りな視点になっています。

ジャンル分けも適当です。

ジャンル
名前
言語

OS
Linux Kernel
C

OS
Windows
C++

RDBMS
MySQL
C/C++

RDBMS
PostgreSQL
C

WebServer
Apache
C

WebServer
Nginx
C

WebServer
h2o
C

KVS
redis
C

KVS
memcached
C

KVS
tokyotyrant/tokyocabinet
C

KVS
kyototycoon
C++

DB
MongoDB
C++

DB
ElasticSearch
Java

Logger
Fluentd
Ruby

Tool
Embulk
Java

CI
Jenkins
Java

PackageManager
yum
python

PackageManager
apt
python

PackageManager
homebrew
ruby

Firewall
firewalld
python

Browser
GoogleChrome
C++

ImageManipulation
ImageMagick
C

VCS
git
C

Language
Perl
C

Language
PHP
C

Language
Ruby
C

Language
HHVM/Hack
C++

Language
go
go

Language
node/v8
C++

Tool
Gnu coreutils
C

Tool
AWS CLI
python

DevTool
peco
go

DevTool
ghq
go

DevTool
Vagrant
Ruby

ProccessManager
supervisord
Python

Provisioning
Ansible
Python

Provisioning
Chef
Ruby

Provisioning
Berkshelf
Ruby

Provisioning
ServerSpec
Ruby

Container
Docker
go

Container
kubernetes
go

Container
rkt
go


リストアップしてみての感想


  • ミドルウェアや言語処理系ではまだまだC言語が広く使われている。特に2014年に登場したh2oがCで書かれているのは特筆するべき。

  • 最近のミドルウェア/処理系ではC++を使っているケースもちらほらある。代表例はChrome,MongoDB,node.js,HHVMなど。

  • Java製ツールは(自分の身近には)あまり多くない。embulkがJava製なのは要注目。

  • 2009-2013年あたりに登場したインフラ系プロダクトではRuby製が多い。ただ最近ではGoに押され気味。

  • 2013年以降、Go製のツールが急に増えてきた印象がある。


各言語について思うところ

(特定の言語をDisる意図はありません)


C

既存ミドルウェアでC製のものが多いので、トラブルシューティングをしたりパッチをあてたりするにはC言語とその周辺ツール(make,gdb,lddなど)の知識は必要。

スクリプト言語のモジュールでも、速度が要求されるものはたいていCで実装されている。(PerlのXS、PHPのextension、Rubyのgem)

Linux KernelがC言語で書かれているのは大変重要で、これはこの先も当分変わらなそう。


C++

MongoDB,node.js,HHVMなどを皆が使っているわけではないので、もし現場でC++製ツールを使っていないなら、勉強せずにスルーしてもいいかもしれない。将来的にgoやrustに取って代わられる可能性が高そう。


Java

Java製のツールで広く普及してるものといえばJenkinsくらいしか思いつかない。

古き良き言語で若干時代遅れだと思われていたが、Java8でキラキラ感を取り戻した感あるので、今後じわじわくるかもしれない。


Perl

Perl製のツールって最近あまり聞かない気がする。昔は鯖管=Perlなイメージがあったが、近年はその市場をRuby/Goに奪われた感ある。かなしい。


PHP

PHP製のツール・ミドルウェアというのはほぼ皆無である。

PhpMyAdminとかWordpressとか「アプリケーション」的なものが多い。

PHPプログラマは他言語を勉強しないとやっていけないが、他言語プログラマはPHPを勉強しなくてもやっていけるのである。

rebuildfmでPHP書ける人が登場しないのはつまりそういうことである。


Ruby

Infrastructure as code をやるなら多少なりとも読み書きできる必要がある。

Chef/Vagrant/Fluentdの登場で、インフラの言語としてかなり定着してる感ある。DSLの書きやすさ、プラグイン機構の作りやすさが、インフラ系で採用される大きな決め手になったと思われる。


Python

主要なLinuxディストリビューションに最初から入ってるスクリプト言語は今やpythonだけである。yum/apt/firewalldなどOSのコアに近い部分で縁の下の力持ちとして働いている。

が、最近のツールでpython製のものはだいぶ少なくなってきている気がする。

広く使われているものとしてはaws-cliがあるが、将来的にこれはGo言語で置き換わりそうな気がする。

pythonは勉強しなくても何とかなるかもしれない。

元々欧米では広く使われていた、科学計算ライブラリが豊富、だったところに、機械学習という強い追い風がきたので、今後重要性が高まってきそう。


Go

2014年以降に書かれたCLIツールはGo製のものが大変多い。CLI分野ではRubyをしのぐ勢いがある。

例えばhubコマンドはもともとRuby製だったのがver 2からはGo言語で書きなおされていることがそれを象徴している。

またコンテナ系でよく使われているので、コンテナ技術を深堀りするためには避けては通れない。


Rust

C,C++言語を置き換えるかのようなコンセプト・可能性がある。将来どこまで勢力を広げるかは未知数。


結論

これから自分が勉強するべきなのはC/Go/Ruby/Rustあたりか。

(それとは別にアプリケーション用言語としてJS/Java/Swiftを勉強する必要もある)