クラウド開発環境 - 概要編

#概要編

この記事では「クラウド開発環境とはなんぞや?」「どんなメリットがあんじゃろけ?」という人に向けて、
そもそもクラウド開発環境とは何か、そのメリット/デメリット(向き/不向き)等について説明します。

対象読者は

  • クラウド開発環境に興味がある/ローカル開発に不満を感じている
  • CLI 触れる
  • ある程度のコンピュータの知識(VPN とか SSH とか)について知ってる/調べる気力がある

くらいの人を想定しています。

#クラウド開発環境とは

「クラウド開発環境」とは読んで字の如く「開発環境をクラウド上に構築したもの」です。
...少し雑ですかね。

普通の開発環境である「ローカル開発環境」は以下のように全てを手元の PC 上で実行します。当たり前ですが。

ローカル開発環境の概要図

それに対して「クラウド開発環境」では、コマンド実行等やエディタといった開発で行う作業の一部/全部をクラウド上で実行します。

クラウド開発環境の概要図

手元の PC では、基本的にクラウド上のマシンにブラウザや SSH でアクセスするだけになります。

#どうしてそんなことするの?

なんで手元の PC でできることをわざわざクラウド上でやるのでしょうか?

#環境構築コストが低い

ローカルマシンで開発をしている時の一番の悩みは環境構築の面倒くささです。
「この言語の開発には A というソフトウェアが必要で、A を使うためには B をインストールして設定を書き換えて...」というように開発マシンには依存と設定が積み重なっていきます。

ではもしもこのマシンが突然動かなくなった時はどうしましょう?
もしくは新しい魅力的なモデルが出てきた場合は?

ローカルマシンに依存している場合は、今までの設定やインストールを一からやり直す必要があります。一ヶ月周期で PC をクリーンインストールしている人でもなければ何をしたかなんて覚えてないですよね。

バックアップサービスなんかを使う手もあるかもしれませんが、違う OS のマシンにしたりすることが難しくなるでしょう。

クラウド開発環境の場合は全てがクラウド上にあるため、いくらローカルマシンを替えようが壊そうが設定は変わりません。また、しっかりと管理していればプロジェクトメンバのために自分と同じ環境を用意することも簡単にできます。

環境構築系のメリットは詳しくいうと他にも色々あるんですが、「とにかく楽」これに尽きます。

#マシンの縛りがない

開発マシンを選ぶ際に気にすることといえばスペック、そして OS でしょう。

開発、特に web 開発をする場合のソフトウェアのサポートは Linux が最も優れています(Docker 等)。しかしそのためだけに OS を Linux にするのはちょっと...という人が多いかと思います。というかやめたほうがいいです、デバイス周りとか UI とか結構酷いですし。

またスペックについてもある程度のものを選ばないと、終わりの見えないコンパイルや開発系ツールによるメモリ消費で非常にストレスフルな環境になってしまいます。

しかし、クラウド開発環境ならスペックも自由に選べて途中で変えることもできる上、OS は基本的に Linux、必要なら Windows を選ぶことだってできます。エディタもクラウドで賄う場合はローカルマシンはブラウザさえ動けばいいため、Chromebook(Chrome OS)や Raspberry PI を使うこともできます。

#その他

たくさんメリットがありますが書くと長くなるので箇条書きで。

  • 複数の環境を作成できる
    • プロジェクト毎、言語毎、仕事用/プライベート用
  • ローカルマシンに負荷がかからない
    • コマンドや IDE なんかの負荷攻撃がなくなるのでマシンの温度も上がりにくくなります
  • マシンのスペックをあまり気にしなくていい
    • 高性能なお高いマシンを買う必要がなくなります
  • 楽しい
    • Geek なら楽しめます
  • かっこいい
    • ナウでヤングなことやってるぜ!感がでて自己満足に浸れます

#じゃあデメリットは?

もちろんデメリットもあります。

#コストがかかる

メリットで言ってることと矛盾しているようですが、クラウド環境を動かすためのコストがかかります。どんな方式をとってどの程度の時間開発環境を利用するのかにもよりますが、実用的なスペックだと月 300 円~4000 円くらいはかかるかと思います。

ローカルマシンをどのくらいの期間使う予定なのか、どの程度の値段だったのか等を基準にコスト比較をすることになるでしょう。

#ラグがある

いくら高性能なマシンで高速なネットワークを使っていたとしてもラグは発生します。基本的にはクラウド関係のソフトウェアはラグを感じさせないように作られていますが(キー入力はサーバの応答を待たない等)、一部そういった処置がされていないソフトウェア(移植等)を使うとイライラするかもしれません。

クラウド開発系の SaaS だと基本的にそのあたりは対策されているので、基本的に気になりません。

#インターネットが必要

デメリットとしてよく言われる(?)これですが、ぶっちゃけ今の時代デメリットじゃないですよね。web 開発しているならインターネットがないと実質的に開発できない(npm installもできないなんて...)ので、「オフラインでも開発できないと駄目だ!」って人以外は無視していいデメリットです。

ただ、ある程度の品質の回線は必要になります。

#具体的にはどうやるの?

ひと口にクラウド開発環境といっても色々な構成があります。ここでは大まかに 4 タイプに分けて紹介したいと思います。
詳細なやり方については別記事(未作成)にて説明する予定です。

