『XAMPP』について徹底解説!その特徴からできることまで、分かりやすく解説します。

Webのサーバサイド開発で頻繁に使用するApatchやPHPといった言葉を聞いたことはあるでしょうか。サーバの運用はApatchやPHPなどの複数のソフトウェアで成り立っています。そのため構築構築だけでも詰まると数時間かかることもあります。そこで、サーバサイド開発の環境を手軽に構築できる「XAMPP」を紹介します。

XAMPPとは?

 

 

XAMPP(ザンプ)とは、Webアプリケーションの実行環境を構築するソフトウェアです。

実行環境とは

・Webサーバー

・データベース

・プログラミング言語

などです。

環境構築するのは、1つのソフトウェアをインストールだけでしたら簡単です。

しかし複数のソフトウェアとなると面倒です。

XAMPPは、コマンド入力もなく詳細設定ファイルも変更せず、実行環境をボタンをクリックするだけで環境構築できます

そしてXMAPPはフリーソフトのため、全て完全無償です。

XAMPPはApache Friendsによって開発されました。

Apache Friendsは、Apacheサーバーの振興を行う非営利プロジェクトでもあります。

Apacheサーバとの親和性も高いと考えられます。

XAMPPは2002年に初版リリースされ、10年以上の実績があるため安心して使用できます

 

XAMPPの意味とは?

 

 

5つの単語の意味を組み合わせてXAMPPと名づけられました。

 

X – クロスプラットフォーム

A – Apache

M – MariaDB(旧バージョンはMySQL)

P – PHP

P – Perl

 

これらのソフトウェアを使用することでWebアプリケーションが作成できます。

 

クロスプラットフォーム

 

クロスプラットフォームとはどのOS(Windows、Linux、macOS、Solaris)でも同じ仕様で動作することです。

マルチプラットフォームとも言われることもあります。

 

Apache

 

Apacheとは世界で最も高いシェア(50%以上)を誇るWebサーバーソフトウェア(HTTPサーバー)です。

Apacheが人気の理由として

・OSに依存しない

・オープンソース

・動的コンテンツの処理速度が速い

・信頼性

・実績が多く開発者向け技術情報が多い

などが挙げられます。

更に他のサーバと比較してセットアップがすぐに完了できるメリットもあります。

 

MariaDB

 

MariaDBとはMySQLからから枝分かれしたデータベースシステムです。

MySQLよりも高いパフォーマンスを提供しているのが特徴です。

注意したいのがXAMPPを起動すると表示が「MySQL」の箇所がありますが、実際の中身はMariaDBに入れ替わっています。

 

PHP

 

PHPは「Hypertext Preprocessor」の略で、HTMLに埋め込むことができるため、Web開発でよく使用されるスクリプト言語です。

PHPは特にサーバーサイドでコードを実行するためによく使用されます。

PHPはプログラミング初心者に人気があり、その理由は文法も分かりやすく基本的な文法を覚えてしまえば、簡単なプログラムをすぐに書くことができるためです。

 

Perl

 

PerlはC言語とシェルの良い所を備えたようなプログラミング言語です。

大きな特徴は、テキスト処理に対して非常に強力でライブラリモジュールが豊富であることです。

更にドキュメントやライブラリはオープンソースで公開されていて誰でも無料で自由に利用可能な上に、ほとんどのオペレーティングシステムで動作可能です。

しかし、現状はWebアプリケーション分野ではPHPが選択されることが多いです。

PHPが優位な点として

・ソースプログラムの分かりやすさ書きやすさ

・フレームワークの充実

・コンピュータの性能向上

などが挙げられます。

 

特徴① 学習・開発に最適なソフトウェア

 

 

特に初めての方であれば、環境構築に詰まる人が多いでしょう。

インストール時にソフトウェアの詳細設定をいくつか変える必要があるためです。

しかし、XAMPPは面倒な詳細設定は飛ばして手軽にインストールし、実行できます。

もちろん、詳細設定は自由な変更できます。

XAMPPを使用することで極力不要な手順を減らし、学習・開発に専念できます。

 

特徴② ソフトウェアのバージョン管理

 

 

XAMPPは複数のソフトウェアをパッケージングしたツールです。

