Skip to content

README ja

bills-appworks edited this page Sep 15, 2024 · 8 revisions

(リポジトリのREADMEとほぼ同内容です。メンテナンスの都合により差異が生じる場合があります。)

Bluesky in the shell

Bluesky CLI(コマンドラインインタフェース)シェルスクリプト実装

概要

Bluesky (bsky.social/bsky.app)をUnix系環境のシェルでコマンドラインから利用するためのツールです。

このツールは、sh:Bourne Shell系統のシェルスクリプト動作環境と、いくつかの依存ツールによって実行できることを目標としています。

現時点では開発中で、今後機能を充実していきます。

利用方法

GitHubㇼポジトリにある1ファイルをダウンロードして実行することにより、最新リリースアーカイブダウンロードからインストールまでが行われます。

スーパーユーザ(sudo実行またはrootユーザ)でインストールすると、全ユーザが利用できるように設定されます。一般ユーザでインストールすると、インストールしたユーザのみで利用できるように設定されます。インストール途中でインストール先等の確認が行われます。

GitHubリポジトリから1ファイルダウンロード:

curl https://raw.githubusercontent.com/bills-appworks/bsky-sh-cli/main/download-install.sh -O

スーパーユーザで実行する場合:

sudo sh download-install.sh

一般ユーザで実行する場合:

sh download-install.sh

上記の他にも、リリースアーカイブをダウンロードして中に入っているインストーラを実行する方法などもあります。

インストールの詳細はインストールドキュメントを参照してください。

インストール先のbinサブディレクトリの下にbskyというファイルがあり、これが起動コマンドです。

一般的なコマンドやシェルスクリプトと同様に、パスを指定してシェルからbskyコマンドを起動します。

特に設定していない状態では、提供ファイル群のbinディレクトリとlibディレクトリが、同じディレクトリ配下に存在することを仮定しています。

また後述の「必要ツール」に記載しているツールが実行可能であることが必要になります。

インストール後はbsky updateコマンドにより最新版へのアップデートが可能です。詳細はインストールドキュメントを参照してください。

チュートリアル

ログイン(サインイン)

最初にBlueskyにログイン(サインイン)します。

bsky login --handle <handle> --password <password>

<handle>には、利用しているBlueskyアカウントのユーザ名を指定します。ユーザ名先頭のアットマークは不要です。現時点ではメールアドレスによるログインはできません。

<password>には、ハンドル(ユーザ名)に対応するパスワードを指定します。パスワードにはアプリパスワードを使用することを推奨します。

--handle--passwordのいずれかまたは両方を省略すると、画面上にプロンプトが表示され、省略した対象を入力することができます。

タイムラインの表示

以下のコマンドラインを実行すると、最大50件の投稿(ポスト)のタイムラインが表示されます。

bsky timeline

1件の投稿は以下のようなフォーマットで表示されます。

[ViewIndex:<番号>]
<投稿者のユーザー表示名>  @<投稿者のハンドル>  <投稿日時>
<投稿内容>
Reply:<リプライ件数> Repost:<リポスト件数 Quote:<引用件数> Like:<いいね件数>

先頭のViewIndexに表示される番号は、投稿に対するいいね(ライク)や返信(リプライ)等を行うコマンドのパラメタで対象投稿を指定するために使います。

投稿(ポスト)

以下のコマンドラインを実行すると、投稿することができます。

bsky post --text '<投稿内容テキスト>'

画像は--imageオプションでローカルファイルを指定することができます。タイムライン等での表示は画像のURLのみになります。

返信(リプライ)

以下のコマンドラインを実行すると、表示した投稿に対するリプライをすることができます。

bsky reply --index <番号> --text '<Reply内容テキスト>'

--indexオプションの値として、先ほどtimelineコマンドで表示された投稿のViewIndex番号をリプライ先として指定します。

その他の機能

このツールは開発中ですが、他にもいくつかの機能が実装されています。

このツールの一般的なコマンドラインの書式は以下になります。

bsky <options> <command> <parameters>

ここまでのチュートリアルでは<options>は指定せず、login/timeline/postなどの<command>と、いくつかの<parameters>を指定してきました。

以下のコマンドラインで<command>一覧のヘルプを表示することができます。

bsky help

<command>別のヘルプは、以下のコマンドラインで表示することができます。

bsky <command> help

たとえばpostコマンドのヘルプは以下のように実行します。

bsky post help

Wikiコマンドラインリファレンスも参考にしてください。

