ApacheとNginxを徹底比較!両者の違いや、それぞれのメリット・デメリットまで、分かりやすく解説します

数多くあるWebサーバの中でも根強い人気がある「Apache(アパッチ)」と人気急上昇中の「Nginx(エンジンエックス)」。Webサーバはシステムの基盤の重要な部分です。理解せずに使うとクライアントへのレスポンスにも影響を与えます。本記事では「Apache」と「Nginx」のWebサーバを比較しながらメリット・デメリットを紹介します。

 

ApacheとNginxの基本情報

 

Apacheとは?

 

 

ApacheはApacheソフトウェア財団によって開発されたOSSです。元々は米国立スーパーコンピュータ応用研究所 (NCSA) が開発したNCSA HTTPdに改良という形で開発が行われていました。

その後、2000年頃にBrian Behlendorf(ブライアン・ベレンドルフ)の手によってソースコードは完全に書き換えられました。彼はApacheの基盤を作成した主要開発者です。

Apacheの正式名称はApache HTTP Server(アパッチ エイチティーティーピー サーバ)。

名前の由来はアメリカインディアンの一民族であるアパッチ族への尊敬の念を込めて付けられたのことです。

 

Nginxとは?

 

 

NginxはNginx,Inc.のCTOのIgor Vladimirovich Sysoev(イーゴリ・ウラジーミロヴィチ・シソエフ)によって開発されたOSSです。2002年に開発が始まり、2004年に初公開されました。

その頃もApacheのWebサーバが絶大な人気がありました。しかし、Apacheの仕組み上どうしても発生しうる問題がありました。それがC10K問題です。

その問題をきっかけにNginxが開発され始めました。

 

C10K問題とは?

 

「C10K問題」(クライアント1万台問題)とは、同時接続するクライアントが多すぎるとソフトウェア上の問題によりサーバーがパンクしてしまうことです。

例えば想定されるのがプロセス番号です。

UNIX系のOSの場合、メモリ上でプログラムに与えられるプロセス番号は符号付き16ビット整数と決まっています。言い換えるとプロセスは1~32767までの番号が割り付けられます。つまり、1リクエストに対して1つのプロセスを生成するWebサーバ(Apache)の場合、約3万リクエストが最大の同時接続数となります。

ハードウェアの性能上問題がなくてもアーキテクチャ(設計)によってはソフトウェアで上限が決まっているということです。

 

ApacheとNginxを比較

 

Webサーバのアーキテクチャ

 

 

上述しましたが、Apacheでは1リクエストに対して1プロセスが処理されます。

例えば100の同時接続があれば、100のプロセスが必要となります。数多くのプロセスが立ち上がるとプロセス番号の限界やメモリが大量に消費されてしまうという問題があります。

対してNginxでは1プロセスで複数のリクエストに対応します。

同時接続数の上限が設定可能で、具体的な設定パラメータを挙げると「プロセス数」と「プロセス内で最大の同時処理数」の乗算で上限が決まります。

例えば「プロセス数」を2つ、「プロセス内で最大の同時処理数」を1000に設定すると最大同時接続数は2×1000=2000となります。

 

処理能力

 

軽量なコンテンツの同時接続100アクセス状況下の実験結果、ApacheよりもNginxの方が1.2倍~1.5倍ほど高いという情報が出ています。更に同時接続数が増えれば増えるほど処理能力差が顕著に出てきます。

 

同時接続数

 

 

マルチプロセス(Apache)とシングルスレッド(Nginx)の違いからNginxはApacheの10~100倍ほど対応できると言われています。

 

適したコンテンツ

 

マルチプロセス(Apache)は動的コンテンツのような重たい処理が得意ですが、シングルスレッド(Nginx)は向いていません。

軽量なコンテンツはどちらも得意と言えますが、同時処理数が増えるとシングルスレッド(Nginx)が有利になります。

 

メモリ消費量

 

シングルスレッド(Nginx)は同時処理数が増えてもそれほどメモリ使用量は変わりませんが、マルチプロセス(Apache)はリクエストの量に応じてメモリが消費されます。同時処理数が少ない場合には両者にあまり違いはありません。

 

Geekly Media ライター

バスコ

1+

【徹底比較!】仮想化 vs クラウド!両者の違いからこれからまで分かりやすく解説します!

皆さんはクラウドサービスを利用したことがありますか。世の中には多くのクラウドサービスがありますが、それらのサービスを実現するためには仮想化という手法が採用されています。本記事では、仮想化とクラウドの違いやそれぞれの特徴、実際にビジネスとして採用されている例などをまじえて分かりやすく説明します。

 

