このページでは、C言語
がどのようなものを開発する際に利用されているのか?について解説していきたいと思います。
このページを書いた目的は、C言語
学習者に C言語
学習のモチベーションを上げていただくためです。
C言語
を学んでいるけど、今後使うのか不安・役に立つのか謎という思いを持っている方もおられると思いますし、単位を取るためだけにしょうがなく C言語
を学んでいるという方も多いと思います。
そういった方々に、C言語
がどれだけ多く利用されているかを知っていただき、それにより C言語
の勉強のモチベーションアップに繋がることを期待しています。
今現在世界中で動作しているソフトウェアの中で、おそらく C言語
で書かれたソフトウェアが最も多いのでは無いかと思います。実際に調べたわけでは無いですが、それだけ重要かつ幅広い分野で使用されています。
なので、C言語
を学習しておけば、今後の就職先等でその知識や技術を活かせる機会は多いと思います。
それでは、具体的に C言語
を用いてどんなものが開発されているのかについて解説していきます。
本ページの情報は 2021/8/28 時点の情報になります
特に各企業様の採用ページを参考にして記述している情報は、今後変化していく可能性がありますので注意してください
OS
結構有名な話だと思いますが、C言語
は OS の開発に利用されています。あなたが今現在使っている OS にも、おそらく開発には C言語
が利用されています!
例えば下記の OS については、C言語
が開発に使用されていることを Wikipedia などからも確認することができます。
- Unix
- Linux
- Windows
- Android
- macOs
- iOS
OS 全体が C言語
で書かれているわけではありませんが、カーネル(OS の中核部分)は C言語
(及びアセンブラ)で書かれていることが多いようです。
例えば Android に関してはソースコードが公開されていますので、そのソースコードより C言語
が多く利用されていることが確認できます。
下記のページからソースコードを取得することができますので、興味のある方は読んでみると面白いかもです。めちゃめちゃファイル多いので読むの大変ですが…。
また、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言語
を極めたい人は読んでみると楽しめると思います。
おすすめの書籍(PR)
もっと新しい OS の自作本だと下記のようなものもあります(ただし、C++
)。
また、組み込みについても一緒に学びたい方については下記のような参考書もオススメです(組み込みでは汎用的な OS ではなく組み込み向けの OS を使用することが多いです)。
プログラミング言語
また、プログラミング言語も C言語
で開発されているものが多いです。
有名どころでいくと下記のようなプログラミング言語が主に C言語
で開発されています。
Python
PHP
Ruby
PHP に関しては下記でソースコードが公開されており、C言語
で記述されていることが確認できます。
例えば、このページを表示するためのデータ(HTML)は WordPress というソフトウェアが作成してくれています。この WordPress は主に PHP
で記述されていますが、結局 PHP
スクリプトが実行される時には C言語
プログラムが動作しているということになります(つまりC言語で記述された関数が実行されている)。
また Python
であれば、GitHub からソースコードをダウンロードすることができ、C言語
で記述されていることが確認できます(Python は Java
で実装されたものもあります)。
https://github.com/python/cpython
考え方によっては、これらのプログラミング言語で記述したプログラムは、C言語
プログラムをより簡単に実行するためのものであると考えられますね!
なかなかプログラミング言語を作成するような機会はないかも知れませんが、これらの人気のあるプログラミング言語を支えているのは C言語
であることを考えれば、C言語
の学習のモチベーションも上がるのではないでしょうか?
もちろん、C言語
を用いてプログラミング言語の開発に挑戦することもできます。例えば下記の「まつもとゆきひろ 言語のしくみ」では、Ruby
の開発者が “プログラミング言語の作り方” を解説した書籍になります。
プログラミング言語の開発や、プログラミング言語がどうやって作られているのかに興味あるような方は楽しく読むことができます(プログラミング言語を作成するときにどのようなことを考える必要があるのかについて解説されていますが、C言語
の参考書でもないですし、読めばプログラミング言語がすぐに作れるというものではありませんので注意してください。ただ読み物としてはすごく面白いです)。
おすすめの書籍(PR)
また、上記のプログラミング言語が C言語
で記述されているということは、上記のプログラミング言語で出来ることは C言語
でも実現することができると考えられます。
例えば Python
などにはガベージコレクションという機能があります。Python
が C言語
で作られているのであれば、こういった機能も C言語
で作成することができるはずです。
C言語
には無いけど他のプログラミング言語にある機能を、C言語
で実現するためにはどのようにプログラミングしなければならないかを考えてみるのも面白いですし、これにより更に C言語
やコンピュータの知識を深めこともできると思います!
スポンサーリンク
ライブラリ
また、各種プログラミング言語から利用されるライブラリも C言語
で記述されているものが多いです。
例えば Python
には NumPy
という数値計算を行うライブラリが存在します。このライブラリも C言語
(及び Fortran
)で記述されています。
これは、下記の GitHub のソースコードより確認することができます。
https://github.com/numpy/numpy
なぜ C言語
で記述されているかというと、これは “C言語
が高速だから” という点が主な理由になると思います。
はっきりいって、Python
は C言語
などに比べると非常に遅いです。なので、ループの中で大量に演算を行うような処理は向きません。
ですが、そういった重い処理を、Python
自体ではなく、C言語
等の高速なプログラミング言語で開発されたライブラリ側で実行させるようにすることで、システム全体(アプリ全体)としては非常に高速に動作することができます。
Python
は遅いのにも関わらず、大量の演算を必要とする機械学習や AI 開発に向いていると言われる理由は、こういった “高速かつ機械学習や AI 開発に適したライブラリ” が充実しているからです。
また画像処理なども処理が重いので、Python
の PIL
や PHP
の GD Graphics Library
などの画像処理ライブラリもC言語
で記述されています。
これらも下記の GitHub で公開されているソースコードから確認することができます。
https://github.com/python-pillow/Pillow
https://github.com/libgd/libgd
要は、システム全体(アプリ全体)は記述しやすい・生産性の高い言語(Python
や Ruby
や PHP
など)で開発する場合でも、プログラムの処理速度を重視したいような場合は、その特に高速化したい部分をライブラリとして切り出し、そのライブラリは処理速度の速い、例えば C言語
等のプログラミング言語で開発する事になる可能性が高いです。
こういった、ライブラリを使用する側ではなく、アルゴリズムを直にガリガリとプログラミングして “ライブラリそのもの” を開発したいような場合は C言語
は学習しといた方が良いです!
また、ここで紹介したライブラリは一般的なライブラリになりますが、企業に入社すると、その企業独自のライブラリを開発することもあります。その際に、開発するライブラリの速度を重視したいような場合は、プログラミング言語として C言語
や C++
が利用される可能性が高いです。
で、ここまでも何回も出てきたように、高速なライブラリを開発する際には、C++
が採用されることも多いと思います。主に Python
の例になりますが、下記のような有名なライブラリは C++
で主に開発されています。
OpenCV
matplotlib
TensorFlow
ただ C++
を学ぶ上では、少なからず C言語
の知識も役に立つので、この場合も C言語
を学んでおいて損はないです(ただし、もちろん別の言語なので、C言語
を極めたとしても C++
を活用するためには C++
の勉強が必要)。
あとは、最近私も Python
をよく利用していますが、ライブラリの中身の動作を知りたいときなどは C言語
が読めると結構便利です。ライブラリがうまく動作してくれない(エラーが発生する)ような場合は、ライブラリのソースコードを見てその原因を調べることもできます(仕様書に記載されていないような原因も見つけられたりします)。
例えば、実例は C++
で記述された OpenCV
になりますが、下記のページで紹介しているように Python
スクリプトと C言語
や C++
で記述されたライブラリを同時にデバッグしながらエラーが発生する原因を調べたりしています。
ライブラリの中身の処理も1行ずつステップ実行できたりするので、どのように動作しているかが分かって面白いです。興味ある人は是非試してみてください。
VSCode で Python と OpenCV を混合でデバッグ(ステップ実行)する方法!ライブラリを使用する側だけでなく、ライブラリの中身の奥底までソースコードを理解できるのは、C言語
や C++
習得者の強みになると思います(読むだけで処理の書き方やロジックの組み立て方など学べることも多いです)。
組み込み機器
ここからは実際に製品として売られているものを紹介していきます。
まず前置きさせていただくと、ここから紹介するものに関しては、若干私の推測が入ってきます。実際にソースコードを見たわけではありません。
こういった製品のソースコードは公開されていませんし、どんなプログラミング言語が利用されているかについても開示されていないことが多いんですよね…。
ただ、それなりに C言語
が使用されているという根拠はあります。これは、ここから紹介する製品を開発している会社のキャリア採用のページの「求める人材」の欄に “C言語
での開発経験者” や “C/C++
での開発経験者” といった文言が記載されているからです。
C言語
での開発経験者を求めているのですから、おそらくその製品の開発では C言語
は使用されているであろうという論理で判断して、ここでその製品を紹介していきたいと思います。
どの会社の採用ページを参考にしたかは、”[会社名]” といった感じで大括弧で囲んで示すようにしています。
求める人材の開発経験言語で 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)。
オススメの参考書(PR)
C言語学習中だけど分からないことが多くて挫折しそう...という方には、下記の「スッキリわかるC言語入門」がオススメです!
まず学習を進める上で、参考書は2冊持っておくことをオススメします。この理由は下記の2つです。
- 参考書によって、解説の仕方は異なる
- 読み手によって、理解しやすい解説の仕方は異なる
ある人の説明聞いても理解できなかったけど、他の人からちょっと違った観点での説明を聞いて「あー、そういうことね!」って簡単に理解できた経験をお持ちの方も多いのではないでしょうか?
それと同じで、1冊の参考書を読んで理解できない事も、他の参考書とは異なる内容の解説を読むことで理解できる可能性があります。
なので、参考書は2冊持っておいた方が学習時に挫折しにくいというのが私の考えです。
特に上記の「スッキリわかるC言語入門」は、他の参考書とは違った切り口での解説が豊富で、他の参考書で理解できなかった内容に対して違った観点での解説を読むことができ、オススメです。題名の通り「なぜそうなるのか?」がスッキリ理解できるような解説内容にもなっており、C言語入門書としてもかなり分かりやすい参考書だと思います。
もちろんネット等でも色んな観点からの解説を読むことが出来ますので、分からない点は別の人・別の参考書の解説を読んで解決していきましょう!もちろん私のサイトも参考にしていただけると嬉しいです!
入門用のオススメ参考書は下記ページでも紹介していますので、こちらも是非参考にしていただければと思います。
https://daeudaeu.com/c_reference_book/