冒険心をくすぐるFocalboard:自社運用型プロジェクト管理ツールの魅力
mattermost-community/focalboard
まるで、あなたのチームを救う「秘宝の地図」のような存在になるかもしれませんよ。
Focalboard は、一言で言えば「自分だけの秘密基地」で作れる、高機能なプロジェクト管理ツールです。TrelloやNotion、Asanaのようなツールのオープンソース版で、自分たちのサーバーに設置して使うことができます。つまり、データの保管場所も、機能の拡張も、すべて自分たちの手の中にあるんです。まるで、自分たちだけの特別なギルドハウスを築き上げるような感覚ですね!
さあ、冒険者の皆さんが一番知りたいのはここでしょう。Focalboardが、なぜあなたのプロジェクトに新たな風を吹き込むのか、具体的なメリットを見ていきましょう。
データの主権を取り戻す! 多くのクラウドサービスでは、あなたのプロジェクトデータは他社のサーバーにあります。Focalboardなら、自社サーバーに構築するので、データのセキュリティやプライバシーを自分たちで完全にコントロールできます。まるで、大切な宝物を自分たちの城にしっかりと守るような安心感です。秘密保持契約の厳しいプロジェクトや、機密性の高い情報を扱う場合に特に威力を発揮します。
柔軟なカスタマイズ性で「最強の剣」を鍛え上げる! Focalboardはオープンソースです。これはつまり、必要に応じて機能を自由に追加したり、既存の機能を改良したりできるということです。例えば、CI/CDパイプラインとの連携や、特定の業務フローに合わせたカスタムレポートの作成など、市販のツールでは難しいような細かな要望にも応えられます。まるで、自分たちの手で最高の装備を作り上げていくような、クリエイティブな喜びがあります。
コストを抑えて「無限の資源」を手に入れる! 商用サービスは月額利用料がかかりますが、Focalboardはオープンソースなので基本的に無料です。サーバー費用や運用コストはかかりますが、長期的に見れば大幅なコスト削減につながる可能性があります。まるで、金貨を気にせず、無限に使える魔法のアイテムを手に入れたかのような感覚ですね。
技術スタックとの親和性
Golangの力!
FocalboardはGolangで開発されています。もしあなたのチームがGolangを使っているのであれば、ソースコードの理解や機能追加がよりスムーズに行えます。Golangは高速で安定性に優れているため、大規模なプロジェクトでも安心して利用できるでしょう。
さあ、実際にFocalboardを導入して、その力を解放する準備をしましょう。導入方法はいくつかありますが、今回はソフトウェアエンジニアの皆さんにとって最も分かりやすいであろう方法をいくつかご紹介します。
A. Dockerを使って手軽に起動する(初心者冒険者向け)
これが一番手軽な方法です。Dockerを使えば、複雑な環境構築なしにFocalboardを動かすことができます。
DockerとDocker Composeのインストール まだインストールしていない場合は、まずはDockerとDocker Composeをあなたの冒険の拠点(サーバーや開発マシン)にインストールしましょう。
Docker Composeファイルの準備
以下の内容で docker-compose.yml ファイルを作成します。まるで、秘密基地の設計図を作るような感覚です。
version: '3.8'
services:
focalboard:
image: mattermost/focalboard:latest
container_name: focalboard
ports:
- "8000:8000" # ホストの8000番ポートをコンテナの8000番ポートにマッピング
volumes:
- ./data:/opt/focalboard/data # データを永続化するためにマウント
environment:
- MM_DB_CONNECTION_STRING=postgres://user:password@db:5432/focalboard?sslmode=disable # データベース接続文字列(後述)
db:
image: postgres:13-alpine # PostgreSQLデータベース
container_name: focalboard-db
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: focalboard
volumes:
- ./db_data:/var/lib/postgresql/data # データベースデータを永続化
注意点
ports の 8000:8000 は、ホスト側のポートを自由に変更できます。例えば、3000:8000 にすれば、localhost:3000 でアクセスできます。
volumes は、Focalboardの設定ファイルやデータベースファイルなどをホスト側に保存するための設定です。これにより、コンテナを削除してもデータが失われることはありません。
MM_DB_CONNECTION_STRING は、Focalboardがデータベースに接続するための情報です。user、password、focalboard は db サービスの environment と一致させてください。
Focalboardの起動!
docker-compose.yml ファイルがあるディレクトリで、以下のコマンドを実行します。
docker-compose up -d
これで、Focalboardとデータベースがバックグラウンドで起動します。まるで、魔法の呪文を唱えるように、あっという間にシステムが立ち上がります。
アクセス!
Webブラウザで http://localhost:8000 にアクセスしてみてください。Focalboardのログイン画面が表示されるはずです。初めてアクセスする場合は、管理者アカウントの作成を求められます。
B. ソースコードからビルドする(熟練冒険者向け)
より深くFocalboardの世界に足を踏み入れたいなら、ソースコードからビルドしてみましょう。これにより、最新の機能を利用したり、自分でカスタマイズしたりすることが可能になります。
Golang環境のセットアップ Golangがインストールされていない場合は、まずはGolangの公式サイトからインストールしてください。バージョンは最新版を使うのがおすすめです。
Focalboardのソースコードをクローン GitHubからFocalboardのソースコードをあなたの開発環境にダウンロードします。
git clone https://github.com/mattermost/focalboard.git
cd focalboard
依存関係の取得とビルド Focalboardに必要な依存関係をダウンロードし、ビルドします。
go mod download
go build -o focalboard ./cmd/focalboard
これで、カレントディレクトリに focalboard という実行ファイルが生成されます。
設定ファイルの準備
Focalboardの起動には設定ファイルが必要です。config.json などの設定ファイルを準備し、データベース接続情報などを記述します。
{
"ServerRoot": ".",
"Port": 8000,
"DBType": "postgres",
"DBConnectionStr": "postgres://user:password@localhost:5432/focalboard?sslmode=disable",
"FilesDriver": "local",
"FilesPath": "./files"
}
注意点
DBConnectionStr は、別途起動しているPostgreSQLなどのデータベースに接続するための情報です。
FilesPath は、アップロードされたファイルが保存されるパスです。
Focalboardの起動 準備ができたら、生成された実行ファイルを起動します。
./focalboard -config config.json
これで、Focalboardが起動し、Webブラウザからアクセスできるようになります。
FocalboardはRESTful APIを提供しているので、外部システムと連携させることができます。例えば、バグトラッキングシステムから自動でタスクを作成したり、特定のイベントが発生したときに通知を送ったりすることが可能です。まるで、異なる魔法陣を組み合わせて新たな呪文を生み出すようなものです。
ここでは、Pythonを使ってFocalboardのAPIを叩き、ボードとカードを作成する簡単な例を示します。
import requests
import json
# FocalboardのURLと管理者トークン
# 管理者トークンは、FocalboardのWeb UIで管理者としてログインし、
# プロフィール設定などから取得できる場合があります。
# または、直接データベースから取得するか、開発環境で一時的にAPIキーを生成することも可能です。
FOCALBOARD_URL = "http://localhost:8000"
ADMIN_TOKEN = "your_admin_token_here" # ★要変更!Focalboardの管理者トークンに置き換えてください
headers = {
"Authorization": f"Bearer {ADMIN_TOKEN}",
"Content-Type": "application/json"
}
# 1. 新しいボードを作成する
def create_board(title):
url = f"{FOCALBOARD_URL}/api/v1/boards"
data = {
"title": title,
"description": "APIで作成されたテストボード",
"teamId": "your_team_id_here" # ★要変更!FocalboardのチームIDに置き換えてください
}
response = requests.post(url, headers=headers, data=json.dumps(data))
response.raise_for_status() # エラーがあれば例外を発生
board = response.json()
print(f"ボード '{board['title']}' が作成されました。ID: {board['id']}")
return board['id']
# 2. 指定したボードに新しいカード(タスク)を作成する
def create_card(board_id, title, description):
url = f"{FOCALBOARD_URL}/api/v1/boards/{board_id}/cards"
data = {
"title": title,
"description": description,
"boardId": board_id,
"properties": {} # カスタムプロパティがあればここに追加
}
response = requests.post(url, headers=headers, data=json.dumps(data))
response.raise_for_status()
card = response.json()
print(f"カード '{card['title']}' がボードID {board_id} に作成されました。ID: {card['id']}")
return card['id']
if __name__ == "__main__":
try:
# まずはボードを作成
board_id = create_board("新機能開発プロジェクト")
# そのボードにタスクカードを追加
create_card(board_id, "ユーザー登録機能の実装", "ユーザー認証とDBへの保存を行う")
create_card(board_id, "ログイン画面のUI設計", "Figmaでデザインを作成する")
create_card(board_id, "バグ修正:決済エラー", "特定条件下で決済が失敗する問題を調査・修正")
except requests.exceptions.RequestException as e:
print(f"API呼び出し中にエラーが発生しました: {e}")
if e.response:
print(f"レスポンスボディ: {e.response.text}")
except Exception as e:
print(f"予期せぬエラーが発生しました: {e}")
このサンプルコードを使う上での注意点
ADMIN_TOKEN と teamId は、あなたのFocalboard環境に合わせて書き換える必要があります。管理者トークンの取得方法は、Focalboardのバージョンや設定によって異なりますので、公式ドキュメントを参照してください。
FocalboardのAPIドキュメントを参照して、利用可能なエンドポイントやリクエスト・レスポンスの形式を確認してください。
Focalboardは、単なるプロジェクト管理ツールではありません。それは、あなたのチームがより自律的に、より創造的に仕事を進めるための強力な味方です。自分たちの手で環境を構築し、必要に応じてカスタマイズしていくことで、市販のツールでは得られない深い洞察と、チーム独自のワークフローを確立することができます。
さあ、ソフトウェアエンジニアの皆さん、Focalboardを導入して、あなたのプロジェクト管理の冒険に新たな一歩を踏み出してみませんか?きっと、チームの生産性を向上させ、より素晴らしい「宝物」を生み出すことができるはずです!