0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Keytarについて詳しくなりたい

Posted at

はじめに

pnpm installの際にkeytarエラーが発生したことがきっかけとなり、本記事を書くことなりました。
個人的なモヤモヤ解消したいがために、keytarについて調査したことを簡単に以下まとめています。

Keytarとは何か?

一言で言うと「システムキーチェーンを扱うためのNode.jsモジュール」です。

キーチェーンとは?(AIに聞いてみました)

パスワードや暗号化キーなどの機密情報を安全に保管するための、ソフトウェアまたはハードウェアの仕組みです。 オペレーティングシステムやアプリケーションによって実装方法は異なりますが、共通の目的は、ユーザーが個々のパスワードを覚える必要性を減らし、セキュリティを向上させることです。

macOS、Linux、Windowsといった様々なOSのキーチェーンにアクセスするためのクロスプラットフォームのNode.jsモジュールです。 これにより、アプリケーションはプラットフォーム固有のキーチェーンAPIを意識することなく、安全にパスワードやAPIキーなどの機密情報を保存、取得、削除できます。
各OSでは以下のキーチェーンシステムを利用している模様です。

  • macOS: Keychain
  • Linux: Secret Service API/libsecret
  • Windows: Credential Vault

Keytarのインストール

npm install keytar

または

yarn add keytar

インストール後、keytarをインポートして使用できます。

const keytar = require('keytar');

Linux環境では、libsecretが必要になる場合があります。ディストリビューションによってインストール方法は異なりますが、Debian/UbuntuとRed Hat系を例として記載しておきます。

Debian/Ubuntu

sudo apt-get install libsecret-1-dev

Red Hat系

sudo yum install libsecret-devel

Arch Linux

sudo pacman -S libsecret

主要な関数

keytarは、パスワードの保存、取得、削除、検索を行うための主要な非同期関数を提供します。 全ての関数はPromiseを返し、エラーが発生した場合はrejectされます。

getPassword(service, account)
指定されたserviceとaccountに対応するパスワードを取得します。パスワードが見つからない場合はnullを返します。

setPassword(service, account, password)
指定されたserviceとaccountにパスワードを保存します。既存のエントリがあれば更新し、なければ新規に作成します。

deletePassword(service, account)
指定されたserviceとaccountに対応するパスワードを削除します。パスワードが見つからない場合はfalseを返します。

findCredentials(service)
指定されたserviceに対応する全てのアカウントとパスワードを取得します。配列[{ account: 'foo', password: 'bar' }]として返します。

findPassword(service)
指定されたserviceに対応するパスワードを取得します。アカウントは不要な場合に便利です。パスワードが見つからない場合はnullを返します。

使用例

以下、keytarの基本的な使用方法を簡単に書いてみました。
内容としてはhoge-appというサービスとhoge-userというアカウントにパスワードを保存し、取得後に削除しています。

const keytar = require('keytar');

async function main() {
  const service = 'hoge-app';
  const account = 'hoge-user';
  const password = 'hoge-secret-password';

  try {
    await keytar.setPassword(service, account, password);
    console.log('パスワードが保存されました。');

    const retrievedPassword = await keytar.getPassword(service, account);
    console.log('取得したパスワード:', retrievedPassword);

    await keytar.deletePassword(service, account);
    console.log('パスワードが削除されました。');
  } catch (error) {
    console.error('エラーが発生しました:', error);
  }
}

main();

まとめ

  • keytarは、Node.jsアプリケーションでシステムのキーチェーンを安全に操作するツール
  • クロスプラットフォームの互換性とシンプルなAPIにより、開発者は簡単に機密情報を管理できる
  • Linux環境ではlibsecretが必要になるケースがあることにも注意したい
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?