VWork バイブコーディングフレームワーク

Todoist・Trelloの代替を自社サーバーに——タスク管理OSS「Vikunja」を5分で立てて日本語で使うまで。翻訳の穴9%(135キー)を埋めて本家に返した記録

Todoist や Trello、Microsoft To-Do を「便利だけど社外にタスクを置くのが気になる」「人数課金が積み上がる」と感じている会社向けに、自社サーバーで動くタスク管理OSS「Vikunja(ヴィクーニャ)」を実際に立てて、日本語で使えるところまで確かめました。

結論を先に書きます。

数字はすべて 2026年9月3日に v2.6.0 で実測したものです。

Vikunjaとは

Vikunja は Go 製のオープンソースタスク管理ツールです(AGPL-3.0・GitHubスター約5,250)。公式が「The task manager you actually own(本当に自分のものになるタスク管理)」と掲げているとおり、設計の中心は自分のサーバーにデータを置くことにあります。

できることは、Todoist や Trello の利用者なら見慣れたものです。

5分で立てる(docker・最小構成)

公式の「Full docker example」の最小構成を土台に、公開URLと公開ポートだけ足したものが次です。DBはコンテナ内のSQLite、添付ファイルは ./files に置きます。

services:
  vikunja:
    image: vikunja/vikunja
    environment:
      VIKUNJA_SERVICE_PUBLICURL: http://192.168.0.3:18365/
      VIKUNJA_SERVICE_JWTSECRET: change-me-to-a-random-secret
      VIKUNJA_SERVICE_ENABLEREGISTRATION: "true"
    user: "0:0"
    ports:
      - "18365:3456"
    volumes:
      - ./files:/app/vikunja/files
      - ./db:/db
    restart: unless-stopped

docker compose up -d から画面が返るまで、当社環境では12秒でした。PUBLICURL は招待メールやCalDAVの案内に使われる自分のURLです。JWTSECRET は必ずランダムな文字列に変えてください。user: "0:0" は公式例のままで、ボリュームの権限トラブルを避けるための指定です(本番では専用ユーザーに変えるのが望ましい点は、後半の運用の項で触れます)。

社内で人数が増えてきたら、SQLite から PostgreSQL/MySQL に切り替えられます。環境変数 VIKUNJA_DATABASE_TYPE 以下を差し替えるだけで、アプリ側の操作は変わりません。

日本語で使う(設定は1か所)

右上のユーザー名 → 設定 → 「ローカライズ」で 言語=日本語、タイムゾーン=Asia/Tokyo、週の始まり=月曜日 を選ぶだけです。デモ用に「営業チームの週次タスク」というプロジェクトと6件のタスクを入れた画面がこちらです。

Vikunjaの概要画面(日本語)

カンバンでは To-Do/Doing/Done のバケット間をドラッグで動かせます。期限と優先度がカードに出ます。

カンバン表示

ガントは日付の範囲を指定して、タスクの期間を横棒で見ます。締め切りしか入れていないタスクも、開始日を後から引き伸ばして計画に変えられます。

ガントチャート表示

設定画面の左メニューには、パスワード・2要素認証・データのエクスポート・他サービスからのインポート・CalDAV・APIトークン・Webhook通知が並びます。運用で必要なものは一通り揃っています。

設定画面のローカライズ

翻訳の実測:91%、残りの9%はどこに残るか

「日本語対応あり」と一言で言っても、どこまで訳されているかは使ってみないと分かりません。そこでフロントエンドの言語ファイルを直接数えました。

数字だけ見ると十分に思えますが、残った9%が画面の目立つ場所に出ます。上の画面でも、左メニューの「My Open Tasks」「Inbox」、カンバンの「To-Do/Doing/Done」、ガントの「Date range」、設定の「Default due time」とその説明文が英語のままです。ほかに未訳が集中しているのは、メールアドレス変更の確認フロー、パスワードの案内、日付表示形式の選択肢といった初回設定と管理系のメッセージでした。日常のタスク操作は日本語で完結しますが、管理者が最初に触る画面ほど英語が混ざる、という分布です。

当社がやったこと:135キーを全訳して本家へ

  1. 未訳キーの抽出en.jsonja-JP.json を平坦化して比較し、日本語側に無いキーと、原文と同一のまま残っているキーを機械的に拾いました(135キー)
  2. 翻訳:当社のローカルLLM(gemma4、社外にデータを出さない構成)で業務向けの です・ます調に訳し、{count} {email} のようなプレースホルダと複数形の区切り記号 |原文と1文字も違わないことをプログラムで検証しました(不一致0件)。固有名詞や「CalDAV」「Webhook」のように英語のまま残すべき語は残しています
  3. 本家への投入:Vikunja は「翻訳は翻訳プラットフォームで行い、PRでは受け付けない」と CONTRIBUTING に明記しています。そのため翻訳は Crowdin の Vikunja プロジェクト 経由で本家へ投入を進めています(進捗は vikunja-jp の README で更新します)。取り込まれれば次のリリース以降、誰の環境でも日本語で出ます
  4. 今すぐ使いたい方向け:本家反映を待たずに使えるよう、翻訳済み135キーのパッチと上記の docker 構成を katsushi2441/vikunja-jp に置きました。ja-JP.json に上書きマージするだけで、画面の英語が消えます

「日本語が無いOSSを訳して本家に返す」という当社の取り組みは、これで Krayin(CRM、本家マージ済み)、Zammad(ヘルプデスク、Weblate 100%)に続く3本目になります。

会社で使うときの勘所(実測から)

CalDAVは本当に動く/dav/principals/<ユーザー名>/ に対して PROPFIND を投げると 207 Multi-Status が返り、プロジェクトがカレンダーとして見えました。iPhone の「アカウント追加 → その他 → CalDAV」やThunderbirdから、Vikunjaのタスクを既存の予定と並べて見られます。社内の「タスクは Vikunja、予定はスマホの標準カレンダー」という分業が成り立ちます。

バックアップ対象は2つだけ。SQLite 構成なら ./db/vikunja.db(書き込み中は -wal-shm も一緒に)と、添付ファイルの ./files/。この2つを日次でコピーすれば復旧できます。PostgreSQL に移した後は、DBのダンプに置き換わります。

最初にプロジェクトの切り方を決める。Vikunja のプロジェクトは入れ子にできます。「部署 → 案件」のように2階層までにしておくと、保存フィルタ(例:自分が担当・今週期限・未完了)が全社横断で効きます。チーム機能はプロジェクト単位で共有するので、部署をチームに対応させるのが分かりやすい構成でした。

公式例の user: "0:0" は本番では見直す。コンテナが root で動く指定です。手元検証では便利ですが、社内の本番では専用のUID/GIDに変えて、ボリュームの所有者を合わせるのが筋です。

登録の開放は最初だけVIKUNJA_SERVICE_ENABLEREGISTRATION を true のまま公開すると誰でもアカウントを作れます。管理者と初期メンバーを作ったら false に戻し、以降は招待か OpenID/LDAP で入れる運用にします。

まとめ

導入から社内展開までを、当社の手順書とテンプレート(プロジェクト設計・ラベル運用・週次の回し方・移行手順・バックアップ)にまとめた導入キットも用意しています。詳しくは Vikunja の紹介ページ をご覧ください。

参考