仮想化

 

仮想化とは

 

 

仮想化とは、物理的なリソースを複数に分割したり、それを統合したりして使用できるテクノロジーの事を指しています。

例えば一台の物理的なサーバーは安価なものでも高性能な物が多く、どんなに利用しても10~30%程度しか使わず残りの70%はアイドル状態で使用されていないケースが殆どです。

そういった場合に一台の物理的なサーバーを分割して複数の仮想サーバーを作成する事で、資源の無駄を省こうというものです。

 

仮想化の特徴

 

 

仮想化を行うことで、下に記載されている3つの利便性を実現することが出来ます。

 

・システムの無駄をなくす

仮想化についての冒頭部分でも説明しましたが、多くの物理サーバーはその性能の数十%しか使用していません。仮想化の発想が始まる前は一つのアプリケーションに対して一つの物理サーバーを用意することが一般的でしたが、サーバーの性能をフルに使っている企業は少なくシステムリソースの無駄を指摘されていました。

仮想化を行うことで残りのサーバー性能を分散し、別のサービスで利用することでシステムリソースを無駄なく使用することが可能になり、コストの削減にも繋がります。

 

・システムを自由に分割・統合出来る。

仮想化の大きな特徴として、システムリソースを複数に分けるだけでなく、統合することも可能になりました。これにより、複数の物理サーバーの一部を結合し、仮想のサーバーを作成することで拡張性を高めることが出来るようになります。

 

・リスクを分散することが出来る。

複数台のシステムを分割して仮想のサーバーを作ることでシステムのダウンリスクを低減させることが出来るようになります。

例えば一台のサーバーでアプリケーションを動かしていた場合にサーバーが何らかの故障や不具合でダウンしてしまうとサービス全体に影響が出てしまいます。しかし、10台のシステムを複合した仮想サーバーを使用している場合、一つのサーバーがダウンしてもその影響は10%程度と限定的になります。

 

仮想化の種類

 

 

仮想化について主にサーバーをメインに話をしてきましたが、サーバー以外にもストレージやネットワーク、アプリケーションといったリソースを仮想化する事もできます。ここではそれぞれの仮想化について簡単に説明します。

 

・サーバーの仮想化

サーバーの仮想化は、一台の物理サーバーを分割し複数の仮想サーバーを作成することができます。

 

・ストレージの仮想化

ストレージの仮想化は、一台の物理ストレージディスクを分割し複数の論理ディスクを作成することができます。

 

・ネットワークの仮想化

ネットワークの仮想化は、一つのネットワーク回線や機器を仮想化することで複数のネットワークを構築することができます。

 

・アプリケーションの仮想化

アプリケーション仮想化は一つのアプリケーションを仮想化することで複数のサーバーで使用することが出来ます。

 

クラウド

 

クラウドとは

 

クラウドはユーザーがストレージやソフトウェアを用意しなくても、インターネットに繋げるだけでサービスを必要な時に必要な分だけ利用することができるサービスです。

これによりユーザーは、サービスを動かしているコンピューターや接続方法などを意識しなくても簡単にサービスを利用することが出来るようになりました。

 

 

クラウドの特徴(メリット)

 

クラウドサービスを導入するメリットとして、以下の様な利便性を実現することができます。

 

・サーバーを用意する必要がない

クラウドが誕生するまでは、ユーザーがサービスのソフトウェアを購入し自分のサーバーにインストールして使用する必要がありましたが、クラウドサービスの場合は提供しているサービス元がサーバーを用意しており、ユーザーは自社でサーバーを用意しなくてもインターネットに接続するだけでサービスを利用できる様になりました。

 

・メンテナンスが不要

ソフトウェアのアップデートや不具合に対するメンテナンスなどは全てサービスの提供元が行ってくれるためユーザーは更新作業を行う必要がありません。

 

・どこでも利用できる

インターネットに接続する環境さえあればどこでもサービス使用することが出来るため、端末や場所を選ばずどこでも利用することが可能になります。

 

Geekly Media ライター

とげみ

1+

単体テストと結合テスト比較!技術的な違いからメリット・デメリットまで解説します。

システム開発で重要なのがテストです。システムの納品に至るまでには、ユーザーが望む機能が果たされていることや、エラーになってもシステムが止まらない作りになっているかを慎重にテストする必要があります。今回は、テストの中でも「単体テスト」と「結合テスト」について、技術的な違いやメリットとデメリットを交えてかいせつします。

 

単体テストとは

 

モジュールの動作テスト

 

 

ITシステムは、数々のプログラムの塊が集合することによって実現されています。ひとつひとつのモジュール(プログラムの部品)がしっかりと機能することで、システムとして成り立つのです。