XAMPPをインストールすると、Apache、MariaDB、PHPのバージョンが一律に固定されてしまいます。

 

これには少々問題が生じる可能性があります。

例えば3つアプリケーションを所持している人がいるとします。

その人がすべて異なるApacheのバージョン、PHPのバージョンで運用していた場合にXAMPPのバージョンに合わせる必要があります。

ZAMPPの推奨する環境で実施しなければ当然バグが生じる可能性があります。

所定のバージョンに合わせるために時間を費やす必要があります。

また、個々のソフトウェアの最新のバージョンに対応させるにはXAMPPが対応するまで待つ必要があります

現状の傾向としてはPHPのバージョンアップに合わせてXAMPPのバージョンが挙げれるケースが多いです。

 

XAMPPでできること(1) 高速で環境構築ができる

 

 

先述しましたが、インストールからサーバ起動までボタンだけで完結できるほど簡単です。

高速に環境構築できる利点は無駄な作業に時間がとられないことです。

 

「Webサーバ上でのPHPの学習」、「Webサーバを作ってみたい」など誰もがWebサーバの構築する目的をもって取り組まれています。

特に初めての方は環境構築で詰まるケースが多いです。

環境構築という目的とかけ離れた作業に時間を費やしてしまうのは勿体ないです。

環境構築自体はとても大切なことで仕組みを理解する上で欠かせないプロセスですが

学習において優先度が低いので、ある程度理解が深まってから環境の学習を進めたほうが良いでしょう。

 

XAMPPでできること(2) Bitnami連携で便利なアプリケーションがインストールできる

 

Bitnami(ビットナミー)は、XAMPP上に Drupal、Joomla!、WordPressなど広く使われているアプリケーションをインストールするためのツールです。

実際にWordPressをインストールしてみましたが、ボタンでインストールを進め、XAMPPのインストール先を選ぶだけでWordPressがローカルに設定できました。

とても簡単でスピーディに規定のアプリを連携できます。

 

XAMPPでできること(3) ローカルでもクラウドでもインストールできる

 

XAMPPは柔軟性が高く、ローカルでもクラウドでもソフトをインストールすることができます。

 

ローカル環境

 

 

XAMPPはクロスプラットフォームだということをお伝えしました。

Windows、Linux、macOS、SolarisのOSで同じように動作させることができます。

XAMPPはローカルの完全な環境構築だけではなく、クラウド上でも動かせられます。

 

クラウド環境

 

 

拡張性の高いXAMPPはクラウド上でも動かすことができます。

クラウドとは、「ユーザーがインフラやソフトウェアを持たなくても、インターネットを通じて、サービスを必要な時に必要な分だけ利用する」ことです。

サービスの例としてMicrosoft Azure、Google Cloud Platform、Amazon Web Servicesなどが挙げられます。

公式サイトにて、クラウドでXAMPPを実行する方法に関する詳細なチュートリアルを提供されています

また、WordPressアプリケーションをXAMPPからAmazon Web Servicesでの高可用性の本番用WordPressデプロイメントに移行することもできます。

 

XAMPPでできること(4) データベースはMariaDB以外も使用できる

 

PostgreSQLについては別にサーバを用意しておけば、PHPのpg関数が有効となり、接続することができます。FirebirdおよびInterBaseについては「php.ini」に修正を加えることでinterbase関数が有効となり接続できます。

 

まとめ

 

 

XAMPPは簡単にWebアプリケーションの実行環境を整えるため、初めての方には特に需要が高いです。

しかし、簡単が故にアプリ間の仕組み等はブラックボックスになっているため、詳しく知りたい方や慣れてきた方は一度、個々にインストールすることも良いでしょう。

【TypeScriptとは?】その特徴を徹底解説!気になる将来性から人気の理由までご紹介します!

近年、Web業界でTypeScriptの人気が急上昇しています。プログラマなら一度は耳にしたことがあるのではないでしょうか?では何故ここまでTypeScriptが人気になったのでしょうか。JavaScriptと何が違うのでしょうか。本記事ではTypeScriptの魅力とJavaScriptの関係性と初めて読む人でもわかりやすく解説します。

 

TypeScriptとは?

 

 

