ID ManagerからKeePassへ移行

2026-11-04

Android iPhone Windows アプリ

参考情報

  1. ID・パスワード管理ツール ID Manager
  2. [I2K]IDM2KeePass 1.00
  3. KeePass Password Safe
  4. KeePassXC
  5. Keepass2Android Password Safe(Android用アプリ)
  6. Keepass2Android Offline(Android用アプリ)
  7. Keepass2Android は Offline 版がオススメ
  8. KeePassium Password Manager(iPhone/Mac用アプリ)
  9. パスワード管理ソフトをID ManagerからKeePassに移行する方法
    xmlと変換ツールを使う方法
  10. IDMからKeePassXCへの移行(パスワード管理ツール)
    csvで移行する方法

今までWindowsでパスワード管理アプリとして、ID Manager(IDM)を使ってきたのだが、KeePass(KeePassXC)へ移行した。

IDMは使いやすくて便利だったのだが、直接のきっかけは、妻がPCをWindowsからMacに換えたこと(妻の妹に勧められた(そそのかされた)のだが、わからないと大不満状態)。それとは別に、スマホでも見たいなぁというのは前からあった。

なぜKeePass(KeePassXC)を選んだかというと、データはローカルで管理、DBファイルは標準化された形式(.kdbx)とわかりやすい。フリー広告なし(オープンソース)、クラウドドライブで共有可能も理由。いちばんしっくりくる。

パスワード管理ソフトとしては、1Passwordが有名だが、なんとなくクラウドにデータを置くのはいやな感じがする(人間が古いので)。といいつつDropboxを使うのだが…。有料だし。

KeePassとKeePassXCはどちらもオープンソースで、DBファイルは共通に使える。KeePassはWindows用に開発されているが、KeePassXCはそこから派生したもので、Windows/Mac/Linuxで使えるらしい(まちがえていたらごめんなさい)。見た目は、KeePassXCの方が新しい感じで使いやすそう。

DBファイルは標準化された形式なので、対応するアプリを使えば、AndroidやiPhoneでも使える(参考情報5,6参照)


データの移行は、参考情報7に詳しく書かれている。

大まかな流れは、IDMでXMLファイルを書き出し→変換ツール(IDM2KeePass)でXMLファイルを変換→KeePassで読み込むとなる。

だいたいその通りでいいのだが、自分で確認した内容を記載する

  • KeePassはXMLファイルを取り込めるが、KeePassXCは取り込めない
  • KeePassXCはcsvファイルを取り込める(IDM2KeePassは使わない)が、フォルダ構造が失われる。もしかしたら、IDM2KeePassにcsvもあるので、経由したらいけるのかも
  • KeePassXCの方が見やすいので、使うのはKeePassXC
  • IDMの1つ目の項(Account ID)の内容は、KeePassXCでユーザー名の内容となる
  • IDMの2つ目の項(Password)の内容は、KeePassXCでパスワードの内容となる
  • URLはURLに
  • 下欄のコメントは、メモに
  • 有効期限は失われる(IDM2KeePass.exeが変換していない)
  • その他の項目は、詳細設定タブに、属性と値として取り込まれる
    (参考情報7には、Item1/Item2/serial number/e-mail/Fileは引き継がれないと書かれているが、引き継がれていた)
ということで、ほぼ引き継がれるのだが、以下の問題があった
  1. IDMで1つ目と2つ目の項に名前を付けていた場合(契約者番号、ログインPW等)、失われる
  2. 1つ目がID, 2つ目がPWでない場合(例:契約者番号前半、契約者番号後半等)、
    パスワード:契約者番号後半 となり表示がずれた感じになる

2については、数も多くないので、事前にIDM上で手動で修正することにした。

1について、気にしなくてもいいかもしれないが、後で見た時にわけわからなくと困るので、Pythonのスクリプトを作って、IDMからエクスポートしたXMLのメモ欄に追記されるようにした。

1つ目と2つ目がデフォルトの名前(Account ID, Password)でない場合は、コメント欄に下記を追加

account:記載されていた内容(契約者番号等) 

password:記載されていた内容(ログインPW等) 

空行


Pythonスクリプト

import os
import xml.etree.ElementTree as ET