自動車に例えるなら、ドアやタイヤなどの各パーツです。これらパーツのサイズや形が設計と違っていれば、組み立てても乗れない自動車になってしまいます。

システムも同じで、これらのモジュールひとつひとつに欠陥があれば、システムは動かない、あるいは誤動作を起こしてしまいます。

システムのモジュールに関しても、結合する前にモジュール単体でのテストを行います。ひとつひとつをしっかりとテストしておくことで、工程の手戻りを無くすことができるのです。

 

結合テストとは

 

モジュールを合わせた機能テスト

 

 

結合テストではモジュール単体でのテストをクリアしたモジュールと、その他外部モジュールを結合した状態でテストを行います。

自動車に例えると、本体やドア、タイヤといった部品をそれぞれ繫ぎ合わせ、設計通りにドアが開くのか、タイヤが連動して回るのか、それぞれに歪みがないかなどのテストです。

システムにおける結合テストも、モジュールを連携させた場合に、設計通り動くのか、あるいは想定外のオペレーションでのエラーでも、システムが止まることがないか(エラー処理や例外処理が入っているか)などをテストします。

結合テストを行うことで、ユーザーの業務に耐え得るシステムであることを確認します。

 

テストにも仕様書が必要

 

テストにも「テスト仕様書」が必要です。それは、テストパターンやその意味、テスト結果や原因までを記録していきます。

テストパターンでは、パターンに漏れがないように、全てのパターンを洗い出します。そして、パターンごとの結果も全て示しておく必要があります。

パターンについては、全てを網羅する必要があり、パターン漏れは許されません。ですので、ほとんどの場合マトリクスの表を作成します。

テスト仕様書は、ほとんどの場合作り手以外の人が読むことになります。他人が読み、実行することを意識して、読みやすく分かりやすいフォーマットと表現にしなければなりません。

テスト仕様書は、システムのテストが終了した後にも利用されるものです。何かしらの不具合が生じた時に、テスト仕様書を見ながら“問題のパターン”がテスト時点でどのような結果だったのか、また、どのようなアプローチでテストされたのかを確認し、根源を洗い出します。

単体テストや結合テストなどのテスト工程において、最も重要なモノがテスト仕様書なのです。

 

単体テストと結合テストの技術的な違い

 

単体テストではモジュールのプログラム把握が必要

 

 

単体テストで必要とされる技術は、その機能に特化した動作を把握していることと、動作するプログラムを熟知していることです。

単体テストでは、システムで使われる機能が細分化されたモジュールが完璧に機能していることを確認しなくてはなりません。

変数に入るべき値や、考え得る例外処理に至るまで、あらゆる角度からモジュールの機能をテストしますので、そのモジュールがどのように使われるのかを把握しておかなければなりません。

 

結合テストはモジュールを繋げた時の全体の把握が必要

 

 

単体テストを終えたモジュールを組み合わせた状態でテストを行います。この時必要な技術は、システムの全体的なデータの流れの把握です。

モジュール同士が繋がっているということは、システムに必要な機能は揃っているということで、ユーザーが行うオペレーションに近い動作で検証します。

モジュール単体では完璧に動くものでも、それらを結合すると不具合が起きる可能性があります。それはデータの受け渡しや、予期しないオペレーションによる例外処理などです。

また、結合テストでは、システムのセキュリティに及ぶまでを考慮してテストをする場合もあります。ですので、その業務に必要な技術の全てを把握しておくことも大切なのです。

 

単体テストを行うメリットとデメリット

 

メリット:ひとつのモジュールに特化して徹底したテストができる

 

 

単体テストを行う目的は、バグの無い完璧なモジュールを完成させるためです。そして単体テスト工程を行うことで、モジュールをしっかりとテストできるメリットがあります。単体テストが終わったモジュールの信頼性は高くなければなりません。

信頼性の高いモジュールを組み合わせることで、システムが機能するのです。結合テストにおいて、単体テストの信頼性はなくてはならないものなのです。

 

デメリット:コストがかかる

 

 

テストというイメージから、誰でもできてすぐに終わるという意識を持っている人が少なくありません。

しかし、単体テストでは、しっかりとシステムを把握しておかなければなりませんし、そもそも単体テストは非常にコストがかかるのです。

テスト仕様書やテストケースの作成でも工数がかかりますし、実際の単体テスト中にバグが見つかれば、その調査と改修を行わなければならないからです。

単体テストを見積もる際には、コーディングよりも大きなコストがかかることを意識しておかなければなりません。

 

結合テストを行うメリットとデメリット

 