TypeScriptは2012年にマイクロソフト社によって開発された新しいプログラミング言語ですが、Swiftのような全く新しい言語というわけではなく、JavaScriptのトランスパイラにあたります。

トランスパイラというのは、ある言語で書かれたソースコードを別の言語へ変換することです。

つまり、TypeScriptで書かれたソースコードは最終的にJavaScriptへ変換されるのです。

 

TypeScriptを簡単に一言でまとめると、基盤はJavaScriptを採用し、更に使いやすくするための機能や構文を追加された言語です。

 

誰が使うのか?

 

 

JavaScript開発者全般が対象です。

JavaScript大規模開発ですと、管理が大変、そもそもデバッグしにくいと感じる方も多いと思います。

TypeScriptはJavaScriptの欠点を補ったより使い勝手の良い機能が多数存在するため、JavaScirptで開発され続けている方には開発効率が何倍にも上がる可能性があります。

 

TypeScriptの特徴

 

静的型付け

 

TypeScriptは静的型付け言語です。(JavaScriptは動的型付け言語)

静的型付け言語は型を事前に定義しないとコンパイル時に未定義エラーが生じます。

全て宣言しなければならない手間と引き換えに開発をスムーズに進めるためのメリットが多数ありますので本記事にて後述します。

他の言語でもC++,C,Swif,Java等が静的型付き言語です。

 

クラスベースオブジェクト指向

 

 

TypeScriptはクラスベースオブジェクト指向です。

(JavaScriptはプロトタイプベースのオブジェクト指向スクリプト言語)

クラスベースオブジェクト指向言語の譲渡はクラスの継承関係にもとづいて行ないます。

よって新しいオブジェクトを作成するときは「クラスのインスタンス」を作ります。

対して、プロトタイプベースのオブジェクト指向言語の譲渡は「プロトタイプ」と呼ぶ既存のオブジェクトに投げます。

よって新しいオブジェクトを作成するときは、「プロトタイプのクローン」を作ります。

プロトタイプを使用して疑似的にクラスを作成します。

 

C#のリードアーキテクチャ

 

「Turbo Pascal」「Delphi」「C#」「VB」の開発者でもあるアンダース・ヘルスバーグ氏がTypeScriptの開発に関わっています。

アンダース・ヘルスバーグ氏の設計方針として

・オブジェクト指向ベース

・優れた開発生産性

・各種言語の良いところを新言語仕様に適応

 

など、アーキテクチャの鏡のような人物です。

実際にTypeScriptにもC#の設計がいくつか取り入れられています。

 

TypeScriptJavaScriptのスーパーセット

 

簡単にいうとJavaScriptの上位拡張仕様です。

JavaScriptとの互換性もあり、JavaScriptの機能を100%使える上で、TypeScriptの独自の機能も使えます。

 

TypeScriptの将来性

 

今や人気言語の一つ

 

2019年6月の人気言語ランキングは以下です。

 

1 JavaScript

2 Java

3 Python

4 PHP

5 C++

5 C#

7 CSS

8 Ruby

9 C

10 TypeScript

 

引用元:https://redmonk.com/sogrady/2019/03/20/language-rankings-1-19/

 

見事にTOP10入りを果たし、話題のSwiftよりも上位です。

前回は12位でしたので2つ順位を挙げており、近年好調といえます。

また、TypeScriptが人気である要因の1つにJavaScriptが不動の1位を獲得していることも挙げられます。

 

altJSにおいても頭一つ飛びぬけている言語

 

altJSとは「alternative JavaScript」の略で、代替JavaScript言語のことです。

altJSで書かれたプログラムは、コンパイルすることで最終的にJavaScriptコードを生成することができます。

それではaltJSの人気ランキングはこちらです。

1.TypeScript(69.14%)

2.CoffeeScript(41.14%)

3.Dart(16.57%)

4.Haxe(14.86%)

5.JSX(7.43%)

引用元:https://www.buildinsider.net/hub/survey/201404-techtrend-en

 

TypeScriptは昔から知られるCoffeeScriptを抜かし、頭一つ抜きんでています。

つまりaltJSとしてもとても優秀な言語だといえます。

 

有名企業が多数使っている

 

