サービス料金導入事例開発ブログ会社案内 お問い合わせ →
Dev Blog

お客様からの不具合報告を受けるツール「ムシトリ」を作り、オープンソースで公開した

お客様との不具合・要望のやり取りに使う課題管理ツール「ムシトリ」を作り、オープンソース(MITライセンス)で公開した。名前は「バグ(ムシ)取り」から。 GitHub で見る

ムシトリの課題一覧の画面。種別・キー・件名・担当者・状態・優先度・期限日・更新日時が並び、状態は未対応・処理中・処理済みの色で分かれている

画面の会社名・人名・課題はすべて架空。

■背景と目的

  • お客様とのやり取りで使うツールを探していた。不具合の報告を受けて、状態を管理しながら返事をする、という用途
  • Redmineは設置の手間が大きい。Rubyの実行環境から整える必要がある
  • Backlogは機能が多く、いちばん安いプランでも月額の費用が負担に感じた
  • 使いたいのは不具合のやり取りの部分だけだったので、そこだけに絞って作った

■できること

  • お客様がスクリーンショットを貼り付けて起票する。Ctrl+Vでの貼り付け、ドラッグ&ドロップ、スマホは写真を選ぶ
  • 種別(不具合・要望・質問)を選ぶと、「操作手順」「期待する動作」「実際の動作」などの記入欄が本文に入る。何を書けばよいか、お客様が迷わない
お客様が課題を追加する画面。種別で不具合を選ぶと、詳細欄に発生した画面・操作手順・期待する動作・実際の動作の記入欄が入る。下にスクリーンショットを貼り付ける枠がある
  • 状態は「未対応→処理中→処理済み→完了」の4つ。担当者・優先度・期限日を変えると、コメントと一緒に履歴が残る
  • 起票やコメントがあると、関係者にメールで知らせる
課題の詳細画面。本文の下に添付したスクリーンショットのサムネイルがあり、コメント欄には状態を未対応から処理中に変えた履歴と返信が並ぶ
  • 社内用とお客様用で、画面もログインも分けた。お客様には自社のプロジェクトしか見えない
  • スマホでは、一覧が表からカードに変わる
スマホで見た課題一覧。1件ずつカードになり、種別・状態・優先度・担当者・期限日が出ている

■作りで決めたこと

  • お客様にはパスワードを持たせない。メールアドレスを入れると6桁の認証コードが届き、それでログインする。パスワードを忘れた、という問い合わせがなくなる
  • お客様に見せてはいけない課題は、「権限がありません」ではなく「ページが見つかりません」にした。他社の課題がそこにあること自体を知らせないため
  • 同じブラウザで社内用とお客様用の両方にログインしていても、片方のログアウトでもう片方が切れないようにした
  • 画面は外部のサイトを読み込まない。Bootstrapやフォントも同梱し、CDNを使っていない
  • そのため、セキュリティ設定(CSP)は default-src 'self' の厳しい内容のまま動く。インラインのスクリプトやスタイルも使っていない
  • 設置したあとは、インターネットにつながらない社内LANでも画面が動く。ただし、インストールと更新(git clone・composer)にはインターネット接続が、メールでの通知には送信に使うメールサーバーが要る
  • 大きな写真はブラウザ側で縮小してから送る。長辺2560pxを超える画像は縮めるが、スクリーンショットの文字はつぶさないようにした
  • 社内用画面のURLは、推測されにくい文字列にできる

■設置

  • SSHでログインしてコマンドを実行できるサーバーが必要。VPSやクラウド、SSHが使えるレンタルサーバー
  • install.sh を実行して質問に答えると、データベースの作成、メール送信の設定、最初の管理者の登録まで進む。Nginxの設定とcron(毎日のバックアップ)も作れる
  • データベースはMySQLかSQLite。少人数ならSQLiteで、データベースの準備も要らない
  • アップデートは update.sh 1つ。更新前に自動でバックアップを取り、失敗したら更新を止める

■公開の方針

  • ライセンスはMIT。社内で使うのも、手を加えるのも自由
  • 不具合の報告・要望はGitHubのIssuesで受け付ける。プルリクエストは当面受け付けていない
  • 設置の代行や機能の追加は、お問い合わせから相談を受けている

■技術構成

  • PHP 8.3以上、Laravel 13、MySQL 8.0またはSQLite、Nginx + PHP-FPM
  • 画面はBladeとAlpine.js(CSP対応版)。ビルドの工程はない
  • メール送信はSMTPかAmazon SES
  • 自動テストはPest

■課題

  • 画面と説明は日本語だけ。英語は要望があれば考える
  • SSHが使えない共用のレンタルサーバーには置けない
  • ガントチャート、Wiki、作業時間の記録などはない。入れると、絞った意味がなくなる

■所感

  • 機能を足すより、お客様に迷わせない方に時間を使った。記入欄のテンプレート、パスワードなしのログイン、見えてはいけない物は存在ごと隠す、といった部分
  • これからお客様とのやり取りで使っていき、使いにくい所は直していく