def process_xml(input_file_path):
    # 出力ファイル名の生成(例: data.xml -> data_変換.xml)
    dir_name, file_name = os.path.split(input_file_path)
    base_name, ext = os.path.splitext(file_name)
    output_file_name = f"{base_name}_変換{ext}"
    output_file_path = os.path.join(dir_name, output_file_name) if dir_name else output_file_name
    
    # Shift-JISのファイルを一度Python側でテキストとして読み込む
    with open(input_file_path, 'r', encoding='shift-jis') as f:
        xml_content = f.read()
        
    # 文字列からXMLツリーを構築
    root = ET.fromstring(xml_content)
    
    # ルートから デフォルト値 (<defaultAccountName>, <defaultpasswordName>) を取得
    e_defaultAccountName = root.find('defaultAccountName')
    e_defaultPasswordName = root.find('defaultPasswordName')
    
    t_defaultAccountName = e_defaultAccountName.text if e_defaultAccountName is not None else ""
    t_defaultPasswordName = e_defaultPasswordName.text if e_defaultPasswordName is not None else ""
    
    # 任意の階層にあるすべての <item> 要素を再帰的に取得
    for item in root.findall('.//item'):
        e_account = item.find('account')
        e_password = item.find('password')
        comment = item.find('comment')
        
        lines_to_add = []
        
        # account の name 属性とデフォルト値を比較
        if e_account is not None:
            e_account_name = e_account.get('name', '')
            if e_account_name != t_defaultAccountName:
                # 文字列 "account:" を付与
                lines_to_add.append(f"account:{e_account_name}")
                
        # password の name 属性とデフォルト値を比較
        if e_password is not None:
            e_password_name = e_password.get('name', '')
            if e_password_name != t_defaultPasswordName:
                # 文字列 "password:" を付与
                lines_to_add.append(f"password:{e_password_name}")
                
        # どちらか(または両方)がデフォルトと異なる場合
        if lines_to_add:
            # 順序: account:xxx, password:xxx, 空行, 既存のコメント
            prefix = "\n".join(lines_to_add) + "\n\n"   # "\n"を区切りとして、リストを結合する。最後に改行2回で空行追加
            
            if comment is not None:
                current_comment = comment.text if comment.text else ""
                comment.text = prefix + current_comment
            else:
                # <comment> タグが存在しない場合は新規作成
                new_comment = ET.Element('comment')
                new_comment.text = prefix.strip() + "\n"  # strip() 文字列前後の空白や改行を除く
                item.append(new_comment)
                
    # 変換後のXMLを指定した出力ファイル名で書き出し (encoding='shift-jis')
    tree = ET.ElementTree(root)
    tree.write(output_file_path, encoding='shift-jis', xml_declaration=True)
    print(f"処理が完了しました。出力ファイル: {output_file_path}")

if __name__ == "__main__":
    # 処理対象の入力ファイル名を指定(スクリプトに埋め込み)
    target_file = "IDM.xml"  # 実際のファイル名に変更してください
    process_xml(target_file)

使い方は以下
  1. ID manager→ファイル→データのエクスポート→XMLファイルへの書き出し
  2. 1をこのフォルダへコピー(別でも3でpath指定すれば行けるはずだがためしていない)
  3. このスクリプトの最後の方の、target_file = "*.xml" をそのファイル名に変更
  4. VSCodeでターミナルを開く→ Command Prompt
  5. python .\IDM_KeePass1.py(上記のスクリプトのファイル名) → 元のファイル名_変換.xmlというファイルができる
  6. IDM2KeePass.exeで変換
  7. KeePassで、06でできたxmlファイルを読み込み
    (MacにはKeePassが無いので、Windowsで行う必要がある)
    まず、新規データベースを作ってからインポート
    1. File→New→OK→DBのファイル名指定→マスターパスワード設定
      →Database Settingsは何も入力せずにOK→KeePassエマージェンシーシート:skip
    2. File→Import→KeePass XML(2.*)を選択→06でできたXMLファイルを選択→Overwrite if newer(Create New IDsでもいいと思うけど)
    3. File→Save
  8. 7でできた *.kdbx をKeePassXCで読み込み
    1. 実験していたDB等がある場合は削除:データベース→データベースを閉じる
             実ファイルも削除(OS上で)
    2. (データベース→)データベースを開く→07でできた*.kdbxを開く
    3. 上の方にある自動でできたフォルダ(一般等)を右クリック→削除(ゴミ箱に移動)
  9. 移行で作ったxmlファイル(あれば.csvも)を削除(生のパスワードが書いてあるので)
    本当は、ただの削除ではなく、データの上書きをしたいところだけど…
スマホで共有する手順は以下
  1. 出来た*.kdbxファイルをDropboxに置く
  2. PCのKeePassXCのデータベースをDropboxの物に置き換える
  3. スマホでアプリをインストール起動し、Dropbox上の*.kdbxを開く
    私はAndroidで、KeePass2Android Offline を使った。Offlineにしたのは、Google Playのコメントに進めてあったから。あとで見ると、参考情報7が見つかり、同じような事が書いてあった。
    妻はiPhoneなので、KeePassium を使った。ちょっと忘れたが、サーバーを選ぶとDropboxが現れ、そこから *.kdbxを選んだ。
という事で、移行は完了した。
けど重要な注意点。DropboxとKeePassDBのパスワードは、どちらもKeePassDBの中に書いたが、片方でも忘れてしまったらアクセスできない。今回クラウドに置くこともあって、Dropboxも少し複雑に、KeePassDBもIDMの時より複雑にした。なんか忘れそう…。一応IDMで別アカウントを作って、そこに両方を追加した。でもそこのセキュリティーが低いと…。どうどう巡りだな。そこだけは、Google Password Manager(iCloudのキーチェーン)等に置いた方がいいのかなぁ…