【物語】

その日、僕たちの部署は浮き足立っていた。あらかじめ言っておくと、我が社の社長はとても几帳面な性格だ。いつも机の上は整理整頓されており、社長が作った資料はきっちりファイリングされ、資料棚に収まっている。

それでも社長は、メールや通販、経費アプリのパスワードをパソコンの横に張り出していた。しかも、恐ろしく綺麗に誰の目にも明らかに。Wordで作られたそのパスワード一覧表は恐ろしく美しくカラーで色分けされており2ページに渡っていた。

はじめて社長室を訪れた僕は、パソコンの操作方法を聞かれた時、かなり緊張していたが社長の美しいパスワード一覧表を見て驚いたものだ。たぶん、社員の何人かはこれまでも社長にその問題を伝えたことがあるだろう。しかし社長は、その美しいパスワード一覧表を止めなかった。

しかし、その日僕は改めて意を決して社長に伝えるべきだと思った。何度目かの緊急事態宣言が発令され、オフィスに出社する人は減っているのだが、逆に外部の人が社長室に入ったとしても人が少なく気付きにくくなっている。僕は緊張した面持ちで社長室を訪れた。そして、これまで思っていたことを言葉にする。

「社長、これまでずっと思っていたのですけど、パソコンの横に貼ってあるパスワードの一覧表、危ないですよ。誰かに盗撮されてしまったらどうするんですか?」

それでも、社長は笑って言った。「田中君、そんな怖い顔で言わなくても分かっているよ。でも大丈夫だよ。私は社員たちを信じているし、これまでずっとこれでやってきたんだから。逆にしっかり書いてなくて、パスワード分からなくなったらどうするの?それこそ大問題だよね。」

社長の危機意識をあおっても駄目だ。そこで、僕はプランAからプランBに切り替えた。とにかく、パスワードマネージャーの素晴らしさをプレゼンした。「社長、最近のパスワードマネージャーは、スマートフォンでもパソコンでも、どこに居ても安全にパスワードが見られるんですよ。」

それでも社長は、あまり乗り気ではなさそうだ。そこで、僕はプランCに切り替えた。「社長、僕がパスワードマネージャーへの入力を全部するので、しばらく使ってみてください。分からなくなったら、いつでも僕に電話してください。」

こうして社長はしぶしぶパスワードマネージャーを使うことを了承した。そして、自分で言い出したことでもあるし、僕は責任を持って社長のパスワードマネージャーを設定することになった。

つまり、僕の本日最大のミッションは、社長が作ったWordのパスワード一覧を、パスワードマネージャーに移し替えることだ。

しかし、社長が美しく色分けしたWordファイルは表を利用して作ったものではない。「▲サイト名、ID、パスワード、備考」の各項目を順に一行ずつ並べただけのものだ。

  • 社長がWordで作ったパスワードの一覧表

    社長がWordで作ったパスワードの一覧表

これを元にして、パスワードマネージャーに一つ一つ入力していくのは大変だ。軽く数えたところ100個以上のアカウントが並んでいる。サイト名、ID、パスワード、コピー&ペーストを300回以上も繰り返さなければならないかと思うと胃が痛くなる。

とは言え、こんなとき、どうしたら良いのか、僕はもう知っている! プログラミングでなんとかすれば、簡単にパスワードマネージャーに移せるはずだ!

しかし!

具体的にどうやってパスワードマネージャーに取り込んだら良いのか、僕には全く見当がつかなかった。こんな時は、プログラミングの達人であり、美人の太田先輩に頼るのが正解だ。

「太田先輩、教えてください!」

僕は太田先輩に詰め寄る。太田先輩はいつも通り嫌な顔一つせず教えてくれた。

「大抵のパスワードマネージャーはCSVファイルのインポートを備えているの。だから、一度IDやパスワードを列ごとに並び替えるプログラムを作ると良さそうね。」

太田先輩が教えてくれた手順は次のような手順だ。

  • (1) Wordに書かれたパスワード一覧をコピーして、Excelに貼り付ける。
  • (2) Excel VBAを使って「サイト名, ID, パスワード, 備考」とExcelの表の列に当てはまるように整形する
  • (3) 整形した表をCSVファイルで保存
  • (4) パスワードマネージャーのインポート機能で取り込む
これなら、なんとかなりそうだ。僕は頑張って作業して、CSVファイルを作成し、無事に某社のパスワードマネージャーにパスワード一覧を取り込むことに成功した。
  • パスワードマネージャーにCSVファイルを取り込んだところ

    パスワードマネージャーにCSVファイルを取り込んだところ

社長もすぐにパスワードマネージャーの良さに気付いたようだ。いろいろな端末でパスワードを確認できるし、たくさんのパスワードの中からキーワードで検索することもできる。そこで、晴れてパソコンの横に貼ってあったらパスワード一覧はシュレッダーにかかり安全に廃棄された。

後日、太田先輩と雑談していた時に、この件について太田先輩から褒めてもらった。

「田中君、よくあの頑固な社長を説得できたわね!すごいわ。ちょっと見直しちゃったよ。」

それを聞いた僕は、それからしばらくの間、太田先輩の言葉を頭の中で何度も反復し、だらしない顔でにやけていた。そして、それを見た同僚たちからは気味悪がられていた。しかし、その事にこの時の僕は気付いていないのだった。

