RDBMSとNoSQLを徹底比較!特徴からそれぞれのメリット・デメリットまで、わかりやすく解説!

RDBMSは誕生当初破壊的イノベーションと言われる様なデータベースで、今もなお多くの企業で利用されています。しかし情報量やデータ量の増加に伴いより適した形のデータベースシステムとして誕生したのがNoSQLです。本記事ではそんなRDBMSとNoSQLの特徴からそれぞれのメリット・デメリットなど分かりやすくまとめてみます。

 

RDBMSからNoSQLへ

 

 

RDBMSは階層型データベースが主流だった1960年代に誕生し、1970年からは多くの企業がRDBMSを利用したサービスを開発し、データベースの主要システムの座を奪いました。しかし時代が経つにつれてRDBの処理が重かったり、分散性がなかったりという点に不満視する声が広がり、今のニーズにあったデータベースシステムがあっても良いのではないか?という声からNoSQLが誕生しました。

 

RDBMSとは

 

 

RDBMSはRelational Database Management Systemの略で、その名の通り関連性のあるデータを表形式( Excelのように)で紐づけて管理するデータマネジメントシステムです。データベースのやりとりにはSQLという言語が使用されます。

RDBMSでは表形式のデータをテーブル、項目をカラムと呼びます。例えば商品についてデータをまとめているテーブルが有ったとして、その中に商品番号・商品名・商品IDというカラムを作成し、データを格納するという感じです。

各カラムは別のテーブルと紐づける事が可能で、上の例を使うと商品IDと商品の販売店舗テーブルを紐づける形です。

このようにデータの定義や関係性を厳格に行う事で複雑なデータ構成にもが対応する事ができます。

 

NoSQL

 

NoSQLとは

 

 

NoSQLはNot only SQLの略で、RDBMS以外のデータベースシステムを表す際に使用されます。RDBMSが対応しきれなかったような所を改善するために開発されており、SQL言語を使用しなくてもデータベースを使用する事が出来ます

 

一般的にNoSQLはキー・バリュー型のデータベースを指して使用される事が多いです。キー・バジュー型はその名の通りキーに値が付いたシンプルなデータベース構造で、商品1=りんご、商品2=みかん、といった感じです。

他にもXMLやJSONといったデータ構造を容易に変更することができるドキュメント型のものなど、様々なサービスが有ります。

 

RDBMSとNoSQLの違い

 

 

NoSQLはRDBMSが対応できない部分を改善するために生み出されたため、2つは大きく違います

RDBMSは複雑なデータベースでも厳格に設計できるような仕組みになっており、格納されたデータを処理するためにSQL言語が使用されます。一方NoSQLはSQL言語を使用しなくても一般のプログラム言語でデータを呼び出せるような自由な設計になっています。

これは、RDBMSとNoSQLが誕生したきっかけにも関係してくるのですが、両者には処理速度やデータの分散化といた分野で得意不得意が有ります

次の項目からそれぞれのメリットとデメリットを紹介し、より具体的にそれぞれの違いについて説明しますが、両者の違いについて分かりやすいように表でまとめてみます。

 

RDBMS NoSQL
分散性 ×
拡張性 ×
一貫性 ×
検索 ×

 

 

それぞれのメリットとデメリット

 

RDBMSのメリット

 

 

RDBMSはデータ処理の一貫性が保証されているというメリットがあります。

データベースの処理が正常に行われた場合結果が表示され、処理が正常に行われない場合は処理前の状態に戻ります。この処理についてエンドユーザーは確認する事ができず、結果のみを確認する事が出来ます。

また複数のテーブルを連結されてデータベースを構成する事で、追加・削除・更新といった処理コストを低減させる事が可能になります。

更に複雑なデータ構成での検索や集計もSQL言語を使用することで正確に引き出すことができます。

 

NoSQLのメリット

 

 

 

NoSQLはデータの処理速度が早いというメリットが有ります。

NoSQLはデータの一貫性やバリデーションといった機能を排除し、サーバーを水平分散できるようにしました。そのためデータの処理速度を比較的早くすることが可能になりました。

また、データが大規模になってきてもサーバーを水平分散させる事ができることから必要な分だけ自由に拡張する事ができる様になります。

度々出てきている水平分散とは、1つの仕事を複数台のコンピューターが協力して行う事ができるようにすることです。

 

SLAとは!SLOとの違いは何?ITサービスを発注するなら知っておきたいワードを解説します!

ITサービスの発注を行う際はSLAという契約やSLOという目標値を確認することが必ず行われます。それらの内容について理解せずにお金を支払い、サービスを利用してしまうと後でトラブルの種になってしまう可能性があります。今回はSLAとSLOの違いやそれぞれの説明、サービス契約における注意事項などを紹介します。

 

SLAとSLOの違い

 

 

SLAがサービス提供者とユーザーの間で取り決める契約で有るのに対して、SLOはサービス提供者がユーザーに対して実際にサービスを提供することができる根拠・目標値を提供するための物になります。

ユーザーは自身が必要としているサーバーやストレージの容量や稼働率をSLOで確認し、満足な内容であれば、SLAのステップに進みます。SLAを確認し、対象サービスの稼働率や稼働しなかった場合の返金方法など契約の保障を確認し契約に進むという流れです。

 

SLA

 

SLAとは?

 

 

