C言語で開発されているもの

C言語で開発されているものまとめページのアイキャッチ

このページでは、C言語 がどのようなものを開発する際に利用されているのか?について解説していきたいと思います。

このページを書いた目的は、C言語 学習者に C言語 学習のモチベーションを上げていただくためです。

C言語 を学んでいるけど、今後使うのか不安・役に立つのか謎という思いを持っている方もおられると思いますし、単位を取るためだけにしょうがなく C言語 を学んでいるという方も多いと思います。

そういった方々に、C言語 がどれだけ多く利用されているかを知っていただき、それにより C言語 の勉強のモチベーションアップに繋がることを期待しています。

今現在世界中で動作しているソフトウェアの中で、おそらく C言語 で書かれたソフトウェアが最も多いのでは無いかと思います。実際に調べたわけでは無いですが、それだけ重要かつ幅広い分野で使用されています。

なので、C言語 を学習しておけば、今後の就職先等でその知識や技術を活かせる機会は多いと思います。

それでは、具体的に C言語 を用いてどんなものが開発されているのかについて解説していきます。

MEMO

本ページの情報は 2021/8/28 時点の情報になります

特に各企業様の採用ページを参考にして記述している情報は、今後変化していく可能性がありますので注意してください

OS

結構有名な話だと思いますが、C言語 は OS の開発に利用されています。あなたが今現在使っている OS にも、おそらく開発には C言語 が利用されています!

例えば下記の OS については、C言語 が開発に使用されていることを Wikipedia などからも確認することができます。

  • Unix
  • Linux
  • Windows
  • Android
  • macOs
  • iOS

OS 全体が C言語 で書かれているわけではありませんが、カーネル(OS の中核部分)は C言語(及びアセンブラ)で書かれていることが多いようです。 

例えば Android に関してはソースコードが公開されていますので、そのソースコードより C言語 が多く利用されていることが確認できます。

下記のページからソースコードを取得することができますので、興味のある方は読んでみると面白いかもです。めちゃめちゃファイル多いので読むの大変ですが…。

https://source.android.com/

また、Windows10 ではカーネルがほぼ C言語 で書かれている&カーネル以外にも C言語 が利用されていることが下記に記載されています。

https://www.quora.com/Which-programming-language-is-used-for-making-Windows-10/answer/Axel-Rietschin

なので、C言語 は将来 OS を開発したいような人にはうってつけのプログラミング言語になります。

上記のような一般的な OS を開発する方はごく僅かだと思いますが、自社で独自の OS を開発したりする会社もあったりするので、そういった会社に入社した際には OS の開発に携われる可能性もあるかなぁと思います。

とにかく OS を開発することで、コンピュータやハード制御など非常に多くのことを学ぶことができます。下記のような OS を自作するための参考書もあったりするので、OS 開発に興味がある人、C言語 を極めたい人は読んでみると楽しめると思います。

もっと新しい OS の自作本だと下記のようなものもあります(ただし、C++)。

また、組み込みについても一緒に学びたい方については下記のような参考書もオススメです(組み込みでは汎用的な OS ではなく組み込み向けの OS を使用することが多いです)。

プログラミング言語

また、プログラミング言語も C言語 で開発されているものが多いです。

有名どころでいくと下記のようなプログラミング言語が主に C言語 で開発されています。

  • Python
  • PHP
  • Ruby

PHP に関しては下記でソースコードが公開されており、C言語 で記述されていることが確認できます。

https://www.php.net/

例えば、このページを表示するためのデータ(HTML)は WordPress というソフトウェアが作成してくれています。この WordPress は主に PHP で記述されていますが、結局 PHP スクリプトが実行される時には C言語 プログラムが動作しているということになります(つまりC言語で記述された関数が実行されている)。

また Python であれば、GitHub からソースコードをダウンロードすることができ、C言語 で記述されていることが確認できます(Python は Java で実装されたものもあります)。

https://github.com/python/cpython

考え方によっては、これらのプログラミング言語で記述したプログラムは、C言語 プログラムをより簡単に実行するためのものであると考えられますね!

なかなかプログラミング言語を作成するような機会はないかも知れませんが、これらの人気のあるプログラミング言語を支えているのは C言語 であることを考えれば、C言語 の学習のモチベーションも上がるのではないでしょうか?

もちろん、C言語 を用いてプログラミング言語の開発に挑戦することもできます。例えば下記の「まつもとゆきひろ 言語のしくみ」では、Ruby の開発者が “プログラミング言語の作り方” を解説した書籍になります。