現時点でできること(できないこと)の概要

  • できること
    • ログイン・ログアウト(セション情報(ログイン接続情報)の作成・削除)
      • 2FAに対応しています。
    • タイムラインやカスタムフィード(フィードジェネレータ)の表示
    • 投稿(ポスト)
    • 投稿(ポスト)に対する返信(リプライ)・リポスト・引用リポスト・いいね(ライク)
    • 指定ユーザのプロファイル表示やフィード表示
  • できないこと
    • 画像の表示(URL表示のみ実施)
    • ワードとタグによるミュート、特定ポスト非表示
    • ログインしていない状態での認証不要コマンドやAPIの実行
    • その他多くの機能

プロファイル

セション情報は複数同時に保有することができます。つまり、複数のアカウントを利用する場合に、接続中アカウントのログアウトをしなくても、接続を維持したまま他のアカウントへの接続(ログイン・その他操作)を行うことができます。

接続を指定するためには、コマンドで--profileまたは-Pオプションを指定します。

bsky --profile <プロファイル名> <command> <parameters>

<プロファイル名>の単位にセション情報が管理されますので、プロファイル指定を切り替えることによって、複数のアカウントに対する操作を切り替えることができます。

提供ファイル群以外のファイル

配備する提供ファイル群の他に以下のファイルを生成・利用します。このツールが不要になった場合には削除可能です。

  • $HOME/.bsky_sh_cli/ディレクトリ
    • このツールを実行すると、このディレクトリと配下にいくつかのファイルが生成されます。セション情報管理ファイルや、デバッグ情報ファイル(デバッグ機能有効時)などのファイルが格納されます。
  • $HOME/.bsky_sh_cli_rcファイル
    • このツールをカスタマイズする設定を記述するファイルです。デフォルトでは作成されません。提供ファイル群に含まれる.bsky_sh_cli_rc.sampleファイルがサンプルになります。このツールをカスタマイズしたい場合は、このファイルを名前を変えて$HOMEディレクトリに配備し、設定します。
  • /tmp/ディレクトリ配下へのファイル生成
    • 画像ファイルの添付等の一時的ファイル作成ディレクトリとして/tmp/ディレクトリ(システム設定によります)を利用します。

必要ツール

このツールではシェルスクリプトで用いられる一般的なUnix系ツールの他、以下のツールを利用しています。

実行環境やツールを提供・維持している皆様に感謝いたします。

  • curl
  • file (libmagic)
    • 画像利用時のみ
  • jq
  • sed (GNU sed)

APIラッパースクリプト

提供ファイル群のlib/api/ディレクトリには、app.com.等から始まる名前のファイルが存在します。これはBlueskyやAT ProtocolのAPIを呼び出すラッパースクリプトです。

これらのファイルを実行することにより、BlueskyやAT ProtocolのAPIを直接呼び出して、レスポンスを標準出力で得ることができます。

デフォルトでは実行権を付けていませんので、sh <APIファイル名>で起動したり、ファイルに実行権を付与してください。

接続情報(認証情報・セション情報)はbskyコマンドと同じセション管理ファイルに保存し、API間で自動的に共有されます。

現時点では開発中で、今後対応APIを充実していきます。

Note

  • APIファイルcom.atproto.server.createSessionは、認証成功後に返されるJWTをセション管理ファイルに保存し、他のAPIのほとんどはセション管理ファイルからJWTを取得して認証に利用します。セション管理ファイルは、デフォルトでは$HOME/.bsky_sh_cli/_bsky_sh_cli_session、プロファイル指定時は$HOME/.bsky_sh_cli/<プロファイル名>_sessionになります。
  • セションの自動更新は行われません。API実行結果の出力がExpiredTokenのエラーとなった場合は、以下の方法でセションを更新してください。
    • セション管理ファイルのSESSION_REFRESH_JWTの値を、APIファイルcom.atproto.server.refreshSessionのパラメタとして与えて実行
    • bskyコマンドの任意のコマンドを実行
  • プロファイルを指定するAPIファイルのパラメタはありません。実行時にシェル変数BSKYSHCLI_PROFILEで指定してください。
    • BSKYSHCLI_PROFILE=<プロファイル名> sh <APIファイル名>

免責事項

Warning

利用によって被ったいかなる損害・トラブルについても、作者は一切責任を負いかねます。

ライセンス

このソフトウェアはMITライセンスによってリリースしています。LICENSEを参照ください。