数多くの企業が使用しているため、代表してビッグネームの企業を挙げます。

・Microsoft

・Google

・BMW

・VMWare

 

GoogleではライバルのMicrosoft社製であるにもかかわらず、TypeScriptを標準言語として採用した実績があります。

需要があるためTypeScriptの開発がストップするということはないと考えられます。

 

人気の理由

 

 

なぜここまで人気が出たのかをTypeScriptの特徴から分析します。

 

静的型付けで開発効率アップ

 

 

静的型付き言語には多数のメリットがあります。

 

①エディターやIDE(統合開発環境)のサポートが受けやすいです。

様々なAPIを利用していると、開発中に細かいメソッド名がわからなくことがありますが、そのたびに名前を調べるの効率的ではありません。

TypeScirptが対応された環境だとメソッドの候補や引数も入力補完してくれます。

 

コンパイル時にエラーを発見することが容易になっています。

動的型付け言語ですと自由度が高い代わりに実行時エラーなど実行しなければ出現しないエラーが存在します。

 

③JavaScriptのオブジェクトを型として定義することもでき、

型が宣言されているため、わざわざキャストする必要もありません。

特に大勢の人がアサインされる大規模の開発に有効です。

 

Classが使える

 

そもそも、JavaScriptにクラスという概念は存在していません。(プロトタイプベースのため)

JavaScriptでは、クラスの代わりにプロトタイプと関数を駆使して疑似クラスで対応していましたがこの書き方は読みにくく、コードも無駄にたくさん書くため敬遠されがちでした。

そんな中、TypeScriptによるClassの概念が投入されました。

クラスベースなのでJavaやC++と同じ概念であり同等の使い方ができます。

 

多数のIDEやテキストエディタで対応

 

 

当初はVisual Studioしかなかった開発環境が今では多数のIDEやエディタが対応しました。

・Microsoft Visual Studio

・Visual Studio Code

・WebMatrix

・IntelliJ IDEA

・WebStorm

・Eclipse

・NetBeans

・Sublime Text

・Emacs

・Vim

・Cloud9 IDE

・Codenvy

・Codeanywhere

・Atom

 

TypeScriptのコンパイラの設定が簡単

 

TypeScriptのコンパイラは、npmモジュールとして配布されています。

Babelのような複雑な設定やプラグインを入れる必要はありません

`tsconfig.json`という設定ファイルを作る必要はありますが、最低限の設定でコンパイルすることができます。

参考ですが、`tsc`は`jsx`のコンパイラも含んでおり、ReactのコンポーネントもJavaScriptにコンパイルできます。

 

JavaScriptからTypeScriptの移行時に大きな書き換えが不要

 

TypeScriptはJavaScriptのスーパーセット(上位拡張仕様)なので、移行するために大きな書き換えをする必要はありません。一度に1モジュールずつ、徐々に実行できます。

更に新しい文法を使っても古い環境で動作させることができます

 

ちなみにAngularJSもJavaScriptからTypeScriptに上記の方法で移管したようです。

 

コードがわかりやすくなるため、大規模開発のスピードが上がる

 

 

TypeScriptは静的型付き言語なのでfunctionを呼び出すときにIDEやエディタでコード補完され、第三者がソースコードをみても理解しやすくなります

また、クラス定義や名前空間といったモジュールの要素がありますのでコードは汚染されることなく切り分けすることができます。

 

まとめ

 

 

TypeScirptはJavaScriptの欠点を補い、更に効率的に開発を進めるための言語です。

今までJavaScriptしか使ってこなかった方や少しでも興味がある方は簡単にインストールできるので一度インストールしてみてはいかがでしょうか。

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)はリクエストの量に応じてメモリが消費されます。同時処理数が少ない場合には両者にあまり違いはありません。

 

【Reactとは?】その特徴から将来性まで徹底解説!

昨今のWebコンテンツ制作に関してWebデザイナーとコーダーを兼任するというケースは珍しくありません。そのため、Webデザインおよびコーディングの時間が切迫されています。そこでコーディングコストや学習コストが極力少ないライブラリが求められています。そんな要望に応えうるJavaScriptライブラリの1つであるReact。本記事でReactにどのような特徴・将来性があるのかを確認しましょう!

 