SLAServiceLevelAgreementの略で、どの程度の(Level)サービス提供(Service)を合意(Agreement)するかという保障契約の名称です。

サービス提供者とユーザーとの間で結ばれる契約ですが、サービス提供者がどの程の品質のサービスを保証するのか、またそれを達しなかった場合どのような方法で解決するのかなどをユーザーとの間で取り決めを行うために使用されます。

 

SLAの要件基準

 

 

SLAの要件設定基準は稼働率やサービスの定義・レベル、またそれに対する返金規約など4つの項目で記載されていることが一般的です。ここではそれぞれの要件について簡単に説明します。

 

・月間稼働率

月間稼働率は一月の間にどの程度稼働し続けているかを表しており、システムが停止している時間を差し引いた稼働時間で表示されます。

 

たとえばSLA99.99%や99.999%のような形で記載されており、その数字が高ければ高いほどシステムの安全性が高く、故障が少ないことが分かります。

 

・サービスの定義

サービスの定義はそもそもこの契約によってどのようなサービスを提供するのかという大前提を表しています。

例えば一つのパソコンで使用できるサービスの契約を行いたいとユーザーが思っているのに、契約書には4台分で使用可能なライセンスが含まれているとユーザーとサービス提供者の間で意思の合致がされておらず、契約が成立しません。

 

・サービスのレベル

サービスレベルは数値や可視化できるサービスの内容を表しています。これはSLOにも似ていますが、サービス提供者がサーバーやストレージ、通信速度などどの程度高いサービスを提供するのかを数値で示します。

 

・返金規約

返金規約は他の3項目で設定した基準値や定義を違反又は下回った場合にどのような形で返金・解約対応を行うのかといったことを定めている項目です。

 

SLO

 

SLOとは?

 

 

SLOServiceLevelObjectiveの略でどの程度の(Level)サービス提供(Service)を目標値として設定するか(Objective)というサービスの目標値の名称です。

SLAで設定された契約内容を履行するためにサービス提供者側がサーバーやストレージといった領域の可用性・性能・セキュリティなどの目標値を数値化しユーザーに提供することで、ユーザーはどの程度の実用性があるのか理解しやすくなります。

 

SLOの設定基準

 

 

SLOで設定されている目標は企業や業態によって様々ですが、可用性・セキュリティ・作業手順・サポート体制などの項目で設定されていることが多いようです。

 

・可用性

可用性は月間でどの程度稼働することが出来るのか、またメンテナンス等でシステムが停止する頻度や、その告知方法などが記載されています。

 

・セキュリティ

セキュリティはサービス提供がどのような形でシステムのセキュリティ制度を高めているか、またどのようなセキュリティ基準に準拠しているかを記載しています。

 

・作業手順

作業手順はサービスを利用する際にどのような手順で使用することができるのかという説明書の役割を果たしており、初めてサービスを利用する人でも理解できるような形で記載されています。

 

・サポート体制

サポート体制はユーザーからの質問やトラブルがあった際にどのような方法でサポートを行うか、またそのサポート時間などについて記載しています。

 

契約前にSLAとSLOの確認は必須

 

 

SLOSLAの確認は契約前に必ず確認する癖をつけておきましょう。サービスの内容や、その根拠はもちろんですが特に気をつけておきたい項目は返金の規約です。

サービスの基準値を下回った場合にどのような方法で返金・対応を行うかは各事業者によって内容が様々です。

例えば価格が安くサービス内容が高い事業者だと思い契約を結んだが、SLOの目標値に到底及ばず、月に何度もシステムが停止し返金を申し出た際にSLAには返金は一切しないと書かれていた場合諦めるしか方法が無くなります。

 

もちろんユーザーが望むサービスのレベルでサービス提供業者を選ぶ必要がありますが、基準値に満たなかった場合の返金方法などはトラブルを防ぐためには必ず確認しておいた方が良いでしょう。

 

クラウドサービスのSLA比較

 

AWSAzureで比較

 

 

代表的なクラウドサービスであるAmazonAWSMicrosoftAzure2つのサービスを比較しながらSLAの違いや特徴について紹介します。

尚AWSは12のサービスでSLAが設定されており、Azureでは111のサービスでSLAが設定されています (*尚この調査は2019/04/02時点での結果のため今後内容が変わる可能性が有ります)

 

返金対応に違い

 

 

AWSの稼働率は、99%~99.99%の稼働率を保証しているものが多いです。一方Azureも99%~99.99%の稼働率保障を行っており、稼働率に差はありません。

稼働率の保証値を下回った場合、AWSの場合はサービスクレジットという形で対応を行ってくれますが、返金はしてくれないようです。

AWSのサービスクレジットとは、将来的に支払う金額に対しての減額サービスで、Amazonが提供するサービスに充当できるクレジットを発行しますという形です。Azureの場合は実際に返金対応してくれます。

 

AWAの場合は稼働率が99.99%を下回った場合に 10%、99%を下回った場合に30%のサービスクレジット付与で、Azureの場合は10%~25 %の幅で返金対応とどちらも大きな問題が発生しても100%の対応は無いようです。

 

【まとめ】Kotlinとは?!その開発環境からできることまで幅広くご紹介します!