プログラミング言語の開発や、プログラミング言語がどうやって作られているのかに興味あるような方は楽しく読むことができます(プログラミング言語を作成するときにどのようなことを考える必要があるのかについて解説されていますが、C言語 の参考書でもないですし、読めばプログラミング言語がすぐに作れるというものではありませんので注意してください。ただ読み物としてはすごく面白いです)。

また、上記のプログラミング言語が C言語 で記述されているということは、上記のプログラミング言語で出来ることは C言語 でも実現することができると考えられます。

例えば Python などにはガベージコレクションという機能があります。PythonC言語 で作られているのであれば、こういった機能も C言語 で作成することができるはずです。

C言語 には無いけど他のプログラミング言語にある機能を、C言語 で実現するためにはどのようにプログラミングしなければならないかを考えてみるのも面白いですし、これにより更に C言語 やコンピュータの知識を深めこともできると思います!

スポンサーリンク

ライブラリ

また、各種プログラミング言語から利用されるライブラリも C言語 で記述されているものが多いです。

例えば Python には NumPy という数値計算を行うライブラリが存在します。このライブラリも C言語(及び Fortran)で記述されています。

これは、下記の GitHub のソースコードより確認することができます。

https://github.com/numpy/numpy

なぜ C言語 で記述されているかというと、これは “C言語 が高速だから” という点が主な理由になると思います。

はっきりいって、PythonC言語 などに比べると非常に遅いです。なので、ループの中で大量に演算を行うような処理は向きません。

ですが、そういった重い処理を、Python 自体ではなく、C言語 等の高速なプログラミング言語で開発されたライブラリ側で実行させるようにすることで、システム全体(アプリ全体)としては非常に高速に動作することができます。

Python は遅いのにも関わらず、大量の演算を必要とする機械学習や AI 開発に向いていると言われる理由は、こういった “高速かつ機械学習や AI 開発に適したライブラリ” が充実しているからです。

また画像処理なども処理が重いので、Python の PILPHPGD Graphics Library などの画像処理ライブラリもC言語で記述されています。

これらも下記の GitHub で公開されているソースコードから確認することができます。

https://github.com/python-pillow/Pillow

https://github.com/libgd/libgd

要は、システム全体(アプリ全体)は記述しやすい・生産性の高い言語(PythonRubyPHP など)で開発する場合でも、プログラムの処理速度を重視したいような場合は、その特に高速化したい部分をライブラリとして切り出し、そのライブラリは処理速度の速い、例えば C言語 等のプログラミング言語で開発する事になる可能性が高いです。

こういった、ライブラリを使用する側ではなく、アルゴリズムを直にガリガリとプログラミングして “ライブラリそのもの” を開発したいような場合は C言語 は学習しといた方が良いです!

また、ここで紹介したライブラリは一般的なライブラリになりますが、企業に入社すると、その企業独自のライブラリを開発することもあります。その際に、開発するライブラリの速度を重視したいような場合は、プログラミング言語として C言語C++ が利用される可能性が高いです。

で、ここまでも何回も出てきたように、高速なライブラリを開発する際には、C++ が採用されることも多いと思います。主に Python の例になりますが、下記のような有名なライブラリは C++ で主に開発されています。

  • OpenCV
  • matplotlib
  • TensorFlow

ただ C++ を学ぶ上では、少なからず C言語 の知識も役に立つので、この場合も C言語 を学んでおいて損はないです(ただし、もちろん別の言語なので、C言語 を極めたとしても C++ を活用するためには C++ の勉強が必要)。

あとは、最近私も Python をよく利用していますが、ライブラリの中身の動作を知りたいときなどは C言語 が読めると結構便利です。ライブラリがうまく動作してくれない(エラーが発生する)ような場合は、ライブラリのソースコードを見てその原因を調べることもできます(仕様書に記載されていないような原因も見つけられたりします)。

例えば、実例は C++ で記述された OpenCV になりますが、下記のページで紹介しているように Python スクリプトと C言語C++ で記述されたライブラリを同時にデバッグしながらエラーが発生する原因を調べたりしています。

ライブラリの中身の処理も1行ずつステップ実行できたりするので、どのように動作しているかが分かって面白いです。興味ある人は是非試してみてください。

PythonとOpenCVの混合デバッグ方法解説ページのアイキャッチVSCode で Python と OpenCV を混合でデバッグ(ステップ実行)する方法!

