【Docker】プロジェクト管理ツールを自前で立てる話と、AIにコードを書かせてハマった話
プロジェクト管理ツールといえば、Jira、Backlog、Notionなど、今はクラウド型が主流です。 クラウド型の最大のメリットは、インフラの管理を自分たちでしなくて良いこと。月額料金を払えば、アップデートもハードウェア構成も気にせず、招待機能を活用して外部パートナーともスムーズに連携できます。
しかし、個人的には**「オンプレミスのRedmine」**も捨てがたい選択肢だと思っています。
なぜ今さらオンプレ(Redmine)なのか
理由は単純で、**「コスト」と「身軽さ」**です。 私は基本的に「予算がない」「一人、あるいは少人数」「ビジネス上の費用対効果がシビア」という環境で動くことが多いため、どうしてもOSS(オープンソース)を検討してしまいます。
社内やチーム内だけで使うなら、高価なクラウドやハイスペックなVPSは不要。手元の仮想マシンや安価なサーバーにRedmineを入れれば、ランニングコストはほぼサーバー代だけで済みます。
セキュリティ対策:「Windows Serverを使わない」
自前でサーバーを立てるというと「セキュリティはどうするんだ」という話になりますが、これについては私の持論があります。
「Windows Serverを使わず、Linuxを使っておけば、とりあえずの解決策になる」
これが私の考えです。
Windows Serverを使っていると、どうしても攻撃の対象になりやすく、対策が必須になります。特にRDP(リモートデスクトップ)などは、インターネットに公開していれば秒単位で総当たり攻撃を受けますし、OS自体の脆弱性も頻繁に見つかります。つまり、Windowsを選んだ時点で「守りを固めなければならない」というハンデを背負っている状態です。
一方で、Linux(CUI)であれば、そもそもRDPのような攻撃されやすい入り口がありません。 「Linuxを選べば、Windowsよりも被害が少ないし、セキュリティのスタートラインが違う」 のです。
さらに言えば、RedmineはRuby製です。WordPressのようなPHP製のCMSに比べれば、脆弱性を突かれる頻度も低いです。「Linux × Docker × ローカルIP接続」という構成であれば、そこまで過剰なセキュリティ意識(MFAや複雑なパスワード要件など)を持たずとも、必要十分な安全性を確保できると考えています。
Docker構築とAIの落とし穴
構築にはDockerを使います。自前でRubyの環境構築をするのは面倒ですが、Dockerなら公式イメージがあります。
docker-compose.yml を自分で書くのも手間なので、AIに「とりあえず動くコード」を生成してもらいました。
AIが生成したコード
services:
redmine:
image: redmine:latest
container_name: redmine-app
ports:
- "3000:3000"
environment:
- REDMINE_DB_MYSQL=db
- REDMINE_DB_PASSWORD=secret
- REDMINE_DB_USERNAME=redmine
- REDMINE_DB_DATABASE=redmine
- REDMINE_SECRET_KEY_BASE=secret_key_base
- TZ=Asia/Tokyo
- RAILS_LOG_TO_STDOUT=false
- REDMINE_LOG_LEVEL=debug
volumes:
- ./data/files:/usr/src/redmine/files
- ./data/log:/usr/src/redmine/log
- ./data/themes:/usr/src/redmine/public/themes
depends_on:
- db
restart: always
db:
image: mysql:8.4
container_name: redmine-mysql
command:
- --mysql-native-password=ON
- --innodb_use_native_aio=0
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=redmine
- MYSQL_USER=redmine
- MYSQL_PASSWORD=secret
- TZ=Asia/Tokyo
volumes:
- db-data:/var/lib/mysql
restart: always
volumes:
db-data:
一見よさそうに見えますが、これには大きな罠がありました。
AIは間違いを認めない
指定したイメージは redmine:latest ですが、現在の最新版は Redmine 6 です。Redmine 6からはディレクトリ構成が変わり、テーマの配置場所が変更されています。
- 誤(AIの生成):
/usr/src/redmine/public/themes - 正(Redmine 6):
/usr/src/redmine/themes/
AIに「パスが違うのでは?」と指摘しても最初は間違いを認めず、公式ドキュメント等の情報を突きつけてようやく訂正してきました。AIコードを鵜呑みにせず、バージョン差異のチェックは必須だと痛感しました。
「動けばいい」から「実用」へ
修正後、とりあえず起動はしましたが、実用面を考えると以下の課題が残ります。
- メール通知が使えない: 少人数なら無しでも運用可能だが、やっぱり不便。
- テーマが古い: デフォルトのままでは味気ない。
- ログ管理: 操作ログなどを取得・保存する設定になっていない。
「とりあえず動けばいい」レベルなら上記のコードで十分ですが、後から設定を変更するのは大変です。 次回は、これらの課題を解決し、実用的に使えるコードへブラッシュアップしていきたいと思います。