Reactとは何か?

 

 

Reactとは一言で言うとUIを作るためのJavaScript用ライブラリです。Facebookが開発元でFacebook,Yahoo,ATOM,Airbnbなど有名な企業で採用されています。

ではなぜReactにそれほどまでの実績があるのかというと、Reactのコンセプトに大きな魅力があると考えられます。

Reactの公式ページで3つのコンセプトが挙げられています。

 

・Declarative

・Component-Based

・Learn Once, Write Anywhere

 

これらがReactの中核といえる考え方ですので次で詳しく紹介します。

 

Declarative(宣言的である)

 

 

「宣言的」であることが従来のJavaScriptと大きく異なり、Reactの最大の特徴でもあります。

 

「宣言的」というのは条件と結果が明確にコードに記載されている状態であり、他の人がソースコードを読んでも理解がしやすい仕組みとなっています。

その結果、問題点を洗い出しやすくなりデバッグやテストが容易になります。

 

フロントエンジニアならご存知の”jQuery”はイベントに対して手続き的に処理を書く必要があるため、デバッグもしにくく、どうしても読みにくいソースコードになってしまいます。

 

Component-Based(コンポーネント指向である)

 

 

アプリケーションの構成要素を小さい部品(コンポーネント)の集合として考えて設計されています。

機能を小さい部品に分割して持たせているため、状態の管理もしやすく拡張性があるので再利用も容易にできます。

 

Learn Once, Write Anywhere(一度の学習で何度でも書ける)

 

 

Reactを習得するとWebアプリケーションだけでなく他の分野にも適応することができます。

例えば、モバイルアプリ開発ではReact NativeというReactの概念を基盤としたクロスプラットフォームが使用できます。

 

簡単なモバイルアプリであればSwift(iOS開発言語)やJava(Android開発言語)を使うことなく、JavaScirptとReactの概念だけで作成することができます。

また、同様にVR開発もReact VRというフレームワークで開発することができます。

 

大きな利点としては開発スタイルをReactに統一さえすれば一度の学習で多くの分野で知識を再利用できることです。

 

Reactの特徴① レンダリングが高速

 

ここでのレンダリングとはWebページを描画することを意味します。Reactでは仮想DOM(Document Of Model)という技術が使われています。これはWebページ内の一部を更新したいときに全てページをまるっと更新するのではなく、更新された一部のみを変更するという効率的な仕組みです。

この仕組みのおかげでレンダリングする箇所は一部に留まり、高速で表示の切り替えが可能です。

 

Reactの特徴② 大規模なアプリケーションほど向いている

 

大規模なアプリケーションを運用するにあたって最も大切なことは管理です。ページ数が膨大になれば可能な限り同じようなコンテンツの共通化を図らなければ作成する時間やテストする時間が膨大になります。

更にコンテンツ間の多岐にわたるページ遷移や条件などの複雑な処理が増加するため、それに耐えられる柔軟性も必要になります。

Reactはこれらの課題を解決する可能性を秘めています。

そして以下の特徴から大規模なアプリケーションに向いていると考えられます。

 

管理しやすい設計である

 

 

Reactのコンセプトでもあるコンポーネントとして小さい部品する設計方針は多数のコンポーネントの再利用化へとつながり、コンポーネントごとに状態も把握できるので管理がしやすくなります。

jQueryやBackbone.js、Angular.jsは大規模になった際には管理が難しくなってしまいます。

 

複雑な条件も組み込むことも可能

 

ReactはJavaScriptで書けるため複雑な条件も組み込むことも可能です。JavaScript自体が関数がオブジェクトだったり、コールバック関数が使えたり関数は引数の数を問わなかったりと比較的柔軟な言語でもあります。

 

コードの複雑性を避け、見やすい設計

 

Reactでは「データ」から「画面」という方向でしかデータが流れません。(単方向バインディング)これによりコードの複雑性を避け見やすい設計となります。

モジュールの分割による長期の運用も可能

 

中核の機能であるレンダリングとその他の機能が別々のモジュールとして開発されています。(コンポーネント指向であるため)そのため、アプリケーションに応じて必要なモジュールのみを追加や削除することができるの長期運用に向いた構成になっています。

 

