はじめに
みなさん、こんにちは。カイザーです。そろそろ秋ですね。私にとっては「旅行の秋」ですが、移動時間もコーディングできたら素敵ではないでしょうではないでしょうか!?
そこで、この秋は移動時間に、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のアンインストール
1 2 3 4 5 6 7 8 9 10 | $ 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. 依存パッケージの追加
1 | $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 |
3. リポジトリの追加
1 | $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |
4. dockerのインストール
1 | $ sudo yum install docker-ce |
5. dockerの起動
1 | $ sudo systemctl start docker |
Theiaの起動
Theiaはすぐに使えるdocker imageを複数公開しているので、お好みのimageを起動してください。
今回は、Goのimageを使用したいと思います。
1 | $ sudo docker run -it -p 3000:3000 -v "$(pwd):/home/project:cached" theiaide/theia-go |
これで起動完了するはずなのですが、私の環境では下記のエラーとなって起動できませんでした。
1 2 3 4 | 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」をつける必要があるようです。
下記のようにすると起動できました。インスタンスのスペックの問題かもしれません。(ついでに、デーモン起動にしました)
1 2 | $ sudo docker run -it -p 3000:3000 -d -v "$(pwd):/home/project:cached" theiaide/theia-go:nex t --startup-timeout |
起動できたら、curlコマンドで疎通確認します。
1 | $ 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を使い倒すことができてきたら、この辺りも紹介したいと思います。