ライブラリを使用する側だけでなく、ライブラリの中身の奥底までソースコードを理解できるのは、C言語C++  習得者の強みになると思います(読むだけで処理の書き方やロジックの組み立て方など学べることも多いです)。

組み込み機器

ここからは実際に製品として売られているものを紹介していきます。

まず前置きさせていただくと、ここから紹介するものに関しては、若干私の推測が入ってきます。実際にソースコードを見たわけではありません。

こういった製品のソースコードは公開されていませんし、どんなプログラミング言語が利用されているかについても開示されていないことが多いんですよね…。

ただ、それなりに C言語 が使用されているという根拠はあります。これは、ここから紹介する製品を開発している会社のキャリア採用のページの「求める人材」の欄に “C言語 での開発経験者” や “C/C++ での開発経験者” といった文言が記載されているからです。

C言語 での開発経験者を求めているのですから、おそらくその製品の開発では C言語 は使用されているであろうという論理で判断して、ここでその製品を紹介していきたいと思います。

どの会社の採用ページを参考にしたかは、”[会社名]” といった感じで大括弧で囲んで示すようにしています。

MEMO

求める人材の開発経験言語で C言語 のみで記載されているものも C/C++ と記載されているものも区別せずに紹介していきます

なのでもしかしたら、現場の実態としては C++ が利用されている可能性もあります(ちなみに C++ のみで指定されているものは紹介しません)

また、ちょっと脱線しますが、どんな企業でどんなプログラミング言語を使用しているかは、その企業のキャリア採用のページを見るとある程度調べることができます。将来就職したい企業でどんなプログラミング言語を利用して開発が行われているかを知りたいような場合に調べてみてください。

ということで、まず紹介するのが組み込み機器です。組み込み機器とは、要は特定の目的の機能のみを提供する機器です。

例えばエアコンは “空調を制御する” という機能を提供する機器なので、組み込み機器の一例となります。逆にパソコンはなんでもできるので組み込み機器ではないです。

このような組み込み機器の開発においては、例えば下記の製品を開発する際に C言語 が使用されていると推測されます。

  • 白物家電(洗濯機・冷蔵庫・エアコンなど)[SHARP]
  • テレビ [ソニー]
  • カメラ [ソニー]
  • スマホ [ソニー]
  • プリンター [Canon]

ざっと調べただけなのですが、組み込み機器ではまだまだ C言語 が活躍しているのでので、もっと多くの製品で C言語 が使用されている可能性が高いと思います。

個人的にですが、C言語 で一番おもしろみを感じるのはこの組み込み機器の開発時だと思います(後に紹介するゲーム機や車やロボットなども同様ですが)。

自身が書いたプログラムで、実際に、物理的にものを動作させることができますからね!実際に体験するとかなり感動すると思います。逆にパソコンだけの環境だとなかなかこの感動を味わえないところが、 C言語 学習が面白くない理由になっているとも思いますが…。

で、この組み込み機器の特徴は、機能を提供するために実行される処理の多くが、ソフトウェア(CPU)ではなく、ハードウェア(CPU 以外)で実行される点です。

上記のような製品では、その製品専用のハードウェアが搭載されており、機能を実現するための処理の大半はそのハードウェアが行います。白物家電なんかはわかりやすい例だと思います。これらのメインの処理は、風を出すハードウェアであったり、服を洗う(水を出したり樽を回転させたり)ハードウェアが実行してますよね。

また、カメラやテレビなどで画像処理(圧縮・復号含む)を行うのも、おそらくソフトウェアではなくハードウェアだと思います。これは専用のハードウェアの方が高速だからです。

ですので、ソフトウェア(CPU)は重たい処理をガリガリ実行するのではなく、(CPU 以外の)ハードウェアの制御がメインのお仕事になります。

C言語 が未だに組み込みに活用される理由は下記の3つだと思います。

  • ハードウェアの制御が得意(アドレスやレジスタを直接参照できる)
  • 省メモリかつ高速なので、CPU やメモリのコストを下げることが可能(製品の価格を下げることができ、価格競争に有利)
  • 今までも C言語 で開発されてきた(それを流用することで開発や評価の工数の削減が可能)

上記の特徴を持つ言語は C言語 くらいなので、C言語 はまだまだこの分野で活用されていくプログラミング言語であると言えると思います。

ですので、上記のような製品のソフトウェア開発を行うような場合は、C言語 の知識があるに越したことはないと思います。割と大手の家電メーカーなんかに入社してソフトウェア開発したい場合(ファームウェア開発といった方がいいかも)、C言語 に触れる機会は多いんじゃないかなぁと思います。