カスタマイズ性が高い

 

自分で選択したツール、ビルドツール、フォルダ構造を最大限に活かせることです。例えばテストはFacebookのJestフレームワークを利用して、フォルダはプロジェクトごとに自由に変更して、という使い方ができます。

大規模なプロジェクトほどこの恩恵を感じられます。

 

『Docker』のメリット・デメリットを徹底解説!気になる使い方もわかりやすく解説します!

開発を進める上で『OSや環境によってプログラムが動作しないことがある』問題は必ずついてきます。Dockerはアプリケーション作成・デプロイ・実行を簡単にするツールのため、上記の問題を解決するのに役に立ちます。Dockerのメリット・デメリットを抑えてしっかりと理解しましょう!またWindowsでの使い方も紹介します!

 

Dockerについて

 

クジラのアイコンが特徴のソフトウェアDocker はコンテナ型の仮想化サービスです。

コンテナ型の特徴・Dockerと仮想マシンの違いを簡単に紹介します。

 

Dockerとは?

 

 

コンテナとは一般的な意味では『(内部に物を納めるための)容器』ですが、ここでのコンテナ型とは『ソースコードやそのすべての依存関係をパッケージ化するソフトウェア』を示します。

つまり、ユーザが作成したコンテナ(ソースコードや環境)をDockerという移送手段を用いて他のパソコンにまるっと展開することができます。

コンテナ内はDockerの管理下に存在しており、その中ではアプリケーションやライブラリ、ミドルウェアなどをそれぞれ管理します。

 

どんなときにDockerを使うのか

 

 

リリース当初はアプリケーション開発時に使用する用途がほとんどでした。

その理由はOSやバージョン違いの動作に素早く対応できデプロイの速度を上げられるからです。

しかし最近ではDockerの実用性に高い評価があり、開発時だけではなくコンテナの環境をそのままテストや本番環境として利用されるケースが増えています。

 

仮想マシンとの違いは?

 

 

よく比較されるサービスとしてVMwareやVirtualBoxなどの仮想マシンが挙げられます。

大きな違いとしてDockerが仮想化するのは『コンテナ』で仮想マシンは『OS』を仮想化します。

Dockerは1つのOSに対して多数のコンテナを管理するため多数のOSを管理する仮想マシンと比較して軽量で速いです。

また、コンテナ作成に必要なリソースは少ないため導入が簡単ですぐに開始することができるので開発の密度を高めることができ、同じハードウェアでより多くのサービスを実行できるためコストを削減できます。

しかし、同じカーネル上で実行することの副作用として仮想マシンよりも分離度が低くなります。

要は実行しているOSに依存度が高いということです。

 

Dockerのメリット①  簡単に環境構築

 

 

今までの開発は同じ環境を別のマシンで再現するためには多数の手順があり、操作ミスや手順の記憶違いなどのヒューマンエラーで開発を遅延する可能性がありました。

Dockerは環境がまるっと提供されるので少ない手順で同じ環境が構築できるためよりスピーディーで正確に同じ環境を再現することができます。

 

Dockerのメリット②  軽量でスピーディーな開発

 

 

コンテナは軽量のため、立ち上げる速度は一瞬です。

それと比較して仮想マシンはOSをいくつも立ち上げる必要があり、処理自体がかなり重いです。

コンテナはメモリやディスクの消費量を少なく抑えた状態で仮想化できます。

これにより、立ち上げるスピードも圧倒的に早くなり開発に集中できます

 

Dockerのメリット③ ハードウェアの資源削減

 

 

コンテナのサイズは非常に小さく、一つの物理サーバに多数のコンテナを稼働させることができます。

その結果、物理サーバを購入するコストが削減されます。

 

Dockerのメリット④ 共有化されたシステム

 

 

Dockerの特徴はコンテナだけでなく、共有化サービスの『Docker Hub』があります。

『Docker Hub』を通してインターネットを通じて世界中の開発者の成果物を入手したり、成果物をアップロードすることができます。

優れたプログラマが作成したイメージを効率よく、活用する仕組みが整えられています。

 