メリット:品質が高まる

 

 

単体テストで信頼性のあるモジュールを結合しテストを行います。単体テストをクリアしたモジュールも、結合テストの段階で機能的な不具合や仕様バグが見つかることも少なくないのです。

結合テストで出た不具合は、最悪の場合モジュールの改修という手戻りを起こしますが、結合テストでモジュールバグや仕様バグといった致命的な不具合を洗い出すことが大切なのです。結合テスト経たシステムは、より品質を高めたシステムとなります。

 

Geekly Media ライター

佐久森

2+

【徹底比較!】Unity vs Unreal Engine!どう違うの?ゲームエンジンの説明からメリット・デメリットまで解説します!

ゲームの開発ツールとして、UnityとUnreal Engineなどのゲームエンジンは非常に人気で、個人の製作現場から大手企業まで様々な形で使用されています。そんなゲームエンジンですが、そもそもどういったものか?どのような使われ方をしているのでしょうか。本記事ではそんなゲームエンジンについてメリットやデメリットをご紹介します。

 

ゲームエンジンとは?

 

 

ゲームエンジンとは、名前の通りゲームを動かすためのエンジン的な役割を持つ開発環境です。ゲームで使用される共通の処理をまとめて開発に使用することを可能にしており、コンピューターゲームの総合的な開発環境として多くの人が利用しています。

昔のゲームエンジニアは、それぞれの会社や個人が自作でアルゴリズムを製作していたため、一からゲームを作成することが非常に大変でした。ところが、過去に作成されたアルゴリズムを元に開発したり、オープンソースでライブラリーとして共有されたりする中で、同一の環境でオブジェクトを製作したり、視覚的にデザインを変更する追加することで、ゲームの開発に関わる総合的な環境を作ろうという動きが生まれゲームエンジンが誕生しました。

 

Unity

 

Unityとは

 

 

Unityはアメリカのユニティ・テクノロジー社が運営しているゲームエンジンで、2Dはもちろんのこと、3Dのゲームを手軽に製作することが可能です。また、製作したゲームを実行できる段階までUnity上で行うことができるため、ゲームエンジンの枠を超えた超総合的な開発環境となっています。

白猫プロジェクトやPokémon Go などを始めとする多くの有名な作品にも採用されています。

プログラミングができない人でも視覚的にキャラクターを操作したり、デザインを変更したりすることが可能です。よりこだわって動きを調整したい場合は「Javascript」「C#」「Boo」の3つの言語で操作することができるため、簡単な製作物から本格的な物まで幅広く対応してくれます。

 

Unityのメリット

 

様々なプラットフォームに対応

 

 

 

様々なプラットフォームで出力することが可能で、Unityの公式によるとモバイルやVR機器、デスクトップなど合わせて24のプラットフォームに対応しています。

 

・モバイル向け

Universal Windows Platform, iOS, Android

 

・VR/AR向け

Google Cardboard Android & iOS, Oculus, Steam, Playstation VR, Gear VR, Windows Mixed Reality, Daydream, Apple ARKit, Google ARCore, Vuforia

 

・デスクトップ向け

Windows, Mac, Linux, Universal Windows Platform, Facebook Gameroom

 

・コンソール向け

PS4, XBOX, 3DS, Nintendo Switch

 

・Web向け

WebGL

 

このように一度作成さえすれば、様々なプラットフォームで自分のゲームを動かすことができます。

 

豊富なアセットを提供するストア

 

 

Unityでは開発者が自身で作成したアイテムやキャラクター、アニメーションやスクリプトといった素材を販売・提供することができるストアが有り、その量が非常に豊富なため自分で作成しなくても簡単に素材を手に入れることができます。

大半が有料で提供されていますが、無料で提供されている物もあるので素材で困ったら確認してみると効率的に製作することが可能になります。

 

無料で使用することができる

 

 

Unityには無料で使用することができるPersonal版が提供されており、収入や資金が10万ドルを超えない人はこれを利用することが出来ます

大々的な製品化を目指していないのであれば無料版でもかなり充実した機能を使用することが出来るため、ゲームの開発初心者にとってはかなり有難い製品設計になっています。

個人で本格的に開発したいという方向けには月25ドルの年間プランが、チームで開発したい方向けには月125ドルのプランが提供されています。

 

Unityのデメリット

 

 

Unityに大きなデメリットは無いのですが、強いて挙げるのであればその充実性が故にアプリケーションの起動が遅かったり、編集画面に英語が頻繁に使われていたりすることが挙げられます