また、現在は上記のような製品の IoT 化・AI 化が進んでいますが、これらを実現するためにも C言語 が活用されていくと予想されます。

ゲーム機

ここから紹介するものも組み込み機器といえば組み込み機器かもしれませんが、別カテゴリとして紹介していきます。

まずゲーム機の開発においても、例えば下記を開発する際には C言語 が利用されているのではないかと推測できます。

  • ゲーム機ハードウェア用の OS [任天堂]
  • ゲーム用 SDK(ゲームソフト開発用のツールキット) [任天堂]

プレステも調べたかったのですが情報見つかりませんでした…。

上記の他にもハードウェア制御を行うデバイスドライバあたりでも C言語 が使用されているのではないかと推測します。

ゲーム機が作りたい& OS も作りたいという方には任天堂はかなり良い企業ですね!

どちらかというと、ゲームのソフト開発ではなく、ハード開発の方で C言語 が利用されているイメージですね。

ゲームソフトの開発に関しては C++C# の方が使われていると思います。

ちょうど今、スクエアエニックスの Web ページで “ファイナルファンタジーXVI” 開発のエンジニアを募集してたりしていますが、そこでは C++ 開発経験者が募集されてますね。

スポンサーリンク

車でも開発に C言語 が利用されています。キャリア採用のページを見てみるとわかると思いますが、結構 C言語 が使われているようです。

  • 画像認識 [デンソー][ホンダ]
  • 周辺監視 [デンソー]
  • 車両制御 [デンソー][ホンダ]
  • 自動運転 [デンソー][マツダ][ホンダ]

正直この分類の仕方はあまり良くないかもしれないです。自動運転のための画像認識や車両制御だったりすると思いますので被っている部分は多いかも。

これも組み込み機器同様に、ハード制御がソフトウェアのメインの処理になるのかなぁと思います。なので組み込み同様に C言語 がよく利用されているのだと思います。

また、自動運転は人命に関わる可能性があるので、少しでも判断・処理が速い方が良いですよね。ですので、この分野では処理速度の速い C言語 が活躍できる分野になってくるかもしれません(もちろん C++Rust なども活躍できる分野でもあると思います)。

今後、自動運転のソフトウェア開発に携わるような方は、C言語 が使いこなせることは大きな強みになると思います。

その他

その他にも開発に C言語 が使用されている機器はたくさんあります。

  • ロボット・ロボット家電 [Panasonic][ソニー][ホンダ]
  • 医用機器 [キヤノンメディカルシステムズ]
  • 農業機械 [クボタ]

機器に限らず、有名なソフトウェアも C言語 で開発されていることが多いです。

  • Apache
  • Nginx
  • PostgreSQL

まとめ

このページでは、開発に C言語 が利用されているものを紹介しました!

おそらくこのページで挙げたものでも、全体のソフトウェアが C言語 のみで開発されているものは少ないと思います。ですが、それでも C言語 が幅広く使用されていることを知っていただけたのではないかと思います。

ここで挙げた製品等を作ってみたい、これらを作っている会社でソフトウェア開発をしたい、というような方は、C言語 を学んでおいて損はないと思います。特に家電メーカーや車メーカーでソフトウェア開発をする場合、C言語 のソースコードを読むことになる可能性は高いのではないかと思います(もちろん部署等にもよると思いますが)。

特に下記のような今後伸びていくであろう分野でも C言語 は活用されていますので、C言語 を用いた開発は当分続くと思います。

  • IoT
  • AI(特に組み込み機器上での AI)
  • 自動運転
  • ロボット

また C言語 を学ぶことで、コンピュータやハードウェア・プログラムの知識を深めることもできます。普通に C言語 でプログラミングしていてもある程度は深められますし、前半で紹介したように OS やプログラミング言語は C言語 で書かれているものが多いので、これらのソースコードを読んでより深い知識を身につけるようなこともできます。

これらの知識は、後々どんなプログラミング言語を利用するとしても活用できるものですので、そういった意味でも C言語 を学ぶメリットはあると思います。

ですので、今後ソフトウェア開発を行う上で C言語 学んでおいて損はないんじゃないかなぁと思うんですよね。なので、自信を持って C言語 の学習に励んでいただければと思います。

このページの記事を読んで C言語 の学習のモチベーションが少しでも上がったのであれば幸いです(逆に下がった人もいるかもしれませんが…w)。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です