プログラミングもそうですが、IT技術というのは、ある程度習得しちゃえば
「あ、独学でいけるかな?」と思えるようになるかもしれません
とはいえ、やはりはじめはメンターから教育を受けた方が効率いいのは間違い無さそうてます
効率良く早く覚えるのは、やはり直接指導のもと質問しまくるということです
スクール通いが最も効果がでるのって、以下のような方が該当すると思います
・プログラミングに適性のない方
・飽きっぽい、または自信の無い人
思い当たる方は少し考えてみてはいかがでしょうか
さて、今回は独学及び仲間で集まって、プログラミンの勉強や成果物作るようなときのおすすめの方法です
自分のパソコンでもできますけど、開発環境をシェアしたり
気軽にどこからでもアクセスするのであればクラウドで利用するのが一番
自宅でしこしこ作ることももちろんできますけど、設定めんどくさいし
仲間やリモートでやっていく上には敷居が高いと思います
なので、効率よく大人数でプログラミングしていく方法を説明します
結論を言ってしまうと、クラウド上のサービスを利用することをおすすめします
以下の2つであれば、要件は満たせると思っています
クラウドとは
私はインフラエンジニアなので、馴染みがある言葉ですが
プログラミングを志す人や、特化されている方はもしかしたら、あまり聞いたことないかもしれません
インターネットってよく「雲」であらわすことができますが
雲 = クラウド ですね(雲だけでなく大群、集団などの意味も持ちます)
つまり、インターネットのことをクラウドって言いかえれることができますが
インターネットそのままのことをクラウドっていうよりかは
インターネット上のサービスを総称してクラウドっていう認識の方が強いです
クラウドにはいくつか種類があるので軽くでいいので覚えておきましょう
パブリッククラウドとプライベートクラウド
これもまた概念的な言葉で仕様や状況により定義があいまいな環境もありますが、言葉の意味的に以下となります
インターネットを通じてオープンにアクセスできるようになっているもの「プライベートクラウド」
インターネットを介してるとはいえ、クローズドな環境で運用されているもの
両者の違いを簡単に言うと、誰でもアクセスできるようなサービス、例えばWebサービスやクラウドのメールサービスなどは大抵パブリッククラウドに分類されます
アクセス先のサーバーを共用で利用しています(共用サーバー)
これらは認証情報などでユーザー毎のアクセスを制限しています
一方プライベートクラウドはインターネット上にあるとはいえ、限定的なアクセスになってきます
筐体(サーバー)を契約者でシェアするように使用するのがパブリッククラウドですが、プライベートクラウドは筐体自体にその契約者だけしかアクセスできないようになっています(専用サーバー)
ですが、純粋に他の契約者がアクセスできないからプライベートクラウドともいえません
例えばパブリッククラウドだけど、IPなどでアクセス制限したりする場合もあるからです
正直サービスレベルは、利用するユーザ視点ではわからないことが多いです
(共用サービスは負荷がかかると利用している全ユーザに影響はあります)
SaaS/PaaS/IaaS
クラウドの種類として、大きく分けて「SaaS」「PaaS」「IaaS」というものがあります
これは機能面や利用できるレイヤーによって分類されています
「SaaS」(Software as a Service)・・・
クラウド上にあるソフトウェアをWebブラウザなどから接続してリモートで利用できるサービスです
大抵のアプリケーションはサーバー上に展開、構築されていますが、そのことを意識せず使えます
「PaaS」(Platform as a Service)・・・
「ミドルウェア」「OS」「データベース」などの部分を提供するサービスです
従来のホスティングサービス(レンタルサービス)がこれに当てはまり、ロリポップ、エックスサーバーなどのレンタルサーバーがイメージに近いです
「IaaS」(Infrastructure as a Service)・・・
サーバーやネットワークなどのコンピュータのリソースまでも使えるサービスとなります
クラウド上のサーバーをまるっと使えるので、イメージは専用サーバーなどのサービスになってきます
プログラミングをクラウドサービスで行う利点
業務以外でプログラミングをするのであれば、自宅PCで作業する人も多いのではないでしょうか
プログラミングの勉強であればなおさらですね
ただ、有料でもクラウドのプログラミングできるサービス
もしくは、クラウド上に作業スペースを作ることをおすすめします
理由は以下となります
・パソコンやインターネット環境があれば、どこにいても接続可能
・特定のパソコンの仕様やスペック・スピードに依存しない
・クラウド上で公開することにより、多人数間で共有が可能
・多人数で行うときに開発環境をあわせられる
クラウドだと、コントロールパネルと呼ばれるものから、リソースを設定および高速で起動させることができます
当然ハードウェアを準備することなく、利用した分だけ料金を支払えばよいため、スタートアップの早さや効率的と言えるでしょう
そのため、アクセスが急増したり、高処理が必要になったときでもサーバーの台数を増やすスケールアウトやサーバーのスペックを増強するスケールアップなどが容易に行えます
そして、クラウド上ということは、ファイアウォールなどのセキュリティ機能は、標準で提供されています
つまり、インフラ方面に強くない方でも導入は迅速かつ安全にできることとなります
これは特別な準備なしに試行することができるということです
対障害性も万全です
クラウドは大抵サーバー自体を冗長化しているため、障害が起きても直ちにサービス停止することは少ないです
また、通常対障害性を担保する場合、同様にサーバーを用意することになるため、かかるコストは2倍以上になります。
さらに複数人で利用するとき、アクセス権だけ設定すれば、だれでも特別な設定が必要なくアクセスさせることができます
まとめると、余分な知識が必要なく、お金だけ払えば一定水準以上のサービスを受けられるということです
これはプログラマーにとって負担や手間が軽くなることを意味します
専用サーバー、共用サーバー、VPS
リモート上のサーバーにアクセスするとして、どのようなものを選定すればいいのか
これは様々な要件があると思います
今回は細かい要件に沿ったものというよりかは、結論として「専用サーバー」をおすすめします
専用サーバーとはクラウド上の1つのサーバーを専用的に使うことです
ただ、それだとサーバーを独占して使うので、コストがかかりすぎます
なので、一台のサーバーを仮想マシンに分割して専用サーバーとして貸し出す「仮想専用サーバー(VPS:Virtual Private Server)」を選定します
メニューによってですが、CPUやメモリの拡張および縮小を容易に行えることも魅力です
「共用サーバー」も似たようなものですが、こちらは一つのサーバー(OSを含む)を共用として使うので、他のユーザの影響は受けやすくなってきます
あと多人数でやるならリモートデスクトップライセンス(RDライセンス、旧ターミナルサーバーライセンス(TSライセンス))が別途必要になってくるケースもあります
リモートデスクトップライセンスと言うのは、Windowsでいうリモートデスクトップ(RDP)で同時ログインできる人数ですね
これはお金がかかるので、リモートデスクトップでログインしてメンテナンスする人をあらかじめ決めておくか、メンバーが別々の時間帯で作業するようにルール作りするか
または、開発環境を構築して、Webアクセスさせるようにするかといろいろあります(Webアクセスさせる場合は別途ライセンスは必要ありません)
ちなみにLinuxの場合だと、sshでログインすることになると思いますが、それ自体はライセンス費用はかかりません(とはいえ、契約次第なので事前に調べておきましょう)
専用サーバーと共用サーバーとVPSの違いがわからない方は下記の図を見てください
また、VPSはゲストOSを動かすためにはホストOSまたはハイパーバイザーで管理することになってきますが、ここでは深くふれません
サービスを利用する側として大きく気にしなくていいからです
サーバーの選定基準
サーバーのスペックとしての選定基準を説明します
自分が実現したいこと(つまり「要件」ですね)で変わってきます
プログラマーと言えど、PCやサーバー上で作業するので
自分が選定するサーバーの仕様、性能はもちろん、OS、CPU、メモリー、HDDやSSDは、最低限把握しておきたいところです
OS
コンピューターを運用するための基本システムのことOSと言います
CPUやメモリー、HDDなどのハードウェア(H/W)やソフトウェア(S/W)の仲介を行っています
専用サーバーやVPSなどで使用するOSは大半がWindows系かLinux系になります
開発環境の要件に合わせたOSを使用することがマストとなってきます
専用サーバーやVPSを利用することによって、簡単に使用OSを変えることができるのも利点の一つですね
メモリー
コンピューターで処理するデータを一時的に保管しておくための場所で、コンピューターの処理速度を高速にする役割となります
同時処理や処理時間を向上させたいのであれば、このメモリーが大容量になってきます
HDD(SDD)
HDD(Hard Disk Drive)はデータを保存するための機器です
コンピューターを使うということは、たくさんの大切なデータが保存されています
その出し入れを行うために必要となってきます
容量の大きさ=データ を多く収納できるですが、データ出し入れのスピードも重要になってきます
そこでSSD(Solid State Drive)の登場です
こちらはデータの読み書きがHDDより早く、OSやソフトの処理時間も変わってきます
帯域幅
帯域幅は通信スピードです
一度にどのぐらいの容量を転送できるかになってきます
大容量のファイルをサーバーにアップロードするときは帯域幅が狭いと遅く感じるかもしれませんね
サーバーの使い方によって、直接影響は少ない可能性がありますが、データ転送をするようなアプリケーションを開発する場合はこの値に注意しましょう
選定基準としてのイメージ
CPU、メモリ、HDD(SDD)はよく、作業机にたとえられます
CPUは作業している人の能力ですかね
机が広くなければ、一度にできる作業量が減りますし
引き出しだって、多く(広く)無かったら、しまう資料が減ってしまいます
また、実際に作業する人の処理能力が低かったら作業スピードが遅くなります
・・・イメージとしてこんな感じですかね
帯域幅を例えていうなら、別の作業机で作業している人(別のPCやサーバー)との情報伝達のスピードでしょうかね
帯域幅が狭かったら、相手との情報のやりとりが遅くなるということですね
各スペックの具体的な値が決まっていないのであれば、費用感との相談になってきます
下記は費用面を優先として考えた時のおすすめのVPSサービスとなっています
ただ、専用サーバーも取り扱っているので、高スペックな開発環境や検証環境作りたい人もどうぞ
低価格でVPSを提供しているので、手軽にアプリの動作環境するにはおすすめです
もちろん、Windowsもありますよ
さくらのVPS
上場企業なので、普通に安心安全ですね
どのメニューを利用するかにもよりますが、純粋に価格だけで決められない理由がそこにあります
さくらのVPS for Windows ServerというWindows Server版の専用サーバーもあります
どちらも無料お試し期間があるので、その期間内で試してみてはいかがでしょうか
※メニューによって異なりますので、事前に確認願います
まとめ
プログラミング開発環境を作るのであれば、クラウド化をおすすめしました
環境構築にかかる時間や今後の開発や学習を続けていくのならVPSサーバーを契約した方がトータルのコストパフォーマンスが良いからです
また、プログラミングの勉強を始めたばかりの方やプログラマー初心者の方も是非とも環境構築作りには力をいれてほしいですね
手軽にさわれなかったり、利便性に欠くようなものだったら、挫折する方も5割ほど増えるような気がします
一旦使用感を試していただき、判断してみてはいかがでしょうか