2011年に新しく登場したKotlinといいプログラミング言語を知っていますか?Androidの開発環境においては多くのひとが利用しており、公式の開発言語として認められているほど人気の高いプログラミング言語です。本記事では、Kotlinについてその特徴や出来る事、また別の言語との違いから導入している会社など幅広く紹介していきます。

 

Kotlinとは?

 

JetBrainsが中心で開発したプログラミング言語

 

 

KotlinはプログラムをコンパイルしJVM(Java Virtual Machine)上で動作させる事ができる静的型付けオブジェクト指向言語です。

統合開発環境であるIntelliJ IDEAで有名なロシアのJetBrainsが主導して開発したプログラミング言語で、2017年からはAndroid開発への公式言語として正式に採用されています。

KotlinJavaと相互運用できるような設定で作られており、Kotlinを使用してJavaコードを呼び出す事が出来、その逆もまた然りです。更にJavaよりも簡潔で安全に記述する事が可能です。

 

Kotlinが利用される背景

 

 

Kotlinが利用されるようになった背景としてはJavaJVMと言うキーワードが重要になってきます。

Javaは長い歴史を持ち、様々なアプリケーションで運用されています。未だに進化を続けているJavaですが、Java単体でコードを記述しようとすると冗長な文が必要となり、安全性への問題も指摘されています。

そういった問題を解決するために簡潔かつ安全なJavaコードのプログラミングを行えるJVMとその開発言語が誕生しました。JVMは対応言語で記述した簡潔なコードを様々なOSでJavaのソースコードにコンパイルしてくれる翻訳者の様な役割で、JVM上で動作させることができるプログラミングとして複数の言語が開発されました。

 

上記の様な理由で誕生したプログラミング言語の一つがKotlinです。

 

Kotlinで開発出来る事

 

アプリケーション開発ができる

 

 

Kotlinで出来ることはシンプルにアプリケーションの開発です。Web上のアプリケーションからスマートフォンなどのアプリケーション開発を行うためのバックエンド言語として使用する事が可能で、特にAndroidのアプリケーションを開発する現場においては多くの現場でKotlinが使用されています。

 

Kotlinの特徴

 

静的型付けオブジェクト指向

 

 

オブジェクト指向には、静的型付けと動的型付けの2種類があり、Kotlinは静的型付けオブジェクト指向の言語になります。

静的型付けは、コードをコンパイルする際にチェックする言語で、JavaやC、C#といった言語がこれにあたります。特徴としてプログラムの実行速度が早いというメリットが有りますが、毎回コンパイル作業を行う必要が有ります。

一方動的型付けはプログラムを実行する都度チェックする言語で、JavaScriptやPython、Rubyといった言語がこれにあたります。特徴としてコンパイル作業を毎回しなくても自動で行なってくれるメリットが有りますが、静的型つけ言語と比較してプログラムの実行処理速度が比較的遅いという面が有ります。

 

Javaの簡単記述と相互運用

 

 

Kotlinは型推論やラムダ式、拡張関数などサポートしており、シンプルかつ簡潔なコードを記述する事が可能です。

また、KotlinはJava と相互運用することを目的に開発されているのでKotlinからJavaをJava からKotlinをJVM上で呼び出す事が出来ます。

 

Null参照の安全性が高い

 

 

Kotlinは不必要なNull参照を排除できるように設計されているため安全性が高いです。

Nullとは何もないことを表しており、何もない実行が起こった際にコンパイルが通らないようにし、不正なアクセスを防ぐことをNull参照と言います。

Kotlinでは、Nullを持つ変数と持たない変数を区別して判別します。これにより、安全性の高いコードを記述する事が可能になります。

 

Android開発が容易

 

 

KotlinはJetBrains社が提供しているAndroidStudioを使用してアプリケーションの開発を行う事が出来ます

アプリケーションを開発する上で統合開発環境は非常に重要なのですが、AndroidStudioを提供しているのもKotlinを開発したのも同じJetBrainsです。

現在Androidのアプリケーション開発の現場において多くの人がAndroidStudioを使用しています。そういった環境からKotlinを利用したアプリケーションの開発は非常に行いやすいという利点があります。

 

Googleが公式言語として採用

 

 

Google2017年にKotlinAndroidの正式言語にすると発表し、サポートを行うことを宣言しました。

これはKotlinがNull安全性や既存のAndroid用のライブラリーと相互運用できると言う点から安全性や効率性の面でJavaよりも高いと評価した結果のようです。

この様なサポートもあり、KotlinはiOSのSwift言語のような立ち位置になるのでは?と言われています。

 

現場iOSの開発を行うのであればSwift言語で開発することがほとんどです。現在多くの人がAndroid開発を行う際にKotlinを使用しているひとが増えてきているため、Androidを開発したいならKotlinと呼ばれる未来も近いのではないでしょうか。

 

【ハイブリッドクラウドとは】オンプレミス環境とクラウド環境の違いから徹底解説!

ITインフラを全て構築していた時代から、クラウドサービスを業務に導入するようになり、会社によって社内ITインフラとクラウドサービスを同時併用するハイブリットクラウドを利用する企業が増えてきました。本記事では、そんなハイブリットクラウドの特徴をオンプレミスとクラウド環境の違いを説明しながら紹介します。

 

ハイブリットクラウド

 

ハイブリットクラウドとは?

 

 