『Swift』のメリット・デメリットを徹底解説!プログラミング言語としての特徴から気になる評判までご紹介します!

SwiftがWWDC(Worldwide Developers Conference)で発表されてからはや5年が立ちました。Swiftは「モダン・安全・高速・表現力豊か」というコンセプトの言語として発表されましたが、実際のところどういった特徴があるの?Objective-Cとどう違うの?と思われる方も多いです。本記事でメリット・デメリットを抑えてしっかりとSwiftの特徴を理解しましょう!

 

Swiftのコンセプト①  モダン

 

 

モダンとは「現代的」という意味になりますが、プログラミング言語におけるモダンとは流行りの書き方や新しく普及された機能などを主として指しています(ちなみにモダンの対義語はレガシーです。)。

それではSwiftのどこがモダンかというと、公式サイトにて6つの事例が挙げられています。

 

・Variables are always initialized before use.

・Array indices are checked for out-of-bounds errors.

・Integers are checked for overflow.

・Optionals ensure that nil values are handled explicitly.

・Memory is managed automatically.

・Error handling allows controlled recovery from unexpected failures.

引用元:https://docs.swift.org/swift-book/

 

これらを和訳すると以下のように書き換えられます。

 

・変数は使用する前に常に初期化する

・配列インデックスは範囲外エラーもチェックする

・整数のオーバーフローをチェックする

・Optional型を使用することでnilを明示的に扱える

・メモリは自動的に管理される

・予期しない障害でもエラー処理の制御により回復できる

 

ここで注目したいのはOptional型のnilについてです。Objective-Cにおけるnilと扱いは似ていますが別物です。

Objective-Cで使用されるnilは「存在しないオブジェクトへのポインタ」ですがSwiftでは「型に対する存在しない値」を意味します。

Objective-Cでは参照したオブジェクトが存在しない場合にnilが返り値として使用できますがSwiftではIntやStringなどのすべての型に対してnilを使用できます。

型に対してnilを使うメリットは明示的にnilを定義することで隠れたエラーを事前に気づくことができるということです。

 

安全



 

ここでの安全とは「誤って異なるメモリにアクセスすることは決してない」という意味です。

「クラッシュしない」という意味ではありません。具体的に何が対策されているのかというと型の誤りや未定義をコンパイル時に検出するので、予期せぬ型による実行時エラーが発生しません

Optional型も安全性の向上として取り入れられています。

 

高速


 

Swiftは、C言語ベースで作られていたObjective-Cに代用できるよう設計されています。つまり、C言語と同等のパフォーマンスを発揮しなければなりません。

では実際にObjective-Cと比較するとどちらが早いのか?それはプログラミングしたソースコードによります。

例えば構造体を使ったSwiftの場合は、C言語に近いスピードになりObjective-Cよりもかなり速くなると言われています。

 

表現力豊か

 

 

Swiftは楽しい言語として位置付けるために数々の工夫がなされており、例えば次のような機能です。

 

・Closures unified with function pointers

・Tuples and multiple return values

・Generics

・Fast and concise iteration over a range or collection

・Structs that support methods, extensions, and protocols

・Functional programming patterns, e.g., map and filter

・Powerful error handling built-in

・Advanced control flow with do, guard, defer, and repeat keywords

引用元:https://swift.org/about/

 

これらを和訳すると以下のように書き換えられます。

 

・クロージャは関数ポインタとして使用できる

・タプルの戻り値を複数に設定できる

・型を柔軟に読み取ってくれるジェネリックスがある

・rangeまたはcollectionに対して高速で簡潔にイタレーションされる

・メソッド、拡張機能、およびプロトコルをサポートする構造体がある

・関数型プログラミングとして使用できる

・強力なエラー処理機能がある

・do、guard、defer、repeatのような高度な制御フローが使える

 

ジェネリクスが使えるのはとても便利ですね。

 

Swiftのメリット①  処理が早い


 

Swiftは速さも売りにしており、Arrayの処理が特に速いとされています。

Appleの公式サイトの検証結果では深さ優先探索アルゴリズムを使って1つの

グラフ内で10,000個の整数を検索した場合、Objective-Cの最大2.6倍、Pythonの最大8.4倍の速度が出ると発表しています。