SaaS を使う方式以外ではセキュリティと利便さのために VPN を利用します。

#フルクラウド型 (Type A)

フルクラウド型(Type A)の説明図

開発環境からエディタ(IDE)まで全てをクラウド上で動かす方式です。

エディタはブラウザから利用できるものを利用する必要があります。代表的なもの(というか現存する実用可能なレベルのもの)は以下の通りです。普通に利用することを考えれば code-server 一択かな、という感じがします。

  • code-server
    • Coder というサービスで使われているもの。サービス自体はエンタープライズ限定になってしまった。
    • VSCode がほぼそのまま動く。
    • 証明書まわりの導入が少しめんどくさい。
    • キー入力を待ってしまうため、回線が悪いと入力周りが非常にストレスフル。
  • theia
    • VSCode のエディタ部分(Monaco)を利用して作られているオンライン IDE。
    • アプリケーションの一部として使われるライブラリ的なものだが、サンプル用の Docker イメージでも十分開発はできる。
    • 動作は軽いがサンプルだと拡張機能は入れられない。
    • 拡張機能を入れたりカスタマイズするなら自分で組み上げてビルドする必要がある。
  • ターミナルで動くエディタ
    • vim 等のターミナルで動くエディタを使う場合は SSH さえつながれば問題ない。

その他クラウド開発系 SaaS が OSS バージョンとして自身で提供しているサービスを自前で立ち上げられるようにしているケースがあります(Eclipse Che や Koding 等)。ただ、エディタだけではなくワークスペース機能までも搭載したフル装備でかなり使いづらいのでここでは紹介しません。興味がある人は調べてみてください。

SSH 接続については普通に繋いでも、クラウドプロバイダやブラウザプラグインの提供する web コンソールを使っても問題ないです。web コンソールを使えば完全にブラウザだけで完結することができます。ちなみに web コンソールを使用しない場合、インターネットに面したポートは全て塞いでも大丈夫です(外部 IP すらいらないかも?)。

クラウド上にサーバを立ち上げるので、そこそこの知識を必要とします。

#フルクラウド型 (Type B)

フルクラウド型(Type B)の説明図

エディタは SaaS を使い、その他の部分はクラウド上のサーバを用意してそこで賄う方式です。

外部のプロジェクトを編集できるエディタな SaaS は自分の知る限りではcodeanywhereだけです。

クラウド上にサーバを立ち上げるので、そこそこの知識を必要とします。

#フルクラウド型 (Type C)

フルクラウド型(Type C)の説明図

SaaS を使う方式です。

開発環境からエディタまで全て SaaS に面倒を見てもらいます。非常に楽でセットアップや管理も不要な一方、サービスにロックインされます。基本的にはリポジトリベースでプロジェクトを作るサービスを選んでおけば、サービスを変えるとしても以降にはほぼ手間がかからないと思います。有名どこは以下の通りです。

  • codeanywhere
    • 一番有名かな?
    • キレイな UI で使いやすく、vim のキーバインドもあり。
    • TypeScript サポートがない。 (Language Server 対応自体ないっぽい)
    • 料金もそこまで高くない。
  • gitpod
    • GitHub のリポジトリ URL の頭にgitpod.io#をつけるだけでエディタが開く、一時期話題になった独特なサービス。
    • Theia ベースだがしっかりと作られているのでかなり使いやすい。
    • 月 100 時間を超える場合は codeanywhere より$20~$30 ほど高くなる。
    • VSCode の TypeScript サポートがそのまま載っているので結構おすすめ。
  • AWS Cloud9
    • AWS による開発環境 SaaS。
    • 内部的には EC2 を使っているので Type B だが、ユーザは諸々込の SaaS として扱えるようになっている。
    • 上 2 つと比べると言語サポートは弱い(弱かった気がする)。

「AWS とか GCP とかよくわかんないけどクラウド開発したい!」という場合はこの方式が一番でしょう。

注意すべき点としては、これらのサービスは基本的にプロジェクト(ワークスペース)毎に開発を行うため、グローバルなソフトウェアや設定(gitignore とか)に依存することができないので注意が必要です。

#部分クラウド型

部分クラウド型の説明図

エディタはローカルマシンのエディタを使い、リモート編集機能によってクラウド上のファイルを編集する方式です。もちろん開発コマンド等はクラウド上で実行します。

ブラウザ IDE/エディタでは満足できない場合はこの方式が良いでしょう。

  • VSCode Remote
    • 公式で開発されている VSCode の拡張機能。
    • 機能がサーバとクライアントで分離されるので軽くなる模様。
    • この方式を取る場合の現状もっともおすすめできるエディタ。
  • クラウド上のディレクトリをマウント+お好きなエディタ
    • やったことないしやる気もないのでなんとも...。

クラウド上にサーバを立ち上げるので、そこそこの知識を必要とします。

#おわりに

ローカルで開発することに比べ、クラウド開発においてはセキュリティや利用料金、可用性など色々と考えることがあります。しかし、一度それを覚え/考えてしまえば PC の故障やクリーンインストールが怖くなくなり、環境構築のハードルも下がります。さらば、オールドタイプ。

SaaS にしろクラウドプロバイダ(GCP とか AWS とか)にしろ基本的に無料枠があるので一度試してみてはいかがでしょうか?

#参考記事