ハイブリットクラウドは、オンプレミスな環境やパブリックなクラウド、プライベートクラウドなど最適な環境を組み合わせて(ハイブリット)構築した環境のことを指します。

近年データ処理に必要な運用コストや理想的なIT基盤を構築するためにデータをインターネットに接続する環境でどこでも使用出来る様にするクラウドという技術に注目が集まっています。

しかし、企業の重要な情報・システムを全てクラウド化してしまうとセキュリティー面や資金面で不安が残ります。そう行った場合に、企業の根幹に関わるような情報は社内のサーバーで従来通り扱い、社内サポートのためのアプリケーションやデータについてはクラウドサービスを利用するといったように必要な部分のみを選択してクラウド化したい場合にハイブリットクラウド環境が選ばれています。

 

オンプレミス環境とクラウド環境をハイブリットクラウドと比較するために、それぞれの特徴や欠点を先に紹介します。

 

オンプレミス環境

 

オンプレミス環境とは?

 

 

オンプレミス環境とは自社でサーバーやストレージ、ソフトウェアなどの情報システムを構築し運用している環境の事です。

会社独自のシステム体制を自由に作成でき、強固なセキュリティー体制を構築できるメリットは有りますが、システムのアップグレードやメンテナンスなど拡張や運用保守に対する時間や金銭的な運用コストが非常に高いというデメリットが有ります。

 

オンプレミス環境の特徴

 

 

オンプレミス環境は高いセキュリティー環境の中で自由にシステムをカスタマイズし、既存の社内システムと連携を取ることが出来るという特徴が有ります

自社で運用している情報システムのため、欲しい機能や性能を自前で構築することができ非常に拡張性が高いです。また、パブリックなインターネットに繋がっていない環境でシステムの保守・運用を行うことができるためハッキングやサイバーテロのリスクを軽減させることが出来ます。

更に自社で環境構築・拡張を行うため、既に採用している社内システムとの連携を前提にシステムの作成ができます。

 

オンプレミス環境の欠点

 

 

オンプレミス環境の欠点は金銭や時間的な運用コストが非常に高い点です。

オンプレミス環境を整えるためには、自前でサーバーやストレージ、ソフトウェア、ネットワーク機器などを購入する必要がありそれらの初期投資にお金が掛かります

また運用するための電気代、運用保守を行ってくれる人の給料を支払う必要が有りますし、システムの購入から構築まで数ヶ月の期間を要する場合が有ります。

更に、システム障害などが発生したい場合は専門家や従業員が現地へ出向いて作業を行う必要があり、大企業などでシステム障害が起こってしまうと早朝でも深夜でも対応しなければならないという大変な事態が発生します。

 

クラウド環境

 

クラウド環境とは?

 

 

クラウド環境とはインターネットに接続されたサーバーの事を指しており、この環境を利用して提供するサービスのことをクラウドサービスと言います。

利用者はインターネットに接続できる環境さえあればどこからでもサービスを利用することが可能で、どこのサーバーと繋がっているのか意識する必要が有りません

スマートフォンやPCを個人利用している人は、知らないうちに使用しているということも多く、googleが提供しているGmailやgoogle Driveなどもクラウドサービスになります。

 

クラウド環境の特徴

 

 

クラウド環境は低コストで、利用したいサービスをすぐに使用することができるという特徴があります。

例えば社内でファイル共有や進捗管理などの営業ツールを利用したい場合、それを提供しているクラウドサービスを利用すれば、登録するだけですぐに使用することができるようになります。

これらのシステム運用は全てサービスの提供元が行ってくれるため、利用者はアップグレードや、システムの保守といった点に気を使う必要がなくなります。

 

クラウド環境の欠点

 

 

クラウドサービスの欠点はオンプレミス環境と比較してやセキュリティーやシステムの連携面で劣る点が挙げられます。

クラウドサービスは、プライベートネットワークを使用した接続を行なっているため基本的にセキュリティーは高いのですが、完全に閉鎖された環境ではないためハッキングや、そもそもサービス提供者が内容を閲覧できる環境下でないことの保証など不安が残る可能性が有ります。

またサービスによっては、競合対策として既に取り入れているシステムとの連携がとれなかったりする可能性があります。例えば既存の内部システムとしてメールはA社のアプリケーションを利用しているが、画像やファイルの保管用にB社のクラウドサービスを導入すると連携できず、B社のメールアプリケーションを利用しなければならないという感じです。

 

実際には上で挙げたようなことが発生することは考えにくいですが、あくまで可能性の話として捉えて頂けると幸いです。

 

【eスポーツ】気になる将来性から市場規模まで徹底解説!これから本当に流行るのか?

皆さんはeスポーツという言葉を聞いた事がありますか?年々需要や市場規模が上昇しており、特に若い世代の人はeスポーツの知見が詳しかったり、既にそれを目的にゲームを行なったりしている人もいるのではないでしょうか。
本記事では、そんなeスポーツについて将来性や市場規模、人気のオンラインゲームなどをまとめて解説します。

 

eスポーツとは?

 

デジタルゲームを使用した競技

 

 

eスポーツは、デジタルコンテンツを使用した競技です。バスケットボールやサッカーと同じ様にオンライン上で対戦相手と勝負を行い、世界1や地域1を決める大会、賞金、プロチームなどが存在することから、インターネットスポーツとして認知される様になりました。

 