【プログラム】

さて、皆さんの中にも、なかなかパスワードマネージャーを導入できないでいる方、いるのではないでしょうか。日々増え続けるWebサイトのアカウント情報ですが、それらの情報を安全に運用するには、信頼できる専用アプリで管理するのが安心です。

ところが、パスワードマネージャーに移行する最大の問題は「面倒くさい」に尽きると思います。もし既に何かしらの電子データの形式になっているなら、ちょっと整形するだけで、パスワードマネージャーに移行できます。

こちらから、今回のサンプルのパスワード一覧やサンプルプログラムをダウンロードできます。

もしも、今回、田中君の会社の社長がWordで作った一覧表のようなデータになっているなら、ちょっとプログラムを書き換えるだけで対応できる可能性があります。田中君の作業を少しずつ見てみましょう。

【手順(1)パスワード一覧をExcelに貼り付ける】

まず、Wordのパスワード一覧データをExcelに貼り付けます。

  • WordのデータをExcelに貼り付けたところ

    WordのデータをExcelに貼り付けたところ

【手順(2)プログラムでデータが綺麗に並ぶように整形】

次に、プログラムを作って、これを整形して「サイト名, ID, パスワード, 備考」と各列ごとに次の画像のように並ぶように整形します。

  • プログラムを作ってデータを整形して並び替えたところ

    プログラムを作ってデータを整形して並び替えたところ

そのために、ここでは、次のようなプログラムを作りました。Excelを起動したら、Sheet1にデータが入っていることを確認しましょう。そして、新規シートSheet2を作成します。それから、[Alt]+[F11]キーを押して、VBAエディタを起動します。そして、プログラムを記述して実行しましょう。

 Sub 整形処理()
    ' Sheet2のヘッダにヘッダ名を入れる
    Sheet2.Cells(1, 1) = "タイトル"
    Sheet2.Cells(1, 2) = "ID"
    Sheet2.Cells(1, 3) = "パスワード"
    Sheet2.Cells(1, 4) = "備考"
    TargetRow = 2
    ' Sheet1の最終行を求める
    MaxRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    Row = 1 ' 先頭行
    ' 繰り返し処理する
    While Row <= MaxRow
        ' サイト名を得る
        Title = Trim(Sheet1.Cells(Row, 1))
        Row = Row + 1
        If Title = "" Then GoTo Continue
        Title = Trim(Replace(Title, "▲", ""))
        ' ID
        ID = Sheet1.Cells(Row, 1)
        ID = Trim(Replace(ID, "ID:", ""))
        Row = Row + 1
        ' パスワード
        PW = Sheet1.Cells(Row, 1)
        PW = Trim(Replace(PW, "パスワード:", ""))
        Row = Row + 1
        ' 備考 - ただし、項目が存在しないときがあるので確認
        Memo = Sheet1.Cells(Row, 1)
        If InStr(Memo, "備考: ") > 0 Then
            Row = Row + 1
            Memo = Trim(Replace(Memo, "備考:", ""))
        Else
            Memo = ""
        End If
        ' Sheet2に書き込む
        Sheet2.Cells(TargetRow, 1) = Title
        Sheet2.Cells(TargetRow, 2) = ID
        Sheet2.Cells(TargetRow, 3) = PW
        Sheet2.Cells(TargetRow, 4) = Memo
        TargetRow = TargetRow + 1
Continue:
    Wend
 End Sub

ExcelのSheet1を順に上から下へ読んでいきます。その際、サイト名、ID、パスワード、備考となっている部分を取り出して、Sheet2に書き込んでいくというものです。

【手順(3)整形した表をCSVファイルで保存】

Excelのメニューで、「ファイル>名前を付けて保存」で保存形式を「CSVファイル」にしてファイルを保存します。

【手順(4)パスワードマネージャーでインポートする】

どのパスワードマネージャーを使うのかによりますが、大抵のパスワードマネージャーには、CSVファイルをインポートする機能がついています。

ちなみに、以下は、KeePassというオープンソースのパスワードマネージャーを利用してCSVファイルを取り込んでいるところです。

  • パスワードマネージャーのCSVインポートの画面

    パスワードマネージャーのCSVインポートの画面

以上の手順でパスワードマネージャーへの取り込みが完了しました。次の画面はパスワードマネージャーに取り込んだところです。

  • パスワードの一覧がパスワードマネージャーに取り込まれた

    パスワードの一覧がパスワードマネージャーに取り込まれた

まとめ

以上、今回はWordで作っていた紙のパスワード一覧表を元にして、パスワードをパスワードマネージャーに取り込むまでの顛末を紹介しました。

最近では、さまざまなパスワードマネージャーがあります。ブラウザとセットで使えるパスワードマネージャーにはGoogleパスワードマネージャーや、Firefox Lockwiseがあります。そして、本文で紹介したように、無料でオープンソースのパスワードマネージャーもあり、KeePassやBitwardenが有名です。有料で多機能な1PasswordやKeeperもあります。

パスワードマネージャーを使い始める時はちょっと大変ですが、専用ツールを使えば安全にパスワードを管理できます。まだ使っていないという方は、導入してみると良いでしょう。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。