開発しているBlueskyクライアントアプリbsky-sh-cli (Bluesky in the shell)の新バージョンv0.10.0をリリースしました。この記事では本リリースに関して補足情報を記載します。
タイムラインやスレッドの表示を改善
以下のような変更をしています。
- タイムラインでポストのリプライ先ポストを表示
- リプライ関係のあるポスト同士を
|(縦棒)で接続表示
以下に実行例を示します。
- テキスト「ポスト」をポスト(
bsky post) - テキスト「リプライ」で1のポストにリプライ(
bsky replyここで既にリプライ結果表示としてポストの間の行にリプライ関係を示す|が表示されています) - タイムラインを1エントリのみ表示(
bsky timeline従来では[ViewIndex:1]のポストのみ表示されていましたが、その前にリプライ先[ViewIndex:1-1]のポストが表示され、ポストの間の行にリプライ関係を示す|が表示されています) - テキスト「ポスト」を中心にスレッド表示(
bsky threadポストの間の行にリプライ関係を示す|が表示されています)
ここではリプライが1つの場合ですが、同じポストに複数のリプライがあった場合は1つめのリプライのみ同様に表示され、2つ目以降のリプライは1つ空行を空けて|接続表示が行われます。
リプライ先やリポスト者のポスト補助情報表示
以下のような変更をしています。
- タイムラインでのリプライ先ポストがさらに他のポストへのリプライの場合、他のポストの投稿者のユーザ表示名を表示します。
- タイムラインでのポストが誰かのリポストの場合、リポスト者のユーザ表示名を表示します。
これらはbsky-sh-cliでの通常のポスト表示単位での1行目のViewIndex等を含むメタ情報行と、2行目のポストユーザ表示名・ハンドル・ポスト(インデックス)日時を含むヘッダ行の間に表示されます。
以下の実行例では[ViewIndex:12-1]と表示されているポストが他のポストへのリプライであり、そのリプライ先のポストのユーザを表示しています。ここではyouと表示されていますが、これはリプライ先ポストのユーザがbsky-sh-cliでのログイン者自身のためです。リプライ先が他のユーザであればそのユーザ表示名が表示されます。
以下の実行例では[ViewIndex:26]と表示されているポストがリポストされており、そのリポスト者のユーザを表示しています。ここではyouと表示されていますが、これはリポストしたユーザがbsky-sh-cliでのログイン者自身のためです。リポスト者が他のユーザであればそのユーザ表示名が表示されます。
1つ前の表示改善も、この補助情報表示も、bsky timelineやbsky threadコマンドが主な変更対象で、他のコマンド・ポスト系コマンドの結果表示・プレビュー表示等については処理が共通している部分のみ対応されており、その他の部分については将来対応予定になります。
ダウンロードインストーラ
これまでのbsky-sh-cliの導入方法は以下のようなものでした。
- 入手方法(いずれか)
- GitHubリポジトリから全ファイルをgit clone
- GitHubリポジトリのReleasesから全ファイルを含むアセット(ソースコードアーカイブ)をダウンロード
- インストール方法(いずれか)
- 入手ファイル群に含まれる
install.shを実行 - 手動で各種ファイルをディレクトリに配備して必要に応じてPATHを通す
ダウンロードインストーラでは、GitHubリポジトリの1ファイルのみを入手して実行することにより、アーカイブのダウンロード・展開・install.sh実行を行うことができます。コマンド実行例を以下に示します。
- ダウンロードインストーラの入手
curl https://raw.githubusercontent.com/bills-appworks/bsky-sh-cli/main/download-install.sh -O
- ダウンロードインストーラの実行
sh download-install.sh
OS環境の全ユーザが利用できるようにインストールするには、ダウンロードインストーラの実行はsudo sh download-install.shとしてスーパーユーザにて実行してください。
詳細はインストールドキュメントを参照ください。
インストールドキュメントにも記述していますが、一般的にcurl 【インストーラファイルURL】 | shの形式で提示されているインストール方法について知ったことがありますので以下に共有します。
bsky-sh-cliではinstall.shが1つ目の条件に、download-install.shが2つ目の条件に該当するため、前記のようにダウンロードインストーラの入手と実行のコマンドをワンライナーではなく分けて示しています。
(1) readコマンドによる入力待ちはsh標準入力実行では無視(スキップ)される
Unix系環境のreadコマンドは、シェルスクリプトでユーザの対話的入力(インストール先パス文字列の入力、実行確認待ちなど)として使われる場合があります。readコマンドが用いられているインストーラをshの標準入力として実行した場合、readコマンドでユーザの入力を待たずに次の処理が実行されるため、期待された動作となりません。
なおsh <(curl 【インストーラファイルURL】)とするとreadコマンドによる入力待ちが動作するようです。<と(の間に空白を入れるとエラーになります。
(2) curlコマンドダウンロードはsudo sh標準入力実行ではエラーとなる
【インストーラファイルURL】の内容では、さらに他のファイルをcurlコマンドでダウンロードするケースがあります。
そのようなインストーラでOS環境の全ユーザが利用できるようにインストールするためcurl 【インストーラファイルURL】 | sudo shのようにワンライナーで実行すると、ディストリビューションやパッケージ管理システムにもよると思いますが最近の環境ではセキュリティリスク上の観点からエラーとなるようです。
私が確認した範囲ではsudo sh <(curl 【インストーラファイルURL】)でもエラーになりました。以下の環境でエラーになることを確認しています(2024/8現在)。
- apt curl / Ubuntu Linux on WSL
- dpkg curl / Debian GNU Linux on WSL
個人的にはcurl 【インストーラファイルURL】 | shの方法、ましてやsudo shは中身も確認せずに行うのは忌避していますが、中身を確認したところで瑕疵や悪意を見つけるのは悪魔の証明になりますので、どこまで信用するかですかね…