記事
Toshihiko Minamoto · 2021年11月11日 8m read

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つのサービスとして扱われます。

 

10
2 0 0 15
Log in or sign up to continue