devbase用のPluginを作成し、公開するまでの手順を解説します。
- devbase 2.2.0 以上がインストール済み
- Git がインストール済み
- Docker / Docker Compose が利用可能
mkdir my-plugin && cd my-plugin
git initリポジトリのルートに plugin.yml を作成します。
このファイルはPluginのメタ情報とプロジェクト一覧を定義します。
plugins:
- name: my-plugin
version: 1.0.0
description: "サンプルプラグイン"
projects:
- name: my-project
description: "サンプルプロジェクト"
path: projects/my-project補足:
plugin.ymlのフォーマット詳細は plugin.yml リファレンス を参照してください。
最小限のPluginは以下の構造で構成されます。
my-plugin/
├── plugin.yml
└── projects/
└── my-project/
├── compose.yml
└── env
projects/my-project/compose.yml を作成します。
services:
dev:
image: my-project:latest
build:
context: ${DEVBASE_ROOT}/containers/general/
dockerfile: Dockerfile
volumes:
- /var/run/docker.sock:/var/run/docker.sock
env_file:
- ${DEVBASE_ROOT}/.env
- env
- .env
group_add: ["${DOCKER_GID}"]
command: tail -f /dev/null
working_dir: /work
networks:
- devbase_net
networks:
devbase_net:
external: trueポイント:
- 標準コンテナを使う場合は、
build.contextには${DEVBASE_ROOT}ベースのパスを指定する(相対パス禁止)。Docker Hub などの公開イメージを利用する場合はimage:のみを指定しbuild:を省略できる。独自のDockerfileを使う場合は${DEVBASE_ROOT}/plugins/<plugin>/...配下に配置する(projects/直下はシンボリックリンクのためcontext: .は不可。詳細は compose.yml ガイドライン §4.3) env_fileは3段階の環境変数ファイルを読み込むdevbase_netはdevbaseが管理する共有ネットワーク
補足: compose.yml の記述ルール詳細は compose.yml ガイドライン を参照してください。
projects/my-project/env を作成します。このファイルはGit管理対象です。
GIT_USER=your-github-user
GIT_REPO=my-repo
WORK_DIR=/work/$GIT_REPO
CONTAINER_SCALE=1
# GitLab等GitHub以外のホストを使う場合:
# GIT_HOST=gitlab.com| 変数 | 説明 |
|---|---|
GIT_USER |
Gitホストのユーザー名またはOrganization名 |
GIT_REPO |
リポジトリ名 |
GIT_HOST |
Gitホスト名(デフォルト: github.com)。GitLabの場合は gitlab.com を指定 |
WORK_DIR |
コンテナ内の作業ディレクトリ |
CONTAINER_SCALE |
起動するコンテナ数(デフォルト: 2) |
プロジェクト固有の機密情報は projects/my-project/.env に配置します。
このファイルは .gitignore に含まれるため、Git管理対象外です。
MY_SECRET_API_KEY=sk-xxxxxxxxxxxx開発中のPluginは --link オプションでシンボリックリンクとしてインストールできます。
ローカルでの変更が即座に反映されるため、開発サイクルが高速化します。
devbase plugin install /path/to/my-plugin:my-plugin --linkcd projects/my-project
devbase env init
devbase up# コンテナにログイン
devbase login
# コンテナの状態確認
devbase ps| 症状 | 確認事項 |
|---|---|
| compose.yml のパスが解決できない | ${DEVBASE_ROOT} ベースになっているか確認 |
| 環境変数が読み込まれない | env_file の指定順序と .env ファイルの存在を確認 |
| ネットワーク接続エラー | devbase_net が作成済みか確認(docker network ls) |
| ボリュームが見つからない | 外部ボリュームの場合は事前に作成が必要 |
cd /path/to/my-plugin
git add .
git commit -m "Initial plugin release"
git remote add origin https://github.com/your-user/my-plugin.git
git push -u origin main他のユーザーがインストールできるよう、レジストリに登録します。
devbase plugin repo add your-user/my-plugin正しく公開されたか確認するため、名前指定でインストールします。
devbase plugin install my-plugincompose.yml 内のすべてのパスは ${DEVBASE_ROOT} ベースで記述してください。
プロジェクトディレクトリは projects/ 配下にシンボリックリンクとして配置されるため、
相対パスを使うとリンク元とリンク先でパス解決が異なり、予期しないエラーが発生します。
# OK
context: ${DEVBASE_ROOT}/containers/general/
# NG(シンボリックリンク経由で解決できない場合がある)
context: ../../containers/general/env_file は上から順に読み込まれ、後の指定が前の指定を上書きします。 この順序を活用して、環境変数を適切に階層化してください。
flowchart LR
A["${DEVBASE_ROOT}/.env<br/>グローバル共通"] --> B["env<br/>プロジェクト設定"]
B --> C[".env<br/>プロジェクト機密"]
style A fill:#e8f4fd
style B fill:#d4edda
style C fill:#fff3cd
| 用途 | ボリューム名パターン | 共有範囲 |
|---|---|---|
| ホームディレクトリ | devbase_home_ubuntu |
全コンテナ共有 |
| 作業ディレクトリ | ${COMPOSE_PROJECT_NAME}_work_${CONTAINER_INDEX:-1} |
コンテナ専用 |
- ホームディレクトリボリュームはシェル設定やSSH鍵など、コンテナ横断で共有したい設定の永続化に使用
- 作業ディレクトリボリュームはプロジェクトごと・コンテナインデックスごとに独立
プロジェクトの要件に応じて適切なベースイメージを選択してください。
| イメージ | ベース | 主要ツール | 推奨用途 |
|---|---|---|---|
base |
Ubuntu Noble | Docker CLI、Python 3 | 軽量な開発環境 |
general |
base | AWS CLI、gcloud、Terraform、Node.js 20、AI CLI | 汎用開発 |
go |
base | Go開発環境 | Go言語プロジェクト |
php |
general | PHP 8.3、Composer | PHP 8.3 系プロジェクト |
php85 |
general | PHP 8.5、Composer | PHP 8.5 系プロジェクト |
latex |
general | LaTeX | 文書・論文作成 |
lfm |
general | Rust、gfortran、MeCab | 数値計算・自然言語処理 |
snapshot |
Ubuntu Noble | zstd | スナップショット専用 |
# Git管理対象
plugin.yml
projects/*/compose.yml
projects/*/env
# Git管理対象外(.gitignoreに追加)
projects/*/.env
projects/*/.docker-compose.scale.yml
- plugin.yml リファレンス -- 全フィールドの詳細仕様
- compose.yml ガイドライン -- compose.yml の記述ルールとテンプレート