FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

VisualStudioCodeでCloud Composer(Airflow)のコードの補完を効かせる

この記事はFLINTERS10周年記念ブログリレーの34日目の投稿です

こんにちは、杉山です。最近、Cloud Composer(Airflow)を扱うプロジェクトにジョインしました。 特に何もせずにエディタでプロジェクトのコードを開くとコードの補完がうまく効かなかったので、この辺をなんとかしていこうと思います。 今回はVisualStudioCodeのDevcontainerを使う前提です。

大まかな作業の流れ

  1. requirements.txtを作る
  2. Dockerfileを作る
  3. compose.ymlを作る
  4. VSCode上でdevcontainerを設定する
  5. Deccontainerを適用する

1. requrements.txtを作る

Cloud ComposerはプリインストールされたPythonパッケージがあります。 https://cloud.google.com/composer/docs/concepts/versioning/composer-versions

↑のページから自分のプロジェクトで使っているCloud Composerのバージョンのパッケージ一覧から全てコピペしてrequirements.txtに貼り付けます。

注意

  • 全てコピペと書きましたが、基本的にはプロジェクトで使うパッケージだけピックアップした方がいいと思います
    • プロジェクトの都合上、Cloud Composerに別途パッケージを追加する必要があり、依存関係の問題に問題ないか確認したいようなケースでは全部入れた方がいいですが
  • 一部、 apache-airflow==2.5.3+composer といった記述があり、apache-airflow==2.5.3 に書き換えないとインストールできないパッケージがあります

2. Dockerfileを作る

# Cloud Composerで使っているpythonのバージョンに合わせる
FROM python:3.8.12-bullseye

ENV PYTHONUNBUFFERED True
ENV TZ Asia/Tokyo

RUN apt-get update
RUN pip install --upgrade pip

WORKDIR /app

COPY ./requirements.txt .

RUN pip install --upgrade pip

RUN pip install -r requirements.txt

3. compose.ymlを作る

services:
  python:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
    tty: true

4. .devcontainer/devcontainer.jsonを作る

{
    "name": "Python 3",
    "dockerComposeFile": ["../compose.yml"],
    "service": "python",
    "workspaceFolder": "/app"
}

メモ

  • ここではcompose.ymlを指定してますが、Dockerfileを指定する書き方もあります
    • Dockerfileを指定した場合は(project root)/.devcontainer配下にDockerfileやrequirements.txtを置かないとうまく動かせずorz
  • .devcontainerはVisualStudioCode前提で、別のエディタを使ってる人もいるのでひとまずこの構成にしました

5. Devcontainerを適用する

VisualStudioCodeの左下のボタンからぽちぽちして完成

注意

  • なんか補完効いてなくね?と思ったら参照してるPythonのパスが違うことがあったのでご注意を

実際に運用してみて気になったこと

  • 独自にパッケージを追加した場合はpip freezeの出力結果をrequirements.txtにコピペしているが、独自に追加したパッケージがどれだったか忘れた
  • よくあるアプリケーション開発ではDocker上で処理を動かすから実際の環境と同じものをインストールしておきたくなりますが、Cloud Composerには Composer ローカル開発 CLI ツール(https://cloud.google.com/composer/docs/composer-2/run-local-airflow-environments?hl=ja) なる実行環境もあるので、Dockerはあくまでコード補完の用途ということで必要なパッケージに絞った方がいい気がした

まとめ

コード補完最高!