カテゴリー: Tools

GCP無料枠×Theiaでいつでもコーディング

はじめに

みなさん、こんにちは。カイザーです。そろそろ秋ですね。私にとっては「旅行の秋」ですが、移動時間もコーディングできたら素敵ではないでしょうではないでしょうか!?
そこで、この秋は移動時間に、iPadでコーディングができないかと思い、「Theia」というWEB上で動作するIDEと、GCPの無料枠を使用して、ほぼ無料でクラウド開発環境を作っていこうと思います。

Theiaとは?

Theiaとは、クラウドやデスクトップで動作するオープンソースのIDEで、このような特徴があります。

  • サーバを用意することで、WEBブラウザ上でいつでもIDEにアクセスして、コーディングやSSHが可能。(Gitpod.ioを使えばサーバがなくとも手軽にWEB上で使用できるようです)
  • Electronアプリもあるので、デスクトップでも動作する。
  • エクステンションによって、様々な言語サポートがあり、主要なものはセットアップ済みものがDockerコンテナで用意されている。
  • VS Code Powered – Visual Studio Codeと同じような使い勝手

今回は、このTheiaをGCP上で動作させ、iPadでどこでもコーディングできることを目標にしたいと思います。

GCPのセットアップ

今回はクラウドIDEとして試してみたいので、サーバを用意します。GCP無料枠のAlways Freeを使用してセットアップしていきます。

無料枠の利用を開始

初めてGCPを使用する方は、まず請求情報の登録を行い、無料枠を有効にします。
私が登録した時は「無料トライアル期間が終了しても、自動的に請求されることはありません」との記載ありました。
登録が完了したら、GCEを開き「課金を有効にする」をクリックするとインスタンスを作ることができます。

GCEインスタンスの作成

課金を有効にすると、VMインスタンスを作成できるようになるので、早速作っていきます。
スペックを指定して作成する流れになりますが、Always Freeに適合するには条件があるので、注意が必要です。

GCPの無料枠については下記URLで説明されています。
https://cloud.google.com/free/?hl=ja
必ず最新情報で確認しましょう。
2018年11月19日現在でのポイントを説明します。

1 f1-micro インスタンス(1 か月あたり、バージニア州北部を除く米国リージョンのみ)

これはほぼそのままですが、今回は、USリージョンの中で1番近そうな、us-west1(オレゴン)を選択しました。

30 GB の HDD(期間合計)、5 GB のスナップショット(期間合計)

こちらもそのままですが、「SSD」を選択してしまうと課金されますので注意してください。(標準の永続ディスクを選択してください)
また、デフォルトでは10GBになっていますが、30GBまで無料なので、30GBとしておきました。また、OSはCentOS 7としました。

1 GB の北米から全リージョン宛ての下りネットワーク(1 か月あたり、中国とオーストラリアを除く)

これは注意が必要です。まず、今回指定したUSリージョンのサーバから全リージョン宛ての下り1GB/月に限り無料ですが、中国とオーストラリアは除かれます。
今回は自分用に構築しますが、WEBサーバを構築するという行為には違いないので、アタックされます。中国やオーストラリアからアタックを受け、下り通信をした場合はその分の請求があるので注意してください。(クレジットがあればそちらから引き落とされると思います。)
ちなみに、上りは無料です。

上記のポイントを押さえて、下記スクリーンショットのインスタンスを作成しました。

Theiaのセットアップ

インスタンスを起動してSSH接続します。
なお、gcloudを使用すると簡単に接続できますので、今回はgcloudを使用します。
「gcloudコマンドを表示」をクリックすると、SSH接続に必要なコマンドが表示されるので、そのままコピペで接続できます。

dockerのセットアップ

公式ドキュメントに従ってインストールしていきます。

1. 念のため、古いバージョンのdockerのアンインストール

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

2. 依存パッケージの追加

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

3. リポジトリの追加

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4. dockerのインストール

$ sudo yum install docker-ce

5. dockerの起動

$ sudo systemctl start docker

Theiaの起動

Theiaはすぐに使えるdocker imageを複数公開しているので、お好みのimageを起動してください。
今回は、Goのimageを使用したいと思います。

$ sudo docker run -it -p 3000:3000 -v "$(pwd):/home/project:cached" theiaide/theia-go

これで起動完了するはずなのですが、私の環境では下記のエラーとなって起動できませんでした。

Server worker has been disconnected. [ID: 1 | PID: 38]
Server worker failed to start within 5000 milliseconds.
Pass a greater value as '--startup-timeout' option to increase the timeout or a negative to disable.
Done in 13.28s.

起動にタイムアウトになってしまったので、末尾に「–startup-timeout」をつける必要があるようです。
下記のようにすると起動できました。インスタンスのスペックの問題かもしれません。(ついでに、デーモン起動にしました)

$ sudo docker run -it -p 3000:3000 -d -v "$(pwd):/home/project:cached" theiaide/theia-go:nex
t --startup-timeout

起動できたら、curlコマンドで疎通確認します。

$ curl http://localhost:3000

レスポンスが返ってきたら、起動完了です。

アクセスするためのファイアウォール設定

デフォルトでは外側からアクセスすることは出来ないので、ファイアウォールの設定を行います。
今回は、最低限のファイアーウォールを設定していきます。
VMインスタンスの画面から、「ネットワークの詳細を表示」をクリックします。分かりにくいのでスクショで説明します。

その後「ファイアウォールルール」>「ファイアウォールルールの作成」と進み、ファイアウォールを設定します。
今回は一旦下記のように設定します。

  • トラフィックの方向: 上り
  • ターゲット: ネットワーク上のすべてのインスタンス
  • ソースフィルタ: IP範囲
  • ソースIPの範囲: アクセスする端末のグローバルIP
  • プロトコルとポート: 指定したプロトコルとポート
    • tcp: 3000

これで、外側からTheiaに繋がるようになります。

iPadから使用してみる

「http://[VMインスタンスのIP]:3000」でアクセスしてみましょう。しばらくすると、Theiaが起動します。
GoのHello Worldをやってみました。

「File> New File」で新規ファイル作成すると。エディタが使用可能になります。
Goのシンタックスハイライトや、補完入力も可能です。
「Terminal > New Terminal」でターミナルを起動可能です。

iPadだと英語入力のまま記号も入力できるため、入力はしやすいと思います。
ただし、ダブルクオート(0x22)とシングルクオート(0x27)を正しく入力するには、ダブルクオートキーを長押しして選択する必要があります。

意外と便利なGCPアプリ

GCPはiOS/Androidアプリもリリースしており、アプリから全体サマリの閲覧や、各種サービスのモニタリングができます。
GCE インスタンスへのSSH接続も簡単なので、とても便利です。

さいごに

Theiaには様々なdockerイメージがあるので、開発したい言語に合わせて簡単に開発環境を構築できます。その上に、WEBで動作するので、隙間時間でもコーディングができそうです。
ただ、今回説明したままだと、SSLと認証に非対応なので、実際にはリバースプロキシを起動させて対応する必要がありそうです。
Theiaを使い倒すことができてきたら、この辺りも紹介したいと思います。

おすすめ書籍

    

カイザー

シェア
執筆者:
カイザー

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

3週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前