オンラインでゲームを行える環境から普及

 

 

昔からシンプルなルールや低グラディックゲームであればオンライン上での対戦も容易に行なう事ができました。しかしゲームの性能を高めると、そもそもプレイするためのPCやゲームハードのスペックに問題が発生したり、日本と国外のプレイヤーとの対戦の際に遅延が発生したりなどフェアなゲーム作成というのが難しい環境でした。

その後通信環境やコンピューターの基本スペックが改善、スマホの普及などが行われることによって高クオリティーかつオンライン上で別のプレイヤーと対戦する事が容易になりました。

そういった環境の改善から多くのプレイヤーの人口が増加し、eスポーツと呼ばれるほどのゲームが誕生してきました。

 

eポーツの市場規模

 

2000億円を超える市場規模

 

eスポーツの市場規模は2018年で16.2億ドル(2000億円)2023年には23億ドル(2500億を超えてくると予想されています。

eスポーツのプレイヤー人口は年々増加しており、2016年から2018年にかけて世界人口が3億人から4億人近くまで上昇しています。このままの人口成長率を維持すると、2021年には6億人近くまで人口が上昇する見込みが立っています。

 

それと同時に賞金総額も増加傾向にあり、Dota2というMOVA(Multiplayer Online Battle Arena)系ゲームでは今までに16900万ドル(180億円)の賞金を提供しています。

市場規模2000億円という大きさは、国内の電子書籍の市場と近いものがあり、市場としても無視できないほどの規模になってきています。

 

日本でも優勝賞金1億円のイベントが開催

 

 

日本でもeスポーツの大会は開催されていますが、サイバーエージェントの子会社CyberZが開催したRAGEというイベントは国内最大級の1万人を動員したイベントとなり話題を呼びました。

その中で行われたShadowverseというオンラインカードゲームの世界大会で、優勝賞金1億円という金額を提供し日本でもeスポーツ人気が白熱していることをアピールするきっかけになりました。

 

日本でのオンラインゲームの普及は遅い

 

オンラインゲーム市場への参入が遅い

 

 

日本では、任天堂やSONYの優れたゲームメーカーによるコンシューマー向けのゲームハードの普及が長い間続きました。そのため、ゲーム=テレビ画面や専用のゲーム機で行うものという考えが定着しており、PCなどのオンライン上でゲームを行うという考えが少なかったようです。

その間PC上やスマホでのオンライゲームの開発は海外で活発に行われており、オンラインゲーム市場への先導権は奪われてしまい、日本は出遅れてしまったと考える人もいるようです。

 

賞金の法規制

 

 

海外では、高額な賞金を提供する大会が数多くあるが、日本では中々高額な賞金を提供することが法律上難しいという現状があります。これは、高額な賞金を出eスポーツが日本の刑法上の賭博罪にあたるのでははという懸念からです。

例えば1億円の賞金を出すゲームの大会を日本で開催するとして、その大会に出場するための参加料を1000円に設定し、参加者100,000人がこの大会に参加すると参加費で賞金を賄うことができます。

このような参加料を徴収して賞金を出すタイプの大会は刑法上の賭博に該当するとして日本では開催することが出来ません。

 

そのため、日本でのeスポーツの大会において現状賞金は企業やスポンサーが全て賄う必要が有り、参加者から費用を取ることが認められていません。こう行った条件下では海外のように高額の賞金を提出するのが難しくなり、eスポーツの大会の盛り上がりもやや出遅れているという形になっています。

 

【徹底比較!】CTO vs VPoE!両者の違いからそれぞれに求められる役割まで分かりやすく解説します!

会社の組織体系のトップに位置するのはCEOですが、技術部門のトップに位置する人のことをCTOと呼びます。更にこの技術部門の中を見て見ると、CTOを中心として、VPoEやVPoPなど様々な役職が有ります。本記事では、そんな開発の現場で良く混同されるCTOとVPoEの2つの役職をピックアップし、両者の違いから、それぞれに求められる能力などをご紹介します。

 

CTO

 

CTOとは?

 

 

CTOはChief Executive Officerの略で、日本語では最高技術責任者と訳します。その名の通り技術部門のトップとして会社の経営に参加し、 経営視点で技術部門を指揮する立場になります。

技術部門の方向性や開発方針の舵取りをする責任者という重大な役割を持っていますが、会社法によって設置を義務付けられたものではありません。そのためあくまで会社によって決められた役職ということになります。

情報技術の発展によりどこの会社でも技術部門を設立するようになり、CTOという名前が付けられることが一般的になりました。

 

VPoE

 

VPoEとは?

 

VPoEはVice President of Engineerの略で、日本語では技術部門のマネジメント責任者と訳されます。

VPoEはエンジニア組織が円滑に仕事をできる環境や、開発を行えるべく技術力を向上させるために採用や指導、環境改善などを行うことによってチームのマネジメントを行う役割を担っています。

主に欧米などでは以前からVPoEの役職は一般的でしたが、日本でもメルカリやSpeee、Gunosy など多くの会社でVPoEのポジションが設置されており、確実に浸透しつつあります。

CTOは聞いたことがあっても、 VPoEは初めて聞いたという方もいらっしゃるのではないでしょうか。

 

CTOとVPoEの違い

 

 

CTOは開発や技術方針の舵取り、VPoEは組織のマネジメントという説明をしましたが、その言葉通り両者にはエンジニア部門での責任者という共通点と課題解決と組織マネジメントという相違点があります

CTOもVPoEもエンジニア組織の責任者として、それぞれの役割を全うする責任を持ちますが、CTOは経営の視点に立ち、会社が今後仕事を継続・発展していくための技術的方向性や開発方針を導く必要があります。一方でVPoEはCTOが打ち出した方針に対してエンジニア組織の能力をアップさせるために新たな人材を入れたり、能力向上のために環境を改善したりなどのマネジメントを行う必要があります

 

CTOに求められる役割

 

経営面から見た技術的な意思決定

 

 

営利企業でも、日営利企業でも会社の利益を今以上に向上させるにはどのような施策が必要か?という課題に対して常に模索する必要があり、技術部門はそのための開発を続ける必要がります。

エンジニアが闇雲に新サービスを開発したり、システムを導入したりしても会社にとってそれがプラスになるかと言われると分かりませんし、技術は高くても会社がターゲットにしている顧客ニーズにはマッチしていない可能性があります。

そういった問題を回避するためにCTOは、会社としての方針や顧客ターゲットからニーズを汲み取り、エンジニア部門に対して目指すべき開発の道筋を示す必要があるのです。

 

VPoEに求められる役割

 

エンジニアチームのパフォーマンス向上

 

 

VPoEは会社としてエンジニア組織の能力を向上させるためにマネジメントを行う役割を持ちます。より端的に言うと使えるエンジニアチームの育成を行うことが命題となります。

基本的に会社の方針はCEOやCTO含め、会社の上層部が行う役員会議で決定づけられます。その中でCTOが指針した方針に対してVPoEは実現可能なレベルにエンジニアのチームビルディングを行います

そのための仕事は多岐に渡り、新たな人材を迎い入れるための採用や育成、働きやすい環境づくりなどチームを強化させるという目的の元あらゆる手段を利用します。

 

多部署との連携

 

 

VPoEは会社の営業や人事、法務などのトップとの連携を上手く図ることも大切な役割です。

お互いの現状や、希望を理解し合いそれを上手くチームに伝えることで循環する環境作りが出来ます。

それぞれのチームが日々仕事に追われてくると目の前の仕事に手一杯で他のことに手が回らなくなる状況が来ます。

そういった際に上手く指示を送れる立場として多部署と円滑な話し合いが出来るコミュニケーション能力が求められます

 

Scalaってどんな言語?ScalaでできることからJavaとの関係性まで、分かりやすく解説します。

皆さんScalaというプログラム言語をご存知でしょうか。サービスを開発するために多くの言語が使用されていますが、最近Scalaという言語の人気が出ており注目を浴びています。本記事ではScalaという言語の特徴やJavaとの関係性、開発しているサービスなど幅広く解説します。出来るだけ分かりやすく解説しますので是非チェックしてみてください。

 

Scala

 

Scalaとは?

 

 

Scalaはオブジェクト指向と関数型プログラミングを融合させた言語で、Javaの開発を行なっていたマーティン・オーダスキー氏によって設計されました。そのためかScalaにはJavaで出来る事が全て出来ると言う特徴が有り、幅広い開発領域で使用する事ができる言語としてじわじわと人気が出てきています。

オブジェクト指向と関数型プログラミングという少々難しい単語も出てきましたが、 Scalaの優位性を知る上でこの2つは理解する必要があるのでそれぞれを次の項目で説明します。

 

オブジェクト指向とは?

 

 

オブジェクト指向について詳しく書くと、それだけで本が一冊書けてしまいますのでここでは出来るだけ分かりやすく簡潔に説明します。

例えば車を操作する際に利用者はなぜ車が動くのかということを理解しなくてもエンジンをかけてサイドブレーキを下ろし、アクセルを踏めば車が走るということを理解しています。

車がどのように動くかは製作者が知っておけば良いですよね。更にいえば、タイヤはどのように動くのか、エンジンはどのように動くのかはパーツを製作する人が理解しておけば良く、車の開発はそれぞれの担当が同時に製作し、後でパーツを合体させることで車を作る事ができます。

つまり車という規格を考え、それに準じたパーツを作成することで車の開発者が車の製作工程を全て把握する必要がなく、部分部分を皆で共同制作ができるような理念の元開発されたものをオブジェクト指向と呼びます。

更に簡単にいうと、大型開発の際にミスを減らし、手間を減らし、共同作業の利便性を上げるための指向方です。

 

 

関数型プログラミングとは?

 

 

関数型プログラミングは、問題を関数の組み合わせで記述するプログラミング方法です。

関数は数学で言うと例えば y=2xなどが関数です。xが2ならばyは4になりますし、xが4ならyは8になります。

関数型プログラミングとは、この関数の方式をプログラミングに落とし込み、xの部分を何で入れるかによってyの表示結果を決定しようと言う方式です。

関数型を使用しない場合は命令型のプログラミング手法を使用しますが、命令型の場合、状態を変化させながら繰り返し処理を行う方式を取るのですが、関数型の場合は、状態を扱うことなく再起処理を行います。

上記の説明では分かりにくいと言う方は、自販機を想像してみてください。お金を入れるとその金額の商品が出てきますよね。このお金がxで自販機が=、商品がyです。

 

ScalaとJavaの関係

 

 

ScalaはJVM(Java Virtual Machine )と呼ばれるJava仮想マシン上で動作する事ができます。これについては次の特徴で説明しますが、これによってScalaはJavaのライブラリーをほぼ全てスムーズに使用する事ができます。

ライブラリーとは開発においてよく利用される関数や機能などをまとめて記述したファイルです。

上記の点からJavaで行う膨大な処理を簡単に記述できるようにしたものがScalaであると思って良いでしょう。

 

Scalaの特徴

 

JVM上で動く

 

 

先ほどJavaとの関係性でも話しましたが、ScalaはJVM上で動作させる事ができます。

JVMとは、Javaで記述したソースコードをパソコンで読みとってもらうための通訳機能です。Javaで記述されたソースコードはJVMで処理され、JVMがMac、Windows、Linuxなど様々なOSとやり取りしてくれます。

そのため、JVMを使用すればコンピューターの規格を考慮せず、JVMで動作する環境さえ整えれば良いと言う優れものです。

ScalaはこのJVM上で動かす事ができるため、OSを気にしたプログラミング処理を行う必要がありません。また、誕生から20年以上蓄積されてきたJavaの膨大なライブラリーを好きに使用出来るわけですから、他の言語と比較しても大きな有用性が有ります。

 

オブジェクト指向でも関数型プログラミングでも好きな方を選択出来る

 

 

章の最初でオブジェクト指向と関数型プログラミングについて触れましたが、Scalaでは、どちらかを使ってプログラミングしてくださいと言ったルールが存在しません。そのため開発者はオブジェクト指向の記述が適しているところはオブジェクト指向で、関数型プログラミングが適しているところは関数型プログラミングで好きに記述する事が出来ます

 

他のエンジニアと比較して年収の中央値が高い

 

 

2017年にビズリーチが行なった国内のプログラミング言語別の平均年収ランキングによると、Scalaは626万円と一番高水準に位置している事が分かりました。

これは、世界的にもScalaを使用した開発を推奨している企業が増えているのに対して、コードを書けるエンジニアが少ない事が原因のようです。

高収入を狙いたいエンジニアの方はScalaを勉強してみると言うのも一つの手だと思います。

 

フルスタックエンジニアとは!?必要なスキルからこれからの需要まで徹底解説!

Webアプリケーションを開発するためにはフロントエンジニアやバックエンドエンジニア、インフラエンジニアなど様々な専門分野がありますが、全ての開発を行えるフルスタックエンジニアという超人的な存在がいます。本記事ではそんなフルスタックエンジニアについて必要なスキルや需要について徹底解説します。

 

フルスタックエンジニア

 

フルスタックエンジニアとは

 

 

フルスタックエンジニアとは全ての開発業務を一人で行うことができるエンジニアのことを言い、別名マルチエンジニアとも呼ばれます。

通常のエンジニアは、フロント部分とバックエンド部分に分かれてそれぞれの業務を行うことが一般的ですが、ベンチャー企業や人手が少ないところは一人のエンジニアが全ての業務を担当する事を想定して採用することがあるようです。

実際は業務や会社毎にフルスタックエンジニア の定義は異なるため明確にフルスタックエンジニア とは=◯◯といった表現が出来ないのですが、ここではWebアプリケーションを開発する上で全ての業務を担当できる人という定義で解説していきます。

 

フルスタックエンジニアの仕事内容

 

全ての仕事を担当

 

 

フルスタックエンジニアは要件定義、インフラ・ミドルウェアの設計・導入、開発、テスト、運用、保守まで全ての仕事を任される可能性が有り、それら全ての知識について精通していなければなりません

一人で全てを開発しないにしても、打ち合わせから納期まで俯瞰してどの様に作業すれば良いか分かるだけの知識は最低限必要になってきます。

 

フルスタックエンジニアに必要なスキル

 

フロント、バックエンド両方の言語知識

 

 

フルスタックエンジニアになるためにはフロントサイドとバックエンド両方のプログラミング能力を持ち合わせる必要があります

そのため、HTML/CSS/JavaScript/jQueryといったフロントエンドサイドの言語やRuby/Python/PHP/Javaなどバックエンドの言葉も理解しておきましょう。

もちろん働く現場や自身の開発環境によって言語は絞られる可能性はありますが、使える言語は多ければ多い方が良いでしょう。

合わせて言語別のフレームワークやライブラリーといった知識も必ず必要になります。

 

OS、ミドルウェアの知識

 

 

次に必要になってくる知識として、OSやミドルウェアの知識が挙げられます

OSはシステムの基盤となるWindowsやMac OSなどです。ミドルウェアはOSとアプリケーションを繋ぐ補完アプリケーションの様なもので、Apacheと呼ばれるWebサーバーソフトウェアや、データベースを管理するMySQLなどが代表的なミドルウェアです。

これらはバックエンドで必ず触る必要が有り、フルスタックエンジニアを目指すのであれば知っておくべき必須の知識です。

 

プロジェクトマネジメントのスキル

 

 

フルスタックエンジニアは時に全体を俯瞰してプロジェクトを指揮する様な立場になることが有ります。そういった際にどのように納期までの開発スケジュールの調整を行い、各担当との連携を行うためにどういったコミュニケーションを行うかといったマネジメント能力が要求されます

 

フルスタックエンジニアの年収

 

 

フルスタックエンジニアの年収はIndeedの求人情報を参照すると、450万〜1000万の幅で募集されることが多い様です。

全ての業務を一通り出来るスキルが求められるため優秀な人材が少なく、年収の中央値も自ずと高くなるようです。

希少価値が高いため、自身でフルスタックエンジニアだと自覚できるほどの能力が付いたら高収入を狙える立場になれるでしょう。

 

【徹底比較!】フロントエンド vs バックエンド!両者の違いから必要なスキル、将来性まで分かりやすくご紹介します!

フロントエンドやバックエンドといった言葉は主にWebサイトの製作現場でよく使用されます。言葉を直訳すると分かるようにWebサイトの製作には大別すると前と後ろで大きく2つに分けることができます。本記事では、フロントエンドとバックエンドの違いから、必要なスキル、将来性などをまとめてご紹介します。

 

フロントエンドとバックエンドの違い

 

まずは両者の違いを説明

 

 

本記事を紹介する前に、フロントエンドとバックエンドの違いを最初に簡単に説明します。

フロントエンドはユーザーが見ているWebサイトの見た目の部分を製作するエンジニアで、バックエンドはそれをサポートする裏側の部分を担当するエンジニアのことを指します。

ユーザーがマウスやトラックパッドを利用してWebサイトを閲覧、動的なクリックができる設計を行うのがフロントエンドエンジニア仕事で、ログイン情報の入力や会員登録などを行える環境やそれらの情報を元にデータの保存や処理、呼び出しといった裏側の処理を行うのがバックエンドエンジニアの仕事です。

 

フロントエンド

 

フロントエンドとは?

 

 

前項でフロントエンドとは一般的にWebサイトの視覚的な部分を担当するエンジニアのことを指すと説明しました。

これは具体的にいうとクライアントが作成したいWebサイトのデザインを元に、HTMLやCSS、JavaScriptといった言語を使用してユーザーが視覚的にWebサイトを閲覧出来るよう状態にします。

また、スマートフォン、PC、タブレットなど様々なサイズの電子機器があるためそれぞれに合わせたサイズ設定(UI)や使いやすいデザイン性(UX)を求められることが多いです。

 

バックエンド

 

バックエンドとは?

 

 

バックエンドとは、一般的にWebサイトの目につかない裏側の部分を担当するエンジニアのことを指しています。

案件に応じてサーバーサイドやデータベースの要件定義や設計・開発、運用保守などをおこないます。そのため、会員情報登録やクレジットカード決済など個人情報のデータ管理など、ユーザー毎に別の見た目を形成する必要がある場合に特にバックエンドエンジニアが必要になってきます。

 

両者に必要な能力

 

フロントエンドエンジニアになるために必要な能力

 

 

フロントエンドエンジニアになるには、ウェブページを形作るHTML・見た目を良くするCSS・動的な要素を加えるJavaScriptの3つの言語知識が必要不可欠です。

基本的にはこれらの開発言語を知っていないと視覚的かつ現代的なWebサイトは製作することができないためこれらの知識は最低限必須になっています。

更に多くの場合で、これらの言語を使用した枠組み(フレームワーク)を合わせて利用しています。これは、よく使われる機能や見た目を枠組み化して簡単に実装できるようにしもので、CSSの見た目を良くするBootstrapがよく利用されています。

また、必須ではありませんがデザインに対する知識もある程度持ち合わせておいた方が良いでしょう。クライアントによってはデザイン案の一部をフロントエンドエンジニアに投げることもあります、そのような場合に自身である程度デザインできればより歓迎されるフロントエンジニアになるのではと思います。

 

バックエンドエンジニアになるために必要な能力

 

 

バックエンドエンジニアになるための必須能力として、バックエンドの開発言語とミドルウェアの知識が必要になります

Java・C++といったコンパイラ言語、もしくはPHP、Ruby、Pythonといったインタプリタ言語を習得しておく必要が有ります。後者の方がプログラムの実行速度が速いため多くの企業が後者を採用しています。

それと同時によく利用される処理部分を枠組み化したフレームワークが開発言語にもあり、Ruby on Rails やCakePHPといった言語別のフレームワークも合わせて習得しておいた方が良いでしょう。

またハードウェアとフロントエンドエンジニアが製作したアプリケーションを繋ぐためにはミドルウェアという補完ソフトウェアを組み込む必要があり、その知識も必要です。例えばWebサイトの情報を送受信させるApacheやデータベースを管理するためのMySQLは多くのWebサイトで使用されるため習得しておくと歓迎されます。

 

大規模なWebアプリケーション開発になると、共同で作業を分割して行うことも増えてきます。そういった場合はバージョン管理ツールのGitHubを利用することが多いため、これも学んでおいた方が良いです。

 

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

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

 

仮想化

 

仮想化とは

 

 

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

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

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

 

仮想化の特徴

 

 

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

 

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

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

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

 

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

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

 

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

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

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

 

仮想化の種類

 

 

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

 

・サーバーの仮想化

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

 

・ストレージの仮想化

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

 

・ネットワークの仮想化

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

 

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

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

 

クラウド

 

クラウドとは

 

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

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

 

 

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

 

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

 

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

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

 

・メンテナンスが不要

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

 

・どこでも利用できる

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