Snipe-IT とは?なぜ必要なのか

Snipe-IT は オープンソースで無料の IT アセット管理システム(IT Asset Management, ITAM)だ。Laravel 12(PHP)ベースで構築され、AGPL-3.0 ライセンスを採用している。GitHub 上で 1 万以上のスター を集め、世界で最も人気のあるオープンソースアセット管理ツールだ。

💡 代表的なユースケース:チームにノート PC が 10 台、モニターが 5 台、ソフトウェアライセンスが 20 個あるとする。誰がどのデバイスを使っているのか?どのライセンスが期限切れになりそうか?いつ折旧して廃棄すべきか?Excel で管理していては、いつか必ず破綻する。Snipe-IT はまさにこうした問題を解決するために生まれた。

主な機能一覧

機能 説明
📦 ハードウェアアセット管理 ノート PC、サーバー、スマホ、モニターなど、デバイスのライフサイクルを完全に追跡
🔑 ライセンス管理 ソフトウェアライセンスの購入日、期限通知、シート数追跡
🖱️ アクセサリ管理 マウス、キーボード、LAN ケーブルなど消耗品の在庫追跡
📋 貸出/返却 アセットを従業員にチェックアウト、チェックイン時に状態と備考を記録
📊 折旧計算 年間/月間でアセットの折旧価値を自動計算
🔌 REST API 完全な JSON API。Jenkins、Ansible、Jamf などのツールと連携可能
🌐 多言語対応 40 以上の言語をサポート(日本語を含む)
📱 モバイル対応 レスポンシブ Web インターフェース。スマホでもアセット管理が可能

Snipe-IT vs 商用ソリューション

比較項目 Snipe-IT(自前デプロイ) Snipe-IT Cloud JAMF Pro Freshservice
費用 完全無料 $399/年〜 約 $100/デバイス/年 約 $49/人/月
データ主権 自分のサーバー、自分で管理 クラウドホスティング クラウドホスティング クラウドホスティング
カスタマイズ性 完全にカスタマイズ可能 制限あり 高い 中程度
デプロイ難易度 Docker ワンクリックデプロイ デプロイ不要 MDM 設定が必要 SaaS ですぐ利用
適した規模 10〜1,000 台以上のデバイス 10〜500 台 50 台以上の Apple デバイス 50 人以上のチーム

Docker ワンクリックデプロイ

Snipe-IT は公式 Docker イメージを提供しており、Docker Compose を使えば 5 分以内でデプロイできる。

環境要件

  • Docker 20+ と Docker Compose 2+
  • RAM 2GB 以上(推奨 4GB)
  • ディスク空き容量 10GB 以上

ステップ 1:プロジェクトディレクトリを作成

BASH
mkdir -p ~/snipe-it && cd ~/snipe-it

ステップ 2:Docker Compose ファイルを作成

docker-compose.yml を作成する:

YAML
version: '3.8'

services:
  snipeit-db:
    image: mysql:8.0
    container_name: snipeit-db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword123
      MYSQL_DATABASE: snipeit
      MYSQL_USER: snipeit
      MYSQL_PASSWORD: snipeit_password_456
    volumes:
      - db-data:/var/lib/mysql
    restart: always
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  snipeit:
    image: snipe/snipe-it:latest
    container_name: snipe-it
    ports:
      - "8080:80"
    environment:
      # データベース設定
      DB_HOST: snipeit-db
      DB_DATABASE: snipeit
      DB_USERNAME: snipeit
      DB_PASSWORD: snipeit_password_456
      # アプリケーション設定
      APP_KEY: base64:CHANGE_ME_GENERATE_KEY
      APP_ENV: production
      APP_DEBUG: false
      APP_URL: http://localhost:8080
      APP_TIMEZONE: Asia/Shanghai
      APP_LOCALE: zh-CN
      # メール設定(任意)
      MAIL_PORT_587_TCP_ADDR: smtp.example.com
      MAIL_PORT_587_TCP_PORT: 587
      MAIL_ENV_FROM_ADDR: admin@yourcompany.com
      MAIL_ENV_FROM_NAME: Snipe-IT Admin
      MAIL_ENV_ENCRYPTION: tls
      MAIL_ENV_USERNAME: admin@yourcompany.com
      MAIL_ENV_PASSWORD: your-email-password
    depends_on:
      snipeit-db:
        condition: service_healthy
    volumes:
      - snipeit-images:/var/lib/snipeit
    restart: always

volumes:
  db-data:
  snipeit-images:

⚠️ 重要:APP_KEY は適当に入力してはいけない!事前に生成する必要がある。

ステップ 3:APP_KEY を生成

BASH
# 一時的なコンテナを起動してキーを生成
docker run --rm snipe/snipe-it:latest php artisan key:generate --show

# 出力例:base64:abcdef1234567890...
# 出力値を docker-compose.yml の APP_KEY に置き換える

