しばらく前、GitHubは[GitHub Codespaces](https://github.com/features/codespaces)という新しい機能を発表しました。 ブラウザでVSCodeを実行する機能があります。マシンでローカルに実行するのとほぼ同じ性能がありますが、クラウドの能力も備わっているため、最大32CPU、64 GB RAMのマシンタイプを選択することが可能です。 ![](/sites/default/files/inline/images/images/image(2535).png) 素晴らしいことですね。 でも、このことは、InterSystems IRISで駆動するプロジェクトで作業する上で、どのように役立つのでしょうか。 それをどのように構成するのか見てみましょう。 ### あらゆるリポジトリに対応できる基本の出発点 この機能を使用すると、[Code]ボタンを押せば、クラウド内のあらゆるリポジトリを編集できるようになります。 この機能はまだベータ段階にあるため、すべての人が利用できるわけではないことに注意してください。ベータ期間が終了すれば、有料アカウントでのみ利用できるようになります。 ![](/sites/default/files/inline/images/images/image(2537).png) このリポジトリは、VSCodeのみに準備されているだけであり、Codespaces用として特別に用意されたものではありません。 [New codespace]ボタンを押すと、自分だけの環境を作成できます。 ![](/sites/default/files/inline/images/images/image(2538).png) 私の場合、以前のCodespacesの使用においてObjectScript拡張機能をインストールし、Codespacesからプロンプトでグローバルに有効にしています。 毎回インストールされるため、ObjectScriptコードはすでにハイライト表示されています。 しかし、IRISはまだ利用できないため、 まずはdocker-composeから始めましょう。 ![](/sites/default/files/inline/images/images/image(2539).png) それが済むと、IRIS Terminalに接続し、コードをコンパイルできるようになります。 ![](/sites/default/files/inline/images/images/image(2540).png)![](/sites/default/files/inline/images/images/image(2541).png) docker-composeのポートは自動的に認識され、ブラウザで開くことができるため、システム管理ポータルを開くことも可能です。 ![](/sites/default/files/inline/images/images/image(2543).png) ### 準備済みのリポジトリでの使用 VSCodeとIRISをクラウドで実行することはできましたが、準備段階で手動での作業がいくつかありました。 しかし、開始直後にリポジトリを開発できるようにすることもできます。 [devcontainer.json](https://docs.github.com/jp/codespaces/customizing-your-codespace/configuring-codespaces-for-your-project)を使うと可能です。 私の最近のプロジェクトの1つである[Realworld](https://github.com/daimor/realworld-intersystems-iris)に基づく例を紹介します。 このプロジェクトは非常に複雑で、バックエンドとフロントエンドがあり、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は、このようなイメージをリポジトリにプッシュした後にプリベイクして、起動を高速化することが可能だと述べています。 ![](/sites/default/files/inline/images/images/image(2544).png) そして、それが開始すると、何の操作も必要なく、開発の準備が完了しています。 ![](/sites/default/files/inline/images/images/image(2545).png) このプロジェクトには、用意されたPostmanテストを使用してREST APIをテストするオプションがあるため、IRISでバックエンドコンテナ内にnpmとnewmanをインストールしました。 そこでテストを実行することができます。 すべて合格です。よくできました。 ![](/sites/default/files/inline/images/images/image(2546).png) そしてフロントエンド部分を使用できます。 ![](/sites/default/files/inline/images/images/image(2547).png) GitHubでは、ローカルのVSCodeからでもCodespacesに接続できるようになっています。 隅にある緑色のCodespacesを押すと、VC Codeで開くことを選択できます(GitHub Codespaces 拡張機能がインストールされている必要があります)。 ![](/sites/default/files/inline/images/images/image(2548).png) これは、ローカルのVSCodeで開いたプロジェクトですが、ifconfigの結果からわかるように、クラウドで実行されています。私は今、絶対にシンガポールにはいません。 ![](/sites/default/files/inline/images/images/image(2549).png) ### GitHub Codespacesなしでブラウザーで実行 Codespaces機能にアクセスできない場合、またはこの方法では使用したくないが、ブラウザーでVSCodeを試してみたい場合は、どうすればよいでしょうか。 もう1つのプロジェクトである[code-server](https://github.com/cdr/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`` ![](/sites/default/files/inline/images/images/image(2550).png) これはデフォルトのVSCodeで、ObjectScript拡張機能はインストールされていません。 拡張機能の制限があり、元のVSCodeマーケットプレイスへのアクセスがありませんが、代わりにopen-vsx.orgという別のプレイスを使用しています。また、メインのObjectScript拡張機能もそこに[提供されています](https://open-vsx.org/extension/intersystems-community/vscode-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つのサービスとして扱われます。 ![](/sites/default/files/inline/images/images/image(2551).png)