IT業界で働くエンジニアが知らないと恥ずかしい専門用語集
00. はじめに
本記事では、IT業界で働くエンジニアや、専門知識がなくIT業界に入った人が知らないと恥ずかしい専門用語を解説します。
と、その前に少し、今の日本のエンジニアの現状について少し触れましょう。
エンジニアとしての働き方
ここ最近、エンジニア(ここでは僕の専門のソフトウェアエンジニアとします)の市場価値が高まっています。一昔前まではIT土方などと言われ(今も言われているが)、低賃金重労働の代名詞でしたが、近年の人工知能ブームやビットコインを発端とするブロックチェーン技術の盛り上がりから、エンジニアが必ずしも底辺層ではなくなってきていると感じます。
現に米国や中国、韓国、ロシア、欧州諸国においては、ハッカー(高度な技術を持つ人々)の地位は非常に高く、報酬もかなりのものです。
しかし日本は技術的・待遇面ではまだまだ世界の波に乗り切れていません。僕が考える1つの要因として、日本以外の各国は軍のITへの関与が強いということが挙げられます。この話は長くなってしまうので詳しくは割愛しますが、私達が恩恵を受けている最新の技術、例えばGPSなどは、元々は軍事技術の賜物なのは有名な話です。軍のバックアップが国の技術力を底上げしていることは、現状疑う余地もありません。
とはいえ、日本もこれからどんどん優秀なエンジニアが重宝される時代が必ず来ます。そのためにも、私達は日々知識を蓄え、技術を磨き、世の中をより良くするサービスを生み出して、人生を豊かにしていく必要があります。それが義務であり喜びでもあると、僕は思っています。
エンジニアに文系と理系の差別はない
さて、今はどうかわからないですが、一般的にエンジニアは理系職だと思われています。しかしここで大事な事実を述べると、世の中には文系エンジニアが溢れるほど多く働いています。ちょっと良いデータが見つからなかったのですが、体感的にも半々ぐらいの割合であると思われます。
僕の友人でも、プログラミングは人生で一切やったことがないという人が、今ではバリバリコードを書いています。プログラミング言語を学ぶのは、新たに外国語を学ぶより遥かに簡単です。
しかしながら、理系学生の方が平均的にIT関連の知識があるということもまた事実でしょう。とはいえ、知識があることと仕事ができることは全く違います。そしてこの記事では、そういった違いがわからない学生(もしくは新卒エンジニア)へ向けて、重要なキーワードをざっくりと簡単に紹介しています。
パラパラと眺めてキーワードを覚えておくだけで、全然違った世界が見えると思いますので、是非活用して欲しいです。
注)本記事で紹介する用語の説明は、厳密性を欠いているものがあります。これはイメージをざっくりと掴んでもらうためのものであることをご理解ください。
01. インターネットとイントラネット
インターネット
インターネットは、皆さんがよく使っているもので、世界中でオープンな通信環境です。Webページを見たり、メールやLINEを送ったり、オンラインゲームで遊んだり、Skype電話をしたりするのに、殆どの場合インターネットを利用します。
イントラネット
イントラネットは、インターネットのクローズド版と思ってください。例えば、会社などで独自の通信環境を作り、これがインターネットや外部の通信環境と繋がっていない場合、これをイントラネットと言います。
イントラネットの利点は、社内情報や機密情報などに、イントラネットに接続されている端末からのみアクセス出来ることです。
02. GUIとCUI
GUI
(Graphical User Interface)[ジーユーアイ]
WindowsやOS Xなどの、マウスでクリックして操作出来るような視覚的なインターフェースの総称。
CUI
(Character User Interface)[シーユーアイ]
UnixやLinuxなどの、コマンドベースで操作するインターフェースの総称。
03. ディレクトリとフォルダ
ディレクトリ
一般的には、CUIで用いるデータの容れ物(階層的にデータをまとめたもの)をディレクトリと呼んでいます。
フォルダ
GUIで用いるデータの容れ物のこと。とはいえ、厳密にはフォルダ≠ディレクトリらしく、例えばWindowsのコントロールパネル等はフォルダにあたりますが、ディレクトリとは呼ばないようです(感覚的にはわかる)。
参考
04. ネイティブアプリとウェブアプリ、Javaアプリ
ネイティブアプリ
言葉の定義は難しいのですが、今日ではウェブアプリでないものをネイティブアプリと言っても差し支え無いでしょう。インストールして使えるアプリと覚えても良いです。
PCのネイティブアプリだと、例えばワードやパワポ、エクセルなどが代表的ですね。スマホだとLINEやカメラアプリがそうです。
開発言語
- PC: C, C#, C++などのC系言語が主流(?)
- iOS: Objective-C, Swift
- Android: Java
ウェブアプリ
ウェブにアクセスして使えるアプリケーションがウェブアプリです。Gmailやクックパッドのウェブ版が正にそうですね。
ネイティブとウェブのハイブリットアプリなんてものもあります。
開発言語
- サーバ: Java, Ruby, Python, JavaScript, PHPなどなど様々
- クライアント: HTML, JavaScript, CSS, PHPなど
Javaアプリ
その名の通り、Javaで作られたPCアプリ。ネイティブアプリとの違いは、JavaアプリはJavaが実行可能な環境下でのみ動作します。
こう書くと少し面倒なアプリかと思いますが、これには歴史的背景がありまして、Javaの実行環境があればどんな端末上でも動くという特性が、今日のアプリ市場をここまで成長させてくれたということは、覚えておいて損はありません。
05. サーバとクライアント
サーバ
サーバとは、リクエストに対してレスポンスを返すデバイス、またはその上で動くプロセスと覚えましょう。
ウェブページを見るのが良い例で、私達はブラウザを通してウェブサーバにリクエストを投げ、サーバはそのリクエストに応じでレスポンスを返して、ブラウザはそのレスポンスを元に画面を表示しています。
もちろんウェブサーバは一例で、DBサーバやメールサーバなどもあります。
クライアント
サーバにリクエストを送り、レスポンスを受け取って表示する端末、またはそのソフトウェア。
ウェブページを見る際のIEやChromeなどのブラウザや、メーラーソフトなどがこれにあたります。
06. HTTPとHTML
よくHTTPとHTMLを、名前が似ている(?)からかごっちゃにする人がいるので、ここで解説しましょう。
HTTP
(HyperText Transfer Protocol)[エイチティーティーピー]
まず、HTTPは通信手法(通信プロトコル) です。ウェブページを見る際には、前述の通りリクエストとレスポンスのやり取りが発生するのですが、このやり取りを、どのような形式で行うかを取り決めたものがHTTPになります。
ウェブブラウザは、ウェブサーバにGET / HTTP/2.0 hogehoge
のようなリクエストを送り、サーバはこれを読んで
<html>hogehoge</html>
のようなレスポンスを返します。HTTP以外のリクエスト形式では、レスポンスを返しません。
HTML
(HyperText Markup Language)[エイチティーエムエル]
ウェブページを見ると、テキストデータが横並びだったり太字だったりと、多彩ですよね。テキストデータにこのような装飾を施すのがHTMLです。ウェブブラウザは、このHTMLを解釈して画面に表示してくれています。
ブラウザの種類によっては、HTMLの解釈が若干変わってしまうため、表示も変わってしまう場合があります。これをどんなブラウザでもきちんとひょうじされるように修正するのも、
エンジニアやデザイナーの仕事の1つですね。
07. DBと関連用語
DB
(Database)[データベース、ディービー、デービー]
DBは必ずと言っていいほど使う、データを保存するための仕組みです。
私達はよくフォルダに画像やテキストファイルを無作為に保存していますが、DBにおいては、(多くの場合)秩序を持ったデータの保存が必要です。データの保存形式に秩序があると、検索や更新する際に非常に便利なのです。
そして非常に分かりづらい単語が多いので、ここで雰囲気を掴んでもらえればと思います。
SQL
SQLは、DB(RDB)を操作する時に用いる言語です。DBの操作をする際には基本的にこのSQLを用います。
クエリ
SQLなどを用いてDBを操作する時に生成する命令文をクエリと言い、実行することを「クエリを発行する」などと言ったりします。例えばデータを検索したい場合は以下のようにクエリを発行します。
SELECT * FROM table_name
代表的なクエリの種類と操作の解説を以下に紹介します。
- CREATE: DBやテーブルの作成
- SELECT: データの検索
- INSERT: データの挿入
- UPDATE: データの更新
- DELETE: データの削除
テーブル
データを保存する際に、データの種類によってカテゴライズされたもの。表のようにデータを保存し表示することが可能で、テーブルごとにデータの保存形式は決まっています。
スキーマ
テーブルのメタ情報。テーブルはこのスキーマに属し、管理されるため、同じスキーマの下で同じテーブルは作成出来ません。スキーマが異なれば同じ名前の違う構造のテーブルを作成可能です。テーブルの構造を表したりもします。
レコード(行)
テーブルに保存されている横一列ごとのデータの呼び名。
カラム(列、フィールド)
テーブルに保存されている縦一列ごとのデータの呼び名。
RDBMS
(Relational DataBase Management System, RDB)
関係データベース管理システムの意。リレーショナルDBとも言われる、一般的なDBの形式です。
代表的なDBに、MySQL, SQLite, PostgreSQL, MariaDB, Oracle Databaseなどがあります。
NoSQL
(Not only SQL)[ノーエスキューエル]
RDBではないDBの形式。テーブルのようにスキーマを持たず、柔軟な形式でのデータの保存が可能です。
代表的なものにMongoDBがあります。MongoDBはドキュメント指向データベースで、RDBでのテーブルにあたるものをコレクションと呼び、データをJSON形式のドキュメントとして保存できます。
08. ライブラリ
ある程度開発していると、あちこちで何度も必要になる機能があることに気が付きます。そういった汎用性のある機能を、簡単に実装できるようにしてくれたものがライブラリです。
ライブラリは、言語の機能として提供されているものから、オープンソースのもの、自社独自開発のものまでさまざまです。
独自開発のライブラリは、業務に特化しているものが多いです。そのため、内部実装を知りたい時には多少苦労することがあります。
09. フレームワーク
アプリケーションなどを開発する際に、ある程度の骨組みや決まりがないと、大人数での開発は破綻してしまいます。フレームワークはその骨組みを提供するものです。
おそらく仕事としてのプログラミングは、このフレームワークについて如何に精通しているかが非常に重要です。何故なら、会社では独自のフレームワークを使って開発していることが多々あるためです。ここではフレームワークの主な役割を紹介しましょう。
大規模ライブラリ
フレームワークは独自のライブラリを有していることが多いです。フレームワークの提供する汎用的な機能を用いることで、無駄にコードを生成することがなくなり、生産性が上がります。
骨組み
その名の通り、フレームワークは開発の方向性を(ある程度)決めてくれます。
大人数の開発において(もしくは少人数においても)、もしもフレームワークがなく、Rubyのような自由な言語で開発を行うと、各々の書くコードに統一性がなくなり、いざまとめる時に破綻してしまいます。
フレームワークはこの煩雑としがちなコードに規律を与えてくれる役割を持ちます。
ノウハウの集約とサポート
特に独自開発のフレームワークは、様々な開発のノウハウを貯めこみ、陥りがちな罠などを回避し、業務やプログラミングに精通していなくともコードを書けるようになっています。
こういったノウハウを集約したフレームワークを用いることで、以前まで多くの時間を掛けていた問題を短時間で解決することが可能になります。
10. UIとUX
UI
(User Interface)[ユーアイ、ユーザインターフェース]
ユーザがコンピュータとやりとりするためのインターフェースのことです。
インターフェースの説明が難しいのですが、コミュニケーション手段とでも言いましょうか。例えば人と人とのコミュニケーションには会話や手紙、メールなどのインターフェースを用います。コンピュータとのコミュニケーションには、キーボードやマウスによる入力がありますね。それらを提供する概念や空間を総称してインターフェースと呼んでいる気がします。
UX
(User Experience)[ユーエックス、ユーザエクスペリエンス]
最近流行りのキーワードで、ユーザがサービスを利用した時に感じる満足感や、得られる経験を表します。UIが凝っていても、UXが良くなければ、サービスの定着や普及は見込めません。
11. クラウド
最近はもう生活の一部となっているクラウドですが、説明しろと言われると出来ない人もいるのではないでしょうか。
今までは、メールやファイルなどのデータは、殆どの場合自身の端末や外付けHDDなどに保存していました。
それが今や、GoogleやAmazonなどの大企業が管理しているDBサーバに、インターネットを介して保存できるようになりました。こういったインターネットを介して情報を保存したり利用したり出来る環境をクラウドと呼んでいます。
Gmailなどのウェブアプリなどでも、利用データをそのアプリを提供している会社に任せている場合もあるため、私達は知らず知らずのうちにクラウドを利用しているんですね。
12. OS
(Operating System)[オーエス]
コンピュータは、それ自体にOSが入っていなければ、よほどコンピュータに詳しくない限り使うことは難しいでしょう。
OSは、コンピュータに詳しくない人にも簡単に利用できるように、入出力インターフェースや様々な機能を提供してくれるシステムです。
ここでは代表的なOSの呼称と、個人的な解説を紹介します笑
Windows
言わずと知れたMicrosoft製のOS。Officeに代表される事務系のソフトの他、一般人が使いやすい多種多様のソフトが提供されています。パソコンに詳しくなければ、とりあえずこれを買っておきましょう。
ただ、少し凝ったプログラミングをするには、これほど使いづらいOSはない(と思う)。
OS X
[オーエステン]
Macのパソコンに入っているOS。最近名称がMac OS XからOS Xに変わったので、Mac OSと呼ぶ方がわかりやすかったりします。
初期のMac OSはUnixから派生して作られており、OS XもBSD UNIXがベースになっています。
Unix
[ユニックス]
もっとも古いOSの1つで、アメリカのAT&T社が開発したOS。CUI操作が基本ですが、SolarisなどのGUIのものも提供されています。
ですが、純Unixを使っている人はほとんど見かけません。
Linux
[リナックス]
Unixを参考に作られたOS。厳密にはUnix派生ではないものの、Unixを真似て作られただけあって、使い勝手は非常に似ています。
オープンソースプロジェクトなので、無料で利用、改良でき、様々な派生品が提供されています。
CentOSなどはサーバOSとして人気です。また、Ubuntuなども、無料のOSとして人気ですね。
13. SVNとGit
どちらも代表的なバージョン管理システムのことです。
その昔、バージョン管理がまだ無かった時代は、1つのファイルを複数人が編集した際に『どこにどういった変更がいつ誰によって行われたか』といった情報を管理しきれませんでした。
また、1人で編集する際も、ファイル名を『testfile_20101121_name.txt』のようにして管理することが多々ありました。
そんな暗黒の時代を終わらせてくれたのがバージョン管理システムです。
SVN
(Apache Subversion)[サブバージョン、エスブイエヌ]
SVNは集中型バージョン管理システムと呼ばれ、1つのリポジトリを基本に、ファイルのバージョン管理を行います。リポジトリは、ファイルの保存環境とでも言いましょうか。ファイルがどういった状態にあるかを管理できる環境をそう呼んでいます。
個人的にはドキュメントの管理などに使うと良いと思っています。
Git
[ギット]
分散型バージョン管理システムと呼ばれています。SVNと違い、オリジナルとなるリモートのリポジトリと同一のものをローカルに生成し、これを編集して、リモートに反映させます。
(特に大人数での)開発にあたりその真価を発揮するシステムで、正直Gitを使わないor使えないエンジニアや会社は、化石級と言えるでしょう。エンジニアなら真っ先に使い方を覚えたいシステムです。
99. おわりに
これらの用語は、使う使わないに関わらず基本なので、是非とも覚えておきましょう!
なんだかもっとたくさんある気がしてたんですが、書いているうちに忘れちゃったので、思い出し次第加筆します笑
これ説明して欲しいとか間違っているとかリクエストがあれば、コメントやTwitterにリプください。