ステップ 4:サービスを起動

BASH
docker compose up -d

# ログで起動状態を確認
docker compose logs -f snipeit

ステップ 5:Web インターフェースにアクセス

ブラウザで http://localhost:8080 を開くと、インストールウィザードが始まる:

  1. 環境要件のチェック(すべて緑色 ✓)
  2. 管理者アカウントの作成(ユーザー名、メール、パスワード)
  3. 完了!ダッシュボードにアクセスできる

🔒 本番環境の推奨設定:Nginx リバースプロキシ + Let's Encrypt HTTPS 証明書を使い、http://localhost:8080 を https://snipeit.yourcompany.com に変更しよう。


クイックスタート:5 ステップでアセット管理を始めよう

インストールが完了したら、以下の手順で最初のバッチのアセットを登録しよう。

ステップ 1:会社情報とブランディングを設定

Admin → Settings → Branding にアクセスし、会社ロゴのアップロード、サイト名とデフォルトタイムゾーンの設定を行う。

ステップ 2:アセットカテゴリを作成

Snipe-IT はカテゴリでアセットを整理する。Admin → Categories で以下を作成しよう:

カテゴリ名 タイプ 用途
ノート PC Asset MacBook、ThinkPad など
モニター Asset 外部ディスプレイ
ソフトウェアライセンス License Office、Adobe など
アクセサリ Accessory マウス、キーボード、LAN ケーブル
消耗品 Consumable 印刷用紙、インクカートリッジ

ステップ 3:ハードウェアアセットを追加

Assets → New Asset で以下を入力:

アセット名: MacBook Pro 14" M3
アセットタグ: MBP-2026-001     ← 一意の識別子。規則的な番号付けを推奨
カテゴリ: ノート PC
ステータス: Ready to Deploy(デプロイ準備完了)
場所: 本社オフィス
購入日: 2026-03-15
購入価格: ¥14,999
ベンダー: Apple Store
保証期限: 2029-03-15
モデル: MacBook Pro 14-inch M3 Pro
シリアル番号: C02XXXXX

ステップ 4:従業員に割り当て(Checkout)

アセット詳細ページで Check Out をクリック:

割り当て先: ユーザー(事前に People で作成しておく必要あり)
返却予定日: 2027-03-15(任意)
備考: 研究開発部の新規プロジェクト用
通知メールを送信: ✓

従業員がメールを受信して確認すると、アセットのステータスは Deployed に変わる。

ステップ 5:一括インポート

Excel スプレッドシートがある?Snipe-IT は CSV 一括インポートに対応している:

  1. Admin → Import → Download CSV Template
  2. テンプレートを使ってアセットデータを入力
  3. CSV ファイルをアップロード
  4. プレビューしてマッピングフィールドを確認
  5. Import をクリック

応用機能の実践

1. アセット折旧の自動計算

Snipe-IT は複数の折旧モデルをサポートしており、アセットの現在価値をリアルタイムで把握できる。

Admin → Depreciations で折旧ルールを作成:

名前: PC 3 年定額法
月数: 36(3 年)
折旧タイプ: 定額法

その後アセットにこのルールを関連付けると、システムが自動計算してくれる:

時期 元価値 折旧後価値 備考
2026-03 ¥14,999 ¥14,999 購入直後
2027-03 ¥14,999 ¥9,999 使用 1 年
2028-03 ¥14,999 ¥4,999 使用 2 年
2029-03 ¥14,999 ¥0 折旧完了

2. ライセンス管理と期限通知

ソフトウェアライセンスの期限が切れても誰も気づかない?Snipe-IT が監視してくれる。

ライセンスを追加:

名前: Microsoft 365 Business
ライセンスキー: XXXX-XXXX-XXXX-XXXX
総シート数: 25
割り当て済み: 18
購入日: 2026-01-01
有効期限: 2027-01-01
ベンダー: Microsoft
購入価格: ¥1,288/ユーザー/年

ライセンスが期限切れに近づくと、システムは以下を行う: - 📧 管理者にメールで通知 - 🔴 ダッシュボードに赤色警告を表示 - 📊 レポートで強調表示

3. カスタムフィールド — 必要な情報を何でも記録

Snipe-IT では、各カテゴリにカスタムフィールドを追加できる:

BASH
# Admin → Custom Fields で追加
フィールド名        タイプ       フォーマット
CPU モデル          テキスト
メモリ容量          テキスト
OS                 ドロップダウン   macOS, Windows, Linux
所属部門            ドロップダウン   研究開発部, 製品部, デザイン部
社内 IP アドレス     テキスト       ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$

4. レポートと監査

