GitHub Codespaces と IRIS
しばらく前、GitHubはGitHub Codespacesという新しい機能を発表しました。 ブラウザでVSCodeを実行する機能があります。マシンでローカルに実行するのとほぼ同じ性能がありますが、クラウドの能力も備わっているため、最大32CPU、64 GB RAMのマシンタイプを選択することが可能です。
素晴らしいことですね。 でも、このことは、InterSystems IRISで駆動するプロジェクトで作業する上で、どのように役立つのでしょうか。 それをどのように構成するのか見てみましょう。
あらゆるリポジトリに対応できる基本の出発点
この機能を使用すると、[Code]ボタンを押せば、クラウド内のあらゆるリポジトリを編集できるようになります。 この機能はまだベータ段階にあるため、すべての人が利用できるわけではないことに注意してください。ベータ期間が終了すれば、有料アカウントでのみ利用できるようになります。
このリポジトリは、VSCodeのみに準備されているだけであり、Codespaces用として特別に用意されたものではありません。 [New codespace]ボタンを押すと、自分だけの環境を作成できます。
私の場合、以前のCodespacesの使用においてObjectScript拡張機能をインストールし、Codespacesからプロンプトでグローバルに有効にしています。 毎回インストールされるため、ObjectScriptコードはすでにハイライト表示されています。 しかし、IRISはまだ利用できないため、 まずはdocker-composeから始めましょう。
それが済むと、IRIS Terminalに接続し、コードをコンパイルできるようになります。
docker-composeのポートは自動的に認識され、ブラウザで開くことができるため、システム管理ポータルを開くことも可能です。
準備済みのリポジトリでの使用
VSCodeとIRISをクラウドで実行することはできましたが、準備段階で手動での作業がいくつかありました。 しかし、開始直後にリポジトリを開発できるようにすることもできます。
devcontainer.jsonを使うと可能です。 私の最近のプロジェクトの1つであるRealworldに基づく例を紹介します。 このプロジェクトは非常に複雑で、バックエンドとフロントエンドがあり、docker-composeを使用してすべてをまとめて起動します。
devcontainerはdocker-composeも使用する可能性があるため、私の構成は次のようになりました。
{
"name": "IRIS RealWorld example",
"dockerComposeFile": "docker-compose.yml",
"service": "server",
"extensions": [
"intersystems-community.vscode-objectscript"
],
"forwardPorts": [
80,
52773
],
"workspaceFolder": "/home/irisowner/conduit",
"remoteUser": "irisowner",
"postCreateCommand": "iris start iris",
"settings": {
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.profiles.linux": {
"bash": {
"path": "bash",
"icon": "terminal-bash"
},
"iris": {
"path": "iris",
"args": ["session", "iris"]
}
},
"intersystems.servers": {
"/ignore": true
},
"objectscript.ignoreInstallServerManager": true,
"objectscript.ignoreInstallLanguageServer": true,
"objectscript.conn": {
"active": true,
"host": "localhost",
"port": 52773,
"ns": "CONDUIT",
"username": "demo",
"password": "demo",
"links": {
"Conduit APP": "http://localhost:80/",
"Conduit API": "http://${host}:${port}/conduit/"
}
}
}
}
ここでは多くの事項が構成されています。
- 主としてCodespacesのためのカスタムdocker-compose.ymlへのパス
- 開発が行われるメインサービスの名前
- VSCodeにデフォルトでインストールされる拡張機能のリスト
- 公開する必要のあるポート。この場合はIRIS用とフロントエンド用のWebサーバーポート
- 作業ディレクトリへのパス
- コンテナ内のユーザー。IRISコンテナに入るときに、irisownerユーザーが必要です。
- デフォルトのエントリポイントであるiris-mainを使用せずに、単に無限にスリープし、環境が起動した後に自分でIRISを起動するように構成されたdocker-compose内のIRISコンテナ
- 最後に、VSCodeの設定もここで構成可能です。これはマシンレベルの設定です。 必ず.vscode/settings.jsonでオーバーライドまたはアペンドできます。
このようなリポジトリ向けのCodespacesを起動するには、すべての必要なコンテナをビルドして開始する必要があるため、もう少し時間がかかります。 GitHubは、このようなイメージをリポジトリにプッシュした後にプリベイクして、起動を高速化することが可能だと述べています。
そして、それが開始すると、何の操作も必要なく、開発の準備が完了しています。
このプロジェクトには、用意されたPostmanテストを使用してREST APIをテストするオプションがあるため、IRISでバックエンドコンテナ内にnpmとnewmanをインストールしました。 そこでテストを実行することができます。 すべて合格です。よくできました。
そしてフロントエンド部分を使用できます。
GitHubでは、ローカルのVSCodeからでもCodespacesに接続できるようになっています。 隅にある緑色のCodespacesを押すと、VC Codeで開くことを選択できます(GitHub Codespaces 拡張機能がインストールされている必要があります)。
これは、ローカルのVSCodeで開いたプロジェクトですが、ifconfigの結果からわかるように、クラウドで実行されています。私は今、絶対にシンガポールにはいません。
GitHub Codespacesなしでブラウザーで実行
Codespaces機能にアクセスできない場合、またはこの方法では使用したくないが、ブラウザーでVSCodeを試してみたい場合は、どうすればよいでしょうか。
もう1つのプロジェクトであるcode-serverを使えば可能です。
このVSCodeを次のコマンドで実行するだけです。
docker run -it -p 8080:8080 codercom/code-server --auth=none
デフォルトバージョンのVSCodeが実行されます。フォルダがマッピングされていないため、任意のフォルダをマウントし、それをworkdirに設定すると、内部を見れるようになります。
docker run -it -p 8080:8080 -v `pwd`:/opt/realworld -w /opt/realworld codercom/code-server --auth=none
これはデフォルトのVSCodeで、ObjectScript拡張機能はインストールされていません。 拡張機能の制限があり、元のVSCodeマーケットプレイスへのアクセスがありませんが、代わりにopen-vsx.orgという別のプレイスを使用しています。また、メインのObjectScript拡張機能もそこに提供されています。
このようなDockerfileを使用すると、そこに何でもインストールされ、一部の拡張機能もすでにインストールされた独自のCode Serverをベイクすることができます。
FROM codercom/code-server
USER root
RUN curl -fsSL https://deb.nodesource.com/setup_15.x | bash - && \
apt-get install -y jq nodejs python3-pip python3-dev unixodbc-dev && \
rm -rf /var/lib/apt/lists/* && \
pip3 install pyodbc && \
npm install -g yarn && \
sudo chown -R 1000:1000 /home/coder
COPY extensions extensions
COPY settings.json /root/.local/share/code-server/User/settings.json
ENV SERVICE_URL=https://open-vsx.org/vscode/gallery
ENV ITEM_URL=https://open-vsx.org/vscode/item
RUN \
code-server --install-extension ms-python.python && \
code-server --install-extension intersystems-community.vscode-objectscript && \
find extensions -type f -exec code-server --install-extension {} \;
WORKDIR /opt/intersystems
CMD [ "--auth=none", "--disable-telemetry" ]
一部のユーザーレベルのデフォルトのsettings.jsonを定義し、必要な拡張機能がopen-vsxにない場合は、手動でダウンロードして、Dockerfileの隣にあるextensionsフォルダに配置すれば、インストールできます。
これで、必要なすべての拡張機能がインストールされた新しいcode-serverを実行できるようになりました。
docker run -it -p 8080:8080 -v `pwd`:/opt/realworld -w /opt/realworld <strong>caretdev/code-server</strong> --auth=none
また、構文ハイライトもすでに存在しています。後はIRIS自体を実行するだけですが、拡張docker-composeを使って行えます。code-serverはIRISに並ぶ単なるもう1つのサービスとして扱われます。