Skyshare 更新履歴
1.5.5
Patch Changes
- SkyThrowの紹介ページの作成・リンクの追加
- Bluesky投稿専用クライアント「SkyThrow」の紹介をトップページおよび個別紹介ページを作成しました。
- 「SkyThrow」の更新に合わせてアプリページでの案内通知、および内容の更新をしていきます。
1.5.4
Patch Changes
- WebShareAPIが使えなかった場合に備え、本文をクリップボードにコピーする処理を追加しました。
- Android環境で画像とテキストが同時に利用できない暫定対処として、共有時に本文をクリップボードへコピーする処理を追加しました。
- 原因の特定・問題の対処が終了するまでは、お手数ですがXアプリへテキストの貼り付けをお願いいたします。
- WebShareAPIをBluesky投稿前に実行するように変更しました。
共有メニューでアプリ版Xを開いて投稿する
をONにした際、共有が完了してからBlueskyへ投稿するように変更しました。
- これにより、共有をキャンセルした場合にBlueskyにのみ投稿される事象が起こらなくなります。
- メッセージラベルをオーバーレイで表示するようにしました。
- 処理ステータスがよりわかりやすいよう、ステータスをオーバーレイして表示するように修正しました。
- エラー時のトラブルシュートに役立てるため、従来の位置のラベルも残しています。
1.5.3
Patch Changes
共有メニュー(アイコン)でアプリ版Xへ投稿をコピーする
から共有メニュー(アイコン)でアプリ版Xを開いて投稿する
に変更しました。
- 説明の際は
共有メニューでアプリ版Xを開いて投稿する
と表記します。
共有メニューでアプリ版Xを開いて投稿する
オプションのON/OFF時、ブラウザで利用可能かを判定するようにしました
共有メニューでアプリ版Xを開いて投稿する
オプションを実行する際、トグルスイッチを押した時点で可能であるかどうかを判定、不可能な場合はエラーを出力するように修正しました。
- WebShareAPIが無効ではないが、一部の機能が使えない場合(具体的には
navigator.share !== undefined && navigator.canShare({...}) == false
、エラーログを出した上でオプション自体は有効になるようになっています。
- Android上で画像添付時は本文が抜け落ちるといった事象が発生しており、これに対しての切り分けとしての対応になります。
- Android端末をご持参の方のフィードバック協力に感謝いたします。
Xの投稿はアプリを強制的に起動する
の削除予定を解除し、名称を変更しました。
- 共有機能によるXアプリの実行では一部オプションが使用できず、これまで通りアプリを起動するオプションはあったほうが良いとのフィードバックを受け、削除予定を解除しました。
Xの投稿はアプリを強制的に起動する
からデバイス固有URLを用いてポップアップを実行する
に名称を変更しました。
1.5.2
Patch Changes
- トグルの内容を改善しました
共有メニューからXへを開く
から共有メニュー(アイコン)でアプリ版Xへ投稿をコピーする
に変更しました。
Xを自動でポップアップする
からブラウザ版Xを自動でポップアップする
に変更しました。
1.5.1
Patch Changes
- 画像やURL添付がない場合、skyshareのURLが添付されてしまう問題を修正しました
- WebShareAPIを利用する際に、URLの設定や画像の添付がない場合にskyshareのURLが入ってしまっていました。
- テスト漏れです。画像添付送信のチェックしかできていませんでした。ご不便おかけしました。
1.5.0
Minor Changes
- オプション名を変更しました。
- WebShareAPIに対応し、Xへの画像データの直接受け渡しが可能になりました!
共有メニューからXを開く
オプションが選択可能になりました。
- 共有メニューが開くのでXを選択してください。
- この方法で対応をした場合、画像をXアプリへ直接転送可能になります。
- これをONにすると以下のオプションが強制的に変更されます。
Xを自動でポップアップする(Xを自動で開く)
がOFFになります。共有メニューからXアプリを起動してください。
Xへの画像は自身で添付する
がONになります。
- 共有をキャンセルした場合、
Xへの画像は自分で添付する
がオフの状態の投稿プレビューが開きます。
- 動作確認状況は以下です。
- iOS 17.4.1/MacOS Sonoma(実機)にて投稿までの動作を確認しています。
- Android 14.0(Emulator)にて、共有メニューが表示される箇所まで確認しています。
- Windows 11の
Chrome/Edge
にて、共有メニューが表示される箇所まで確認しています。
- Windowsブラウザについては共有のキャンセルを検知できないため、共有をキャンセルした場合プレビュー画面が開きません。
- Windowsの
firefox
はWebShareAPIに非対応なので、利用できません。
Xの投稿はアプリを強制的に起動する
オプションが削除予定になりました。
- WebShareAPIの採用により、今後はXアプリでの投稿はWebShareAPI、Xアプリ非導入環境の場合はintentという棲み分けを行います。
- 当サイトについての
必須環境(最低限の動作確認が可能な環境)
を更新しました。
- バグ対応する体力が残っていないため、申し訳ありませんが推奨環境での利用をご検討ください。
- 検証自体は上記でも行っているように、実施可能な範囲で実施していきます。
【Collaborator/Contributor向け情報】
1.4.13
Patch Changes
- 一部のウェブサイトで、特定のユーザーエージェントのためにOGP画像が取得できないことがあるバグの修正しました。
- 一部のウェブサイトではユーザエージェントによってはOGP画像の取得に関して取得ができなくなるといった仕様があるようです。
- 一方
X.com
などでは、特定のユーザエージェントを指定しなければOGP画像の取得ができません。
- 本修正では、リクエスト先のオリジンによってユーザエージェントを変更する処理を追加しました。
- ZEKE/じーく氏(@zeke320.bsky.social)が発見・対応してくれました!ありがとうございます!
- 利用者のユーザエージェントを利用することに関して、プライバシーポリシーへ内容を追記しました。
1.4.12
Patch Changes
- Androidでのみ、Skyshareを共有先に選べるようになりました。
- Android上でPWAインストールをした場合、Skyshareを共有先に選べるようになったようです。
- Androidシミュレータ上では動作しなかったため、コラボレータによる実機検証を行っていただきました。
- 自動で共有対象のタイトル・URLの差し込み、OGPの取得処理もinvokeするようにしました。
- 実装はおなじみZEKE/じーく氏(@zeke320.bsky.social)に実装していただけました!ありがとう!
- iOSについては、本技術の基盤となっているWebアプリマニフェストの
share_target
メンバに非対応であるため使えません。
【Collaborator/Contributor向け情報】
- OSSとしてのSkyshareのフロントエンドのコード品質が大きく向上しました!
- コードルールに沿ってにプログラムは修正され、フォーマッタによって一定の規則に基づいた整形がされました!
- また、フォーマッタをビルダーに統合し、ある程度のコードを自動で整形・ブランチを修正するようになりました。
- こちらも8割9分ZEKE/じーく氏(@zeke320.bsky.social)に実装していただけました!感謝....
- 一方バックエンドのコードについてはまだ無法地帯なため、今後、同様にルールの制定を行い修正をしていきたいと考えています。
- また、現在のアーキテクチャ自体を改修することも検討・調査中です。
1.4.11
Patch Changes
- iOSからリンクカードの添付が出来なくなってしまっていた不具合を修正しました。
- v1.4.10においてfirefox対応した部分がiOSと相性が悪かったため、MimeTypeの設定方法について条件分岐を追加することで対応しました。
Blob
にMimeType
が設定されているブラウザではこの値を、設定されていない場合はContent-type
ヘッダを利用するという動作になりました。
1.4.10
Patch Changes
- Firefoxにてリンク埋め込みが正しく投稿できない問題を解消しました。
- Firefoxでは、ChromeやSafariと異なりRespose headerに含まれる
Content-type
からBlobへMimeTypeは設定されない仕様となっていました。
- APIの実行後、Respose headerから
Content-type
を取得し、明示的にMimeTypeをセットしたBlobを返却するよう修正しました。
1.4.9
Patch Changes
- フランス語・ヒンディー語の言語コードを追加しました。
- Now you can use Français or हिन्दी language code for post.
- 水面下でコードの改善を粛々と進めています。
1.4.8
Patch Changes
- ポルトガル語・ポーランド語・ドイツ語の言語コードを追加しました。
- Now you can use Portuguese, Polski or Deutsch language code for post.
1.4.7
Patch Changes
【Collaborator/Contributor向け情報】
atproto_api/resolveHandle.ts
におけるエラーハンドリングを改善しました。
- これまでは
atproto_api
配下の関数自体もatprotoの返り値に合わせて{error,message}
を含むリスポンスを行っていましたが、この応答を作成するため、Typescriptの型として不適切な設定(正常リスポンスと異常リスポンスの交差型)を行っていました。
- ESLintの指摘に対応するためこれをやめ、関数自体が
Error
をスローすることが正とするように変更しました。
- そのため、今後は関数の呼び出し側にエラーハンドリングを委ねる形をとります。エラーメッセージなどの取得については、これまでの直接の返り値ではなくスローされる
e: Error
型で取得可能です。
- この変更方針は、
atproto_api
配下のコードにも適応していきたいと考えています
- そもそも
atproto_api
のコード自体、公式クライアントへ置き換えたいと考えています: Issue #15
- その他、関連箇所のコードに
npm run fix
をかけました。
- 許容した方がいいかな、と考えている
@typescript-eslint/no-misused-promises
ルール以外のwarning/errorについては取り除きました。
1.4.6
Patch Changes
1.4.5
Patch Changes
- OGPメタデータの取得周りの改善を実施しました!
- これまでHTMLコードを取得した内容を正規表現を用いていましたが、これをHTML Parserライブラリ
cheerio
を採用しました。
- X.comなど、メタデータが正しく正規表現にマッチしないサイトについても対応できるようになり、設定可能範囲がひろがりました。
- So Asano氏(@so-asano.com)が対応してくれました!計画よりずっと楽に実装していただけて助かりました。ありがとう!
【Collaborator/Contributor向け情報】
- ブランチの管理をGithub Actionsを用いてより厳格化しました。ZEKE/じーく氏(@zeke320.bsky.social)、ありがとう!
- PRリクエストのマージ先は
develop
に固定されます。追加機能を作成していただけた各担当者の変更がコンフリクトしていないか・デグレーションしていないかなどを、一度ステージング環境で確認したいためです。
- PRリクエストは
preview
系ブランチで実施する必要があります。実機環境上でビルドが可能であったという前提のもと、PRリクエストのレビューを行いたいためです。
1.4.4
Patch Changes
- スマートフォン等のユーザビリティに試験的改善を加えました。
- Postの入力スペースにカーソルをフォーカスした際、ヘッダーが隠れる位置まで自動的にスクロールするコードを追加しました。
- 時々動作しないこともあり挙動不審であるため、試験的導入になります。
- 根本的な解決については、UIの整理等で実施する予定です。
- 今回の修正もSo Asano氏(@so-asano.com)が対応してくれました!ありがとう!
- その他、各種ページのレイアウト調節を実施しました。
【Collaborator/Contributor向け情報】
- Linter/Formatterを導入しました。
- 現在は導入のみで、fixについては未実施の状態になります。
- fix対応は各Contributorが対象のファイルを修正する際に実施していただき、少しずつ修正していければいいなと考えています。
- また、各種設定についてはignoreするよう、設定値を更新しました。
npm run fix ./src/...
により、フォーマッタとリンターが動作します。対応時はご活用ください。
Prettier
についてはVSCode拡張を導入することでShift+Opt(Alt)+f
で自動整形が可能です。
- 導入にあたってルールの作成・設定値の定義をZEKE/じーく氏(@zeke320.bsky.social)が実施してくれました!ありがとうございます!品質のよいコードを作っていきましょう。
1.4.3
Patch Changes
- 下書き機能が追加されました!
- ポストの内容をブラウザへ保存可能になりました。文字のみ対応しています。
- これはブラウザへのデータ保存領域である
LocalStorage
へのデータ保管が最大5MBまでしか対応していないためです。
- ブラウザ保存であるため、異なるデバイス上では下書きは共有されません。データベースを用いた下書きのクロスデバイス対応は検討中です。
- ポストにXへの投稿時の文字数を表示する追加を実施しました。
- Blueskyへの投稿文字数だけでなく、Xへのポストの文字数を表示しました。
- XではURLは約11文字としてカウントされており、これも反映しています。
- 0.5文字の扱いがわからなかったため、切り上げ処理を行ない文字数を少し多めに見積もっています。
- 上記二件、So Asano氏(@so-asano.com) が提案・開発協力をしてくれました。ありがとうございます!!
Collaborator
としても参加していただけました!みなさんが十分に活躍できるような場を作っていきたいと思っています。
【Collaborator/Contributor向け情報】
PostForm.tsx
からおおよその関数を撤去し、基本的にコンポーネントに関数を持たせる設計に作り替えました。
- 是非はわかりませんが、コンポーネントで処理が閉じている方が可読性は高いのかなと考えこのような方向に修正しています。
- その他、
common
コンポーネントとしてOverlayDialog.tsx
を追加しました。
common
コンポーネントは汎用的に使用可能なコンポーネントです。
1.4.2
Patch Changes
- 投稿ボタンのレイアウトの修正しました。
- 公式クライアントのレイアウト修正に合わせて、ボタンの表示を修正しました。
【Collaborator/Contributor向け情報】
- 内部コンポーネントの配置替えを行いました。
utils
に集約されていた内容をenv
、lib
などに再配置しました。
utils
は本プロダクトや本プロダクト環境に依存せず使える関数で、基本的にブラウザ上で実行する関数です。
NodeJS
やCloudflare Worker
バックエンドなどに依存せず、トランスパイルができる前提で実装されます。
lib
は本プロダクトに関する内容や、本プロダクト環境に依存する関数です。
- 現在はブラウザ上で動かす内容・バックエンドのみで動作する内容が混同しています。これは改善予定です。
env
には本プロダクトに関する固定値や環境依存変数が格納されています。
- 現在はブラウザ上で動かす内容・バックエンドのみで動作する内容が混同しています。これは改善予定です。
- 上記の情報は未解決部分の整理実施後
Readme
への記載予定です。
1.4.1
Patch Changes
- URL入力時、http(s)://の直後にスペースキーが挿入された場合にURLとして検知されてしまう問題を修正しました。
- テキストのfacet検出の仕組みで、誤った正規表現が用いられていたことが原因で、スペース文字や改行文字が
//
直後も検出対象に含まれてしまっていました。
- ハッシュタグの記録についても同様の動作となっていたため、これを修正しました。
- レイアウトの微修正を実施しました。
- リンクカードの取得時、タイトルや説明などのメタ情報は、リンクカード画像の外に表示されるように修正しました。
- よく使うタグ機能の使い勝手を改善しました。
- テキストが何も入力されていない場合および、テキストの文末にすでに改行記号・またはスペースが入力済みの場合はハッシュタグより前にスペースが入らないようにしました。
- よく使うタグ機能のバグを修正しました。
- タグの判定範囲に
#
が余分に含まれてしまっており、#hashtag
の投稿を実施すると##hashtag
がよく使うタグとして登録されてしまう事象が発生しており、これを修正しました。
1.4.0
Minor Changes
- OGP取得の手動化に対応しました!
- OGPの取得をポスト投稿前に確認・任意設定に対応しました。
http://
もしくはhttps://
から始まる文字をURLとして認識し、最後に検出したURLをリンクカード生成対象として認識します。
- Blueskyにおいては、そもそもリンクカードとリンクを別々に扱うことが可能なため、URLを入力→リンクカードを取得→URLを削除 の手順を踏むことで、投稿にスマートにリンクカードを挿入できます。
- この操作が行われた場合、X向け投稿には別途URLが差し込まれます。XはURLがないとリンクカードが設定できないためです。
- その他、細かなレイアウトの調整を実施しました。
- Xの投稿プレビューにおいて、リンクカードのアスペクト比が誤っていたため、これをXの仕様に乗っ取った設定に修正しました。
【Collaborator/Contributor向け情報】
- 今回のアップデートにて、投稿フォームのプレビュー画面にOGP画像を表示させるため、データの扱いを大幅に改修しました。これまで
Array<Files>: imageFiles
と定義していた変数はMediaData
としてより広い役割を持つようになりました。MediaData
型はLinkCard
とImages
、メディアが存在しない場合のnull
のユニオン型で、以下のように定義されています。
export type MediaData = LinkCard | Images | null;
type LinkCard = {
type: "external";
images: Array<{
blob: Blob | null;
}>;
meta: ogpMetaData & {
url: string;
};
};
type Images = {
type: "images";
images: Array<{
alt: string;
blob: Blob;
}>;
};
- これまで
Array<File>
型で定義していた変数はImages.images.blob
に、Blob
型として配置されています。これはプレビューの作成や実際のcreateRecord
の際にFile
型である必要がないためです。
- 代わりに(画像の入力時に受け付けた)
File
型は即座にBlob
型に変換され、このデータがそのままuploadBlob
APIに用いられます。かなりオーバーヘットを減らせたのではないでしょうか。
- 画像の圧縮処理についても画像の入力時点ではなく、
createRecord
の直前に実行するようにしました。OGP画像がBlueskyのデータサイズの受付上限に到達する心配が、これにより無くなりました。
handlePost
はcomponents/Client/bsky/buttons/PostButton.tsx
へ移動しました。
utils/recordBuilder
についても、今後atproto
のフレームワークを採用したいという意志から廃止し、PostButton.tsx
内部から直接utils/atproto_api
の関数を呼び出しています。
- まだ最適化が済んでいないコンポーネントが多数存在しますが、特殊な事情がない限り、基本的には処理はこれを担当するコンポーネント内で閉じているべきであり、他のコンポーネントに値を渡す当を実現したい場合は、
callback
等を用いて疎結合にすべきだという方針で、作り替えていこうと考えています。
- 一部のType型と連動する変数群をClass型に再定義しました。
A
値が決定した時点でB
値も決定するといった変数において、Type型でそれぞれを列挙するのはコードとして難解であると考えたためです(ただ、もっと上手いやり方があるかもしれません...)
1.3.5
Patch Changes
- クリップボードから画像ファイルや、画像がペースト可能になりました!
- PC(Windows/Mac)の場合に、ファイルの
Ctrl(Command)+C & Ctrl(Command)+V
によるペーストをサポートしました。
- クリップボードに保存された画像データ(PrintScreenや、Command+Control+Shift+3などの結果)のペーストも可能です。
- ZEKE/じーく氏(@zeke320.bsky.social)、今回もありがとう!PCユーザーの環境が良くなってるのはほぼ彼のおかげです。確認時間かかってすまんかった...
1.3.4
Patch Changes
- AliexpressにおいてOPGが取得できない問題(Issue #43)に対処しました。
- OGP取得先Webサイト上から情報を取得する際のHTTPヘッダを調節しました。
Cache-Control
にno-cache
を付与しました。これが起因だったのかは不明ですが、少なくともOGP取得が成功しやすくなっているように思われます。
- この変更によりMacOS/SafariとWindows/Chromeの違いが発生していた事象が解消したと思われます。※Githubコメント
- サーバ側のキャッシュクリアの実施も影響しているかもしれません。残念ながらリダイレクトの根本原因がわからず、確たる情報として発信できませんでした。
1.3.3
Patch Changes
- Spotifyで正しくOGPが取得できないバグを修正しました。
- 原因はOGP取得時のHTTPリクエストのパラメータ不足でした。Spotifyではリクエストヘッダの"Allow-Language"パラメータを参照してロケーションを確定していました。
- Spotifyではこのパラメータのないリクエストをreject(
403 Forbidden
にしてしまう)
する処理が行われている様子でした。
- 上記に対して、一旦"ja"(日本語ロケーション)を固定値として指定し対応しました。
- 本パラメータは今後、ポストに設定するlanguage情報を参照するよう改修する予定です。(Now avalable jp location only, but it will fix to refer language of your post.)
1.3.2
Patch Changes
- PCブラウザ向けにCtrl+Enter(Command+Enter)での投稿に対応
1.3.1
Patch Changes
- Xへの投稿プレビュー画面において添付画像が正しく表示されない不具合を解消しました。
- 原因はHTMLエスケープ処理によるものでした。HTMLは展開される際に、例えば
&
といった特殊記号は&
といった文字列にエスケープ処理が行われます。
- 詳細な情報を確認したところ、Astroにてページを生成する際、レンダリングスペースで定義された変数は自動的にエスケープ処理が行われる仕様でした。
- 検証したところ、データベース上やヘッダのコードブロックでの読み込み時点ではエスケープがされておらず、
<meta>
タグ内部のパラメータとして定義する際にエスケープされました。HTML要素の子要素としてもエスケープされなかったため、この挙動はAstro側がパラメータをよしなにしてくれた結果として解釈しました。
- 以上よりページ側に責はない(他サイトでもエスケープがされている可能性が高い)とし、Metadataを取得する側でエスケープ処理を実施する旨のコードを追加し、不具合を解消しました。
- CHANGELOG上のpreブロックが、枠を飛び出す表示の問題を修正しました。
1.3.0
Minor Changes
1.2.1
Patch Changes
- 投稿に対してNSFW等を含むラベルを付与できるようにしました。
- Skyshareではとりあえず代表的だと思われる
sexual
、nudity
、porn
の他、spoiler
(ネタバレ)、!warn
(一般的な警告表示)に対応します。
- lexiconの定義には多くのラベルが存在していますが、対象を絞っています。オプションが増えすぎると、選ぶ手軽さが減ってしまうためです。
- 実験的機能のレイアウト箇所を変更しました。
- 特に実験的機能のフラグは頻繁に変更するような項目でもないと思われるためです。添付画像プレビューの下あたりに移動しています。
- 実験的機能に
via
の付与が設定可能になりました。
via
は投稿がどのようなクライアントを使っているのかを示す識別子で、旧Twitterが過去非公式クライアントを多く受け入れていた時代に、via芸たる遊びが行われていました。
- 現在Blueskyでは
via
は表示されませんが、例えばSkyshareを使ったポストをミュートしたり、逆にSkyshareを使ったポストのみを絞り込むなどに使えるかも知れません。
- 現在Blueskyではこのパラメータの付与は必須ではないため、任意で付与できるようフラグを追加した形になります。
1.2.0
Minor Changes
- 公式クライアントがハッシュタグに対応したため、これに追従しました。
- ハッシュタグは正確には
facet
の一種で、リッチテキストの装飾記号としてBlueskyでは処理されます。
今回のアップデートにて、#
または#️⃣
を先頭に含む文字列パターンに対して、以下のfacet
をRecord内に定義するようにしました。
index: {
byteStart: number,
byteEnd: number,
}
features: [
{
$type: "app.bsky.richtext.facet#tag",
tag: string
}
]
- 現在、ハッシュタグの区切り文字について検討中の状態となっており、区切り文字に空白記号/改行記号のみを採用しています。
- そのため、公式クライアントでは対応していない
#C#Programing
といったハッシュタグ自体を含むハッシュタグや、#0
といった数字から始まるハッシュタグが許可されています。
これらは少なくともこの2種の記法はbsky.appでは許可されていません。
- この仕様はX.comでのハッシュタグとの共通性を考慮すると不適切であるため、今後のパッチアップデート等で改善予定です。
- ハッシュタグの履歴保存および入力補助機能を追加しました。
- Skyshareから投稿したハッシュタグ付き投稿について、最大8個のタグがブラウザに保存されるようになりました。
ブラウザへの保存はJsonのlist型をBase64エンコードしています(以前追加したログイン情報保持の機能と根本的に同じ仕組みです。)
- 保存されたタグは、投稿画面にてボタンで表示され、ハッシュタグ入力ショートカットとして利用することが可能です。
1.1.10
Patch Changes
- OGPページ削除の際にページのみではなく、OGPカードも削除するようにしました。
- これまでOGPページについては削除処理によってデータをデータベースから削除していましたが、OGP画像自体も削除対象に含めました。
- 一部の関数にJSDocを設定し、コードの可読性を向上させました。
- 今回対応した関数は主にOGPジェネレータに関する部分のみです。
- Blueskyクライアント(
atproto_api
ディレクトリ関連)は、現在公式クライアント@atproto/common-web
の採用検討中なため、保留にしています。
- Xへの投稿にOGPリンクが含まれる場合、これを改行で追加するよう修正しました。
1.1.9
Patch Changes
- AT Protocolの更新により、画像の投稿ができなくなっていた不具合を修正しました。
- 原因は
app.bsky.embed.images
lexiconの型変更が、blueskyのPDSに適応されたためでした。
- 2023/04のコミット7f008c0により、ポストに画像を添付する方法は以下のように変更されました。
2023/04/01以前:
image: {
cid: string,
mimeType: string
}
2023/04/01以降:
image: {
$type: "blob",
ref: {
$link: string
},
mimeType: string,
size: number
},
image
object型の内容はUploadBlob
が返却するblob
型準拠となっており、当サイトで使用していた型は日本語のAT Protocol技術記事を参考にした古い内容だったため、古い情報をRecordへ登録していました(legacy blob ref
の根本原因)
- しかし、本エラーは今日まで発生しませんでした。これは、BlueskyのPDS側がこの形式を受け入れていた(lexiconの定義は変わっていたが、PDSでは従来の形式に置き換えていた)ことが原因だと考えられます。
- 2023/02/23朝7時ごろに 6dfc899 がマージされました。新しいlexiconの型情報でPDSが検証されるようになったことから、従来のObject型がエラー判定とされました。(
Legacy blob ref at ...
の出力の正体)
- 以上より、Skyshare側も新しい形式に追従し、createRecordのエラーを解消しました。
1.1.8
Patch Changes
- 投稿へ画像を一枚ずつ画像を追加できるように改修しました。
- 画像をポストに添付すると一枚ずつ追加されます。4枚以上追加される場合は、既存の画像を残し、超過分を無視します。
- また、追加画像を一枚ずつ除去できるようにしました。画像のプレビューの (✖️) ボタンを押していただくと、その投稿から添付画像を撤去できます。
- 今回の改修により画像を1枚ずつ処理できるようになり、個別の画像に情報を差し込めるようになったため、機能リクエストIssue#8(画像へのAlt付与の要望)の対応を実施しました。Thanks to contribute!
- Altは画像プレビューの (Altを設定) を押していただくと、ダイアログが開き設定が可能です。
1.1.7
Patch Changes
- サイトマップを改修しました。当サイトが対応可能な環境について明記しました。
- これまでのAboutページをFeatureページに分断し、詳しいサービスの仕様のみをAboutページに記載しました。
- ID/APWをブラウザへ保存するオプションを追加しました。
- オプションをONにした状態でログインを行うと、ブラウザのLocalStorageにID/APWをBase64 encodeしたデータが保存されます。
- これによりセッションが終了しても、ブラウザに保存された上記の情報を用いることでログインを簡略化します。
- 挙動としては ブラウザに保存されたリフレッシュトークンが有効な場合はセッションを再開 → ID/APWがブラウザに存在する場合はこれを用いて新規セッションを開始 という動作をします。
- ログイン画面以外では従来通り、セッションの利用可能判定のみを実施します。投稿画面を開くことにより、初めてブラウザに保存されたログイン情報を参照し、ログインを試みます。
- オプションがOFFの場合にブラウザに保存する情報は従来通り、セッションの再開を行うためのリフレッシュトークンのみ保持します。
1.1.6
Patch Changes
- 実験的な機能に「Xの投稿はアプリを強制的に起動する」フラグを追加しました。
- Android環境などでBlueskyへの投稿後、Xの投稿画面を開く際に、アプリケーションが開く場合と内部ブラウザが開く場合があるという事象が発生していたようです。
- これまでXの投稿画面を開く場合は、
twitter.com/intent
に一括でアクセスしていましたが、Android端末ではこのURLが正しく機能しない場合がある様子でした。
- 上記に対してintentの機能をWebではなく、OS側で処理する分岐を追加しました。本対応は「Xの投稿はアプリを強制的に起動する」フラグをONにすることで動作します。
- アプリがインストールされていない環境で「Xの投稿はアプリを強制的に起動する」フラグがONになっている場合、正常に動作しません。本フラグは必ずアプリがある場合のみ使用してください。
- 本フラグがOFFの場合も、アプリがインストール済みの場合は基本的にはアプリが優先して開かれます。アプリがインストールされていない場合はブラウザ上でポップアップが開きます。
1.1.5
Patch Changes
- 投稿時、ポストに言語のメタデータを付与するオプションを追加しました 。
- とりあえず日本語・English・中文・한국어に対応しました。
- これはあくまで投稿に対してメタデータを含め、Feedなどに表示できるようにするための情報であり、今後の当サイトの多言語対応に関するロードマップとは関係ありません。
- iOS16.4以前の端末で、Skyshareが一切動作をしなくなる問題を解消しました。
- 原因となった関数はversion 1.1.0から追加された外部URLの埋め込みを行うための二種の関数
getMeta.ts
およびgetOgp.ts
でした。
- 外部URLの埋め込みのため、埋め込み先へアクセスを行い、クライアント内でHTMLの構文解析を行うのですが、この処理にあたって正規表現を使用しており、「肯定後読み」と呼ばれる処理
(?<=)
がiOS16.4以前では使えないという状況でした 。
- そのため、正規表現から本処理を別の同等の処理に置き換えることで対処しました。
- なお、上記の処理ではYoutube等特定のWebサイトのリンクカードの取得ができないためv1.2.0以降に予定しています。
- 今回の問題解決にあたり anon氏(@anon5r.com)、So Asano氏(@so-asano.com) の情報提供により、エラー箇所に当たりを付けることができました 。
- また、これまで最新版しか検証ができなかった当サイトの開発環境が更新され、ブラウザの下位互換対応が可能になりました 。
- お二人には感謝してもしきれません。心よりの感謝を申し上げます 。
- その他、UIを調整しました。
- 高度な設定としていた項目を展開し、通常状態で表示するようにしました。
1.1.4
Patch Changes
- 入力文字数がXの上限を超えた際、文字数表示箇所に警告表示を行うようにしました。
- 141文字以上の入力を行うと、Blueskyへは投稿可能ですがTwitterは投稿不可なため、アプリ起動またはポップアップ後に自力で編集していただく対応とさせていただきます。
- URL埋め込みについて、Youtubeなど、一部のサイトにまだ対応できていないことをQAへ追記しました。
- 他サイトと構造や状況が異なり、主にCORSが原因でフロントエンド側から情報の取得ができないサイトについては、バックエンドを交えた情報取得が必須になり、パッチリリースのレベルでは対応できないため、現在の仕様としては不具合ではなく不可な状況です。アップデートをお待ちください。
- トップページにアプリ化に対応している旨を記載しました。
1.1.3
Patch Changes
- Xへの投稿の際にURLの挿入位置を変更しないようにしました。
- Xへの投稿で、intentを用いてURLを投稿する場合、URLクエリに
&url
パラメータを指定すると通説では言われていましたが、本文に直接記載した場合も正しく動作したため、URLクエリを廃止し、Blueskyと同様の箇所にURLを差し込めるように変更しました。
- ヘッダメニューを非表示にする長さを長く設定し、メニューの折り返しが発生しないよう修正しました。
- Xでポストするボタンを押した後表示を変更し、ポストしたかどうかを一目でわかるように改修しました。
- あくまでボタンを押した場合に表示を変更しています。Xを自動で開くオプションをONにしている場合の、ボタンによらないXのアプリ起動(ポップアップ)については、ボタンの表示は変わりません。
1.1.2
Patch Changes
- Xへの投稿プレビュー画面にて、改行処理が正常でない問題を修正しました。
- Reactが取り扱うstring型を
JSX.Element
に展開する際、改行が削除されてしまっていたため、エスケープして正しく表示するよう修正しました。
1.1.1
Patch Changes
- ローディングにエラーハンドリングを追加しました。
- いくつかの環境でローディングが終わらず、投稿画面が開けないという症状の報告を受けています。
- 原因が不明なため、エラーハンドリングを追加し、ステータスメッセージを出力するよう改修しました。
- 開発者環境では再現困難な状況です。引き続きフィードバックのご協力をお願いします。
- OGPカードの生成とリンクカード埋め込みの概念を切り離し、「OGPを生成しない(埋め込みURL有効化)」から 「Xへの投稿画像は自身で添付する」 へオプション名を変更しました。
- 「Xへの投稿画像は自身で添付する」オプションのON/OFFにかかわらず、画像が添付されていない場合は外部URLのリンクカードの埋め込みを試みます 。
- 複数のURLが記載されている場合の動作は、最も最後に検出したURLを用います(v1.1.0と同様の動作)
- 「Xへの投稿画像は自身で添付する」オプションのON/OFFにかかわらず、 画像が添付されている場合は外部URLのリンクカードの埋め込みを試みません。
- 画像の添付とURLの付与は共存可能ですが、画像の添付とリンクカードの埋め込みは共存できないためです。
- 「Xへの投稿画像は自身で添付する」オプションがONであり、画像が添付されている場合、OGPジェネレータを実施しません。
- Blueskyへは画像付きポストが投稿されます。このオプションをONにした場合は、Twitterへの画像添付は手動にてお願いします。
- 「キャンセル」ボタンを「下書きを消す」に改善しました。
1.1.0
Minor Changes
- OGPを生成しないオプションを追加しました!
- Blueskyへの投稿に対して、(外部URL含む)リンクカードの埋め込みが行われるようになりました!
- 待たせたな@chinjuh.bsky.socialとその他クリエイター!好きなだけ外部サービスを埋め込むがいい!
- この機能はOGPを生成しないオプションと入れ替わりで有効になります。OGPジェネレータと同時に使用することはできません。
- 文章で最も最後に検出されたURLをOGPカードに用いますので、複数URLを記載した投稿を予定されているユーザは挙動についてご注意ください。
- 投稿画面を大きく改善しました。
- @tooon.bsky.social氏、改善案をありがとう!
- UI/UXの改善として、投稿画面自体をBlueskyに寄せた作りにし、Xへポストについては投稿後に画面遷移するように改善しました 。
- Xへポストを行う画面にプレビュー機能を設けました。ただし、当サイトから直接ポストを行うわけではないため、あくまで目安として活用ください。
- Xへのポストをより簡略化するオプションを追加しました。
- Xへポストを行う画面(プレビュー画面)を表示すると同時に直接Xへのポップアップ(またはアプリの起動)が行われます。
- ブラウザへ事前にポップアップの許可をお願いします。拒否した場合、オプションをオンにしていてもオフの場合と同じ挙動になります。
Patch Changes
- OGPページの生成中にXへポストボタンが押せるようになってしまう不具合を修正しました。
1.0.11
Patch Changes
- Firefoxにて文字数カウントが表示されない問題の対処および、textareaの入力制限が想定より小さい状態となっていた問題の対処
- Twitterと混同しないよう、当サイト上で投稿を共有する先がXであることを修正しました。
- 画像投稿時のエラーハンドリング誤りを修正しました。
- 画像添付でのポスト時、
Unexpected Error
と出力されていた原因に対して対処しました。
解決したのはエラーハンドリングのみであり、一部の画像の投稿に関してまだ何らかのエラー原因があると思われます。これについては根本原因について調査・対応中です。
- 追記: 以上により特定環境下で発生していた画像を含む投稿ができない不具合が解消されました。
- 画像を格納する変数に対しての項目の問い合わせ箇所
value.blob.ref?.$link
としていた箇所が、環境によるJavascriptの厳格度の違いで、TypeError
となる環境とそうではない環境が存在していたと考えられます。
- これを
uploadBlob
関数のエラー時の戻り値である value?.error
を参照するように修正したことで、 TypeError
が発生しなくなりました。
- 問題の発見、および 三日間にも渡るテスト作業に付き合ってくださった@gapashu0603.bsky.social氏には盛大な感謝を! ありがとうございました!!
- ログアウトボタンのUIが崩れていたため修正しました。
1.0.10
Patch Changes
- Unexpected Errorの報告事例が相次ぐため、エラーハンドリングを強化しました。
- これまでUnexpected Errorだった内容が、どのAPIが・どういった内容のエラーなのかをステータスメッセージとして詳細に報告するようになります。フィードバックのご協力に感謝します!
- Statusメッセージの表示を改善しました。
- spanタグではなく、divタグに置き換え、改行した際も見た目が崩れないように設定しました。
1.0.9
Patch Changes
- Changelogをページ化実施しました。
- Changeset導入によるバージョン管理を採用しました。Changelogが自動で作られて、便利。
- ログイン時、右上のログアウトボタンが押せなくなっていた不具合を修正しました。
- 原因はDisableフラグを逆に指定していました。つまりログアウト時に有効になり、ログイン時に使えないという、矛盾した設定内容となっていました。
- 各ページの開発者アカウントのURLを修正しました。新handleはnekono.devです。
- QAへ項目を追加しました。
- ログイン画面のhandleおよびpasswordフォームに初期値を追加し、入力内容をわかりやすくしました。
- その他tailwindCSS関連の設定値を整備しました。
1.0.8
Patch Changes
- 末尾に改行コードを含むほとんどのメンション・リンクが投稿できない不具合を修正しました。
- 原因は区切り文字で、1.0.7以前ではスペース文字を区切り文字として設定していましたが、改行文字は通常の文字種と同様に扱ってしまっていました。改行コードは明らかにURLとURLではない箇所を分割するため、区切り文字として判定するように修正しました。
- 他にも区切り文字はあるかもしれませんが、いったんはBluesky公式が準じているだろう、上記の区切り文字(スペースまたは改行コード)を対象とします。発見ありがとうございました!@tooon.bsky.social氏!
1.0.6
Patch Changes
- 誤解を招く表現だったため、トップページの文言を少し変えました
- Q&Aページを作成しました。
1.0.5
Patch Changes
- 日本語を含む文章にリンクまたはメンションを含む場合に、正常にリンクされない不具合を修正しました。
- 原因はcreateRecordの際に、リンクを含む場合はRecordのfacetsとしてテキスト中のどこからどこまでを数値で指定してあげる必要があり、この数値の単位が文字ではなく、文字のバイト数を示していました。
- これにより日本語は1文字3バイト換算にもかかわらず、処理上では1バイトとして扱っていたため、これを修正し、範囲ずれが起こらないようにしました。発見ありがとうございました!@cpro.bsky.social氏!
- これより前までのPatch Changesは記録していませんでした...
1.0.0
Major Changes