Snipe-IT には複数のビルトインレポートがある:

  • アセットインベントリレポート — すべてのアセットの完全リスト。ステータス/場所/カテゴリでフィルタリング可能
  • 折旧レポート — 期間別にアセットの折旧状況を統計
  • 未割り当てアセットレポート — 遊休アセットの一覧。「買ったけど誰も使っていない」を防ぐ
  • ライセンス期限切れレポート — 期限切れが近いソフトウェアライセンス
  • 監査レポート — アセット確認の履歴。誰がいつどのステータスを確認したか

5. API 連携の実践

Snipe-IT は完全な REST API を提供しており、curl や任意の HTTP クライアントで呼び出せる。

API トークンの取得: Profile → Generate API Token にアクセス

全アセットの取得:

BASH
curl -X GET "https://snipeit.yourcompany.com/api/v1/hardware" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

新規アセットの作成:

BASH
curl -X POST "https://snipeit.yourcompany.com/api/v1/hardware" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Dell XPS 15",
    "asset_tag": "DELL-2026-001",
    "model_id": 3,
    "status_id": 1,
    "rtd_location_id": 1,
    "purchase_date": "2026-07-30",
    "purchase_cost": "9999.00",
    "serial": "SN123456789"
  }'

CI/CD パイプラインへの統合 — 例:新员工の入社時にアセットレコードを自動作成:

PYTHON
#!/usr/bin/env python3
"""新员工入社時に IT アセットレコードを自動作成"""

import requests

SNIPE_URL = "https://snipeit.yourcompany.com/api/v1"
API_TOKEN = "YOUR_API_TOKEN"

def onboard_employee(name, email, asset_tag, model_id=1):
    """新员工にノート PC を割り当て"""
    headers = {
        "Accept": "application/json",
        "Authorization": f"Bearer {API_TOKEN}",
        "Content-Type": "application/json",
    }

    # 1. ユーザーを作成
    user = requests.post(f"{SNIPE_URL}/users", headers=headers, json={
        "first_name": name.split()[0],
        "last_name": name.split()[-1],
        "username": email.split("@")[0],
        "email": email,
    })

    if user.status_code != 200:
        print(f"ユーザー作成失敗: {user.text}")
        return

    user_id = user.json()["payload"]["id"]

    # 2. アセットを割り当て
    checkout = requests.post(
        f"{SNIPE_URL}/hardware/{asset_tag}/checkout",
        headers=headers,
        json={"assigned_user": user_id}
    )

    if checkout.status_code == 200:
        print(f"✅ {name} にアセット {asset_tag} の割り当てが完了")
    else:
        print(f"❌ アセット割り当て失敗: {checkout.text}")

# 使用例
onboard_employee("Zhang San", "zhangsan@company.com", "MBP-2026-015")

日常運用

データベースのバックアップ

BASH
# データベースをエクスポート
docker exec snipeit-db mysqldump -u snipeit -psnipeit_password_456 snipeit > \
  ~/backup/snipeit-$(date +%Y%m%d).sql

# 永続化データボリュームをエクスポート
tar czf ~/backup/snipeit-images-$(date +%Y%m%d).tar.gz \
  /var/lib/docker/volumes/snipe-it_snipeit-images/

Snipe-IT のアップグレード

BASH
cd ~/snipe-it

# 最新イメージをプル
docker compose pull snipeit

# コンテナを再作成
docker compose up -d snipeit

# バージョンを確認
docker exec snipe-it php artisan snipeit:version

よくある問題のトラブルシューティング

問題 解決方法
ページが 500 エラー docker compose logs snipeit で Laravel のエラーログを確認
データベース接続失敗 DB_HOST が snipeit-db(コンテナ名)になっているか、データベースが ready になっているか確認
メールが送信されない SMTP 設定を確認。ファイアウォールが 587 ポートをブロックしていないか確認
APP_KEY エラー キーを再生成し、フォーマットが base64:xxxx になっているか確認
ファイルアップロード失敗 snipeit-images データボリュームのマウント権限を確認

なぜ Snipe-IT に長期投資する価値があるのか

Snipe-IT は 2013 年のオープンソース化以来、13 年間にわたって開発が続けられており、GitHub 上のコントリビューターは 500 人以上にのぼる。Excel スプレッドシートや商用 SaaS と比較して、その優位性は明確だ:

  1. ライセンス費用ゼロ — 自前サーバーを構築すればすぐ使える。ユーザー数制限なし
  2. 完全なデータ自主性 — すべてのアセットデータは自分のサーバーに保存される
  3. アクティブなコミュニティ — Discord コミュニティやフォーラムで、多くのユーザーが経験を共有している
  4. 豊富な連携エコシステム — JAMF、Kandji、Jira、Google Workspace などの公式/サードパーティ製インテグレーションスクリプト
  5. 高い拡張性 — 10 台から 10,000 台のデバイスまで対応可能

Excel で会社のアセットを管理している場合、あるいは商用 ITAM ツールが高すぎると感じているなら、Snipe-IT が最も現実的な選択肢だ。