【IT基礎】ソフトウェアの周りにある技術
対象の読者
・これからソフトウェアを開発しようと考えている人
・ソフトウェア開発について基礎的な勉強したい人
・ソフトウェアについて基礎的な勉強したい人
・ソフトウェアエンジニアがどんな仕事をしているか勉強したい人
このチャンネルを初めてご覧の方は以下の記事を一読いただけると幸いです。
ソフトウェアと周辺技術
ソフトウェア開発では、プログラマがプログラミングによってソフトウェアを開発します。
しかし、実際はプログラミングしたソフトウェアだけでシステム全体が完成することはほとんどありません。
はじめてソフトウェアを開発する人は「ソフトウェア開発 = プログラミング」というイメージを持っているかもしれませんが、実は多くのソフトウェアシステムは、プログラミングで開発したソフトウェアだけではなく、その周辺技術によってシステム全体が構築されています。
これらの技術は、システムを開発する上ではなくてはならないもので、ソフトウェアエンジニアはプログラミング以外にもこのような技術について習得する必要があります。
エンジニアに関わらず、これからソフトウェアを開発してみたいと思っている人は、このような周辺技術についても勉強しておくとエンジニアとの会話がスムーズに進むと思います。
ここでは、ほんの一部ではありますが、ソフトウェアに関連する周辺技術について説明します。
データベース
情報を効率的に検索したり、蓄積することを目的としたシステムを『データベース(システム)』と言います。
具体的には、頻繁に検索を可能性のある、テキストで表現できる情報のほとんどはデータベースに格納されています。
一般的な例としては、ユーザー情報や商品情報などがあります。
ECサイトやTwitterのようなSNSシステムでは、これらの情報を保管されるためにデータベースが使用されています。
他にも最近話題になっている「ビッグデータ」も広義にはデータベースに分類されます。
通常のデータベースシステムでは、扱い切れないような巨大なデータの集合を、専用のマシンとソフトウェアを使って解決するのがビックデータのシステムです。
データベースを操作するシステム自体は、ソフトウェアで構築されています。しかし、情報を永続的に蓄積するためには、ハードディスクやファイルなどの物理的なコンピュータの保存領域が必要です。
※ 一部のデータベースシステムには、永続的な保存を行わないものも存在します。
データベースに保存される情報は、顧客情報や製品情報など重要な情報が含まれているため、取り扱いには非常に注意が必要です。
情報漏洩や紛失を防ぐために、システムの要件に合わせて「適切なセキュリティルール」や「バックアップ」を行う必要があります。
ファイルストレージ
ソフトウェアで使われる情報は、全てデータベースに格納されているわけではありません。
例えば写真や動画などテキストで表現できない情報は、サーバーの『ファイルストレージ』に保存されています。
ファイルストレージは、皆さんのPCにあるフォルダに近いイメージです。
ソフトウェアが使用するファイルストレージは、外部のネットワークから接続されることを想定しているため、参照や追加、削除などが簡単にできる機能をもっているものもあります。
最近では、Amazonが提供するAWSや、Googleが提供するGCPなどのクラウドサービスのファイルストレージを使うことも多くなっています。
このようなストレージは「クラウド(ファイル)ストレージ」とも呼ばれます。
ネットワーク
コンピュータの世界は、お互いの端末がデータのやり取りを行うことで便利な世界を実現しています。
ネットワークといっても様々な分類がありますが、世界中の端末とのやり取りを可能にしている『インターネット』はみなさんも聞いたことがある最も有名なネットワークです。
インターネットのような世界中の人が自由に接続できるネットワークのことは「グローバルネットワーク」と呼ばれることもあります。
グローバルなネットワークでは、特定の手段を用いれば送信されるデータを見られてしまう可能性がありますので、デリケートな情報は暗号化してやり取りするのが一般的です。
インターネットとは対象に、社内だけ、特定のサーバーの中だけで通信できるようなローカルなネットワークも存在します。
このようなネットワークは「ローカルネットワーク」と呼ばれています。
ローカルネットワーク上でやり取りされるデータは、基本的に外部のネットワークから見ることはできません。
このようにお互いに相互に接続されている端末・機器のまとまりを『ネットワーク』といいます。
クラウドサービス
近年、多くの会社がAmazonやGoogleが提供するクラウドのコンピューティングリソースを利用してシステムを開発しています。
コンピューティングリソースを自社で用意することなく、レンタルできるようになったことで、物理的な障害対応やメンテナンスコストを大幅に削減できるようになりました。
また、インフラの専門的の技術もサービス側でサポートしてくれるため、少人数のエンジニアチームでも幅広いシステムを構築できるようになりました。
エンジニアが一人しかいないような小さな会社でも、大量のアクセスをさばけるインフラを構築できるようになったのは、クラウドサービスの進歩によるものです。
最近のクラウドサービスでは、ソフトウェアを動かすためのコンピューティングリソース(サーバーマシン)だけでなく、データベース、ファイルストレージなど非常に多くのサービスを提供しています。
例えば、大手クラウドサービスの一つであるAWSでは、人工衛星の通信やデータ処理ですら、クラウドを経由して従量制で利用することができます。
実際のソフトウェア開発で考えてみよう
では実際にソフトウェアを開発するときに、これらの技術がどのように使用されているかを見てみましょう。
今回は、モバイルアプリケーションでECサイトを開発した場合どのような構成になるか例にあげてみます。
■ ECサイトの主な機能
・モバイルアプリケーションでECサイトを操作する
・写真を使った商品情報を、モバイルアプリケーションで閲覧する
・購入する顧客情報は、サーバーで保存する
実際に作る場合にはもっと多くの機能が必要ですが、今回はシンプルにこの3つの機能で考えてみます。
■ システム構成
システムの構成は次のようになります。
「周辺機能がどのように関連しているか」に注目してみてください。
今回の構成では、
・①モバイルアプリケーション: ユーザー(顧客)がスマートフォンで操作するアプリケーション
・②サーバーアプリケーション: モバイルアプリケーションとデータのやり取りを行うことを目的のアプリケーション
の2つのアプリケーションが存在します。
この2つのアプリケーションは、プログラミングによって開発する想定です。
モバイルアプリケーションから登録された顧客情報は、「③データベース」に保存します。
モバイルアプリケーションに表示する商品画像は、「④ファイルストレージ」に保存されています。
「②サーバーアプリケーション」「②データベース」、「③ファイルストレージ」を配置するサーバーマシンは自前では準備せず「⑤クラウドサービス」を利用します。
青い破線の枠がネットワークを示しています。
モバイルアプリケーションとサーバーアプリケーションは、「⑦グローバルネットワーク」によってデータのやり取りが行われます。
一方で、クラウドサービス内では、「⑧ローカルネットワーク」が構築されています。クラウドサービスでレンタルしている各サービスは、別々のマシンで動作しているため、ローカルに各マシンが通信するためのネットワークが必要なのです。
このように、プログラミングで開発したソフトウェアは、関連技術のサービスと一緒に構築されネットワークによって接続されます。
今回の構成は、あくまで無数にあるシステム構成の一つですが、ソフトウェアに関連する技術がどのように使われているかなんとなくイメージできたのではないでしょうか。
まとめ
ソフトウェア開発は、必ずしもプログラミングしたソフトウェアだけでは完結しません。
ソフトウェアをメインとした各技術をネットワークで構築して、一つのシステムを構築することが、エンジニアの仕事になります。
もちろんプログラミング技術についても重要な要素ですが、関連する技術についても少しずつ学んでいきましょう。
アンケートのお願い
このチャンネルでは、これから提供していくコンテンツやサポートの内容を改善していくために、アンケートをお願いしています。
ぜひアンケートにご協力ください。
アンケートはこちらから
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?