とはいえ、日本語のプラグインをインストールすれば日本語化出来ますし調べれば簡単に理解できる英語が多く使用されているため、プラグインさえすれば簡単に利用できます。

 

Geekly Media ライター

とげみ

1+

【徹底比較!】CG vs CAD!両者の違いからできることまで分かりやすく解説します!

CGもCADもクリエイティブな製作現場でよく使われると思いますが、このCGとCADの違いを理解していました?どちらもコンピューターを使用して製作されるため、具体的な違いまでは理解していないという方も多くいるのではと思います。本記事では、このCGとCADの違いやそれぞれのツールで出来ることを分かりやすく説明します。

 

CGとは

 

 

CGはComputer Graficsの略で、コンピューター(Computer)を使用して製図(Grafics)したり加工したりした製作物のことを指します。CGと聞くと、複雑な製作物を思い描く方もいるかと思いますが、パソコン上で画像に何らかの加工をしただけでもCGを利用したことになります。

CGはイラストや画像、ゲームのキャラクターなどを平面で描いた2DCGと映画やアニメなど奥行きを持たせた3DCGの2つが有り、漫画やアニメ、CMなどの製作に使用されるのはもちろんのこと、現代アートなど様々な分野で使用されるため、主にデザイン業界で働く人が使用しています。

 

CADとは

 

 

CADはComputer Aided Designの略で、その名の通りコンピューター(Computer)を使用したデザイン(Design)の支援ツール(Aided)のことを指します

CADは従来の手書きの設計図をそのままコンピューター上で使用することができる2DCADと建築物や立体的なプロダクトなどをコンピューター上で設計できる3DCADが有り、建築物やプロダクト製作の現場において、図面や設計書を作成するために使用されます。

 

CGとCADの違い

 

 

CGCADで大きく違う点は、製作物の目的です。

CGは主に人に見せることで完結する製作物のために使用されます。そのため、見た目へのこだわりが強く、受け手がどのような印象を受けるかということが重要になりますが、CADは主に実際のプロダクトを開発するための設計図として使用されます。そのため細部の寸法や実際にそれを実現できるかという現実性の部分の重要視し、受け手が正確な情報を受け取ることが出来るかという点が重要になります。

 

そのためCGで作成した製作物を実際にプロダクトとして落とし込もうと思った場合に正確な寸法が合わなかったり中身のデータが足りなかったり等のエラーが起こります。逆に製作物でプレゼンテーションをする場合はCADの正確さよりも、CGを使用した視覚的なPRの方が好まれる場合が有ります。

つまりCGCADもコンピューター上で使用するが、CGは視覚的な印象が重要で、CADは中身の正確な寸尺が重要という点で違いが有ります

 

CGで出来ること

 

イラストやデザイン作成

 

 

CGと聞いて一番身近な存在は恐らく二次元のCG技術を利用して製作された製作物であると思います。例えばPhotoshopやIllustratorを使用して作成した画像やロゴは全てCG技術を利用して手を加えた状態です。

これを利用してウェブサイトやゲームのデザインを行なうこともできますし、アニメや漫画のデザインを行うことも可能になっています。宮崎駿氏の映画なども基本的には手書きで製作されていますが、色を塗ったり加工したりといった点においてはCG技術を使用しています。

 

アニメや映画作成

 

 

三次元のCGを使用した製作物の多くに映画やアニメの製作が挙げられます。映画にCGが使われたのは1982年が最初で、「トロン」という映画が製作されました。2010年にウォルトディズニー社がリメイク作品を出しているので、映画を見たという方も多くいるのではないでしょうか。

また、CGを使用して作成されたアニメーションやゲームなども多く存在します。映画自体を全てCGで製作した「トイ・ストーリー」はもはや知らないという人の方が珍しい程有名ですし、メタルギアソリッドやファイナルファンタジーシリーズなど多くのゲームでCGを利用した加工を行なっています。

 

このように多くの動画製作現場では、3Dを使用した動画が作成されています。これは、CGを使用すると、1秒間に24コマ以上のフレームを簡単に作り出すことが出来たり、現実には存在しないような物を作り出すことが出来るからです。

 

プレゼンテーション用の製作

 

 

CGはプレゼンテーションのためにも頻繁に使用されます。建築予定の建物や商品のPRをイメージすると分かりやすいと思いますが、建築予定のマンションを建築の知識が無い人にPRする場合、まずは綺麗な見た目や色合い、奥行きなどを視覚的に理解させるようなプレゼン資料を作成する必要があります。

そういった場合にCGを用いることで開発途中でも受け手に明確なイメージをさせることができるため、商品の購入や説得に大きな有用性があります。

 

Geekly Media ライター

とげみ

10+