ウェブページをリニューアルしました+近況

かなり久しぶりのブログ更新です。

タイトルの通りですが、約6年ぶりにウェブページを刷新しました。



前回は2018年頃に、Zend Frameworkをベースに作っていたのをLaravelベースのサーバーに置き換え、AppEngineで動かす形にしていました。

紆余曲折あり、趣味の個人サイトにVPSで動かすやら、クラウドサービス移行でも無駄にDB使っている部分が切り離せないなどの問題がありました。が、PHPでのSSRを止め、モダンなTypeScriptベースのSPAとして置き換えるに至りました。

それまでも移行しつつ、無駄に細々した機能があり、重い腰が上がらなかったのですが、特にここ1〜2年ほどでAIコーディング、AIエージェントの登場もあり、そのサポートを受けながらどうにか移行できました。

といっても、サイトデザインなどは既存を踏襲したため目新しい感じはほぼなく、逆に古くささも残ります。

これで誰も来ないのに 約1800円/月 もかかっていた運用コストも劇的に抑えることができました。最近のホスティングサービスやクラウドの無料枠、ありがたいです。

近況について

変わらずすごしています。こっちで何も更新がない間も、Zennに記事を書いてみたり、AT ProtocolベースのWhiteWindに記事を書いてみたり、SNS投稿の場をBlueskyに移動したりしてました。

以前は外部サービスを利用すると、ある日サービスが消えたときにすべてが消えてしまうことにもなるため、なるべく自前でホストしたい欲があったのですが、テック記事については今後Zennや外部記事でホストしてもらった方がいいかなと思ってきました。

またBlueskyを主に使うようになって、BlueskyやAT Protocolでの開発もするようになりました。

それらの話題は基本的にAT Protocolで作られたサービス(WhiteWindLeafletMochottなど)で書いたりしています。このブログに関しても、そちらに移行してもいいかなと思ってきています。

ちなみにBluesky関連で作ったアプリは以下です。

Bluesky関連アプリ

  • SkyTools Blueskyに未ログイン状態でも各アカウントの投稿などが閲覧できるビューワ、アカウント変更履歴の表示などのツール
  • Chronosky Blueskyへ日時指定で投稿する予約投稿サービス
  • Chavatar Blueskyのプロフィールアイコンを時間ごとに自動変更するアプリ
  • 簡易アプリ
    • Save Your Follows 公開されているモデレーションリスト内にフォロワーやフォロー中の人が含まれていないか確認するアプリ。そのリストを購読することで、誤って既存のフォロー中の人をブロックしてしまわないか確認できます。
    • Campaign Tool for Bluesky BlueskyでRPフォローキャンペーンをするときに、対象ポストのRPとフォロワーを集計して抽選するアプリ。企業や企画のプロモーションに活用してください。
    • Bluesky モデレーションリスト複製ツール その名の通り。公開されているモデレーションリストを自分のアカウントに複製します。複製時にリスト内のアカウントを自分で選択できるため、自分で無関係だと思われる人を既存のリストから外すことができます。ただし他のアカウントは引き続きモデレーション対象として扱われるのでご注意ください。

バイブコーディングに合致するか分からないですが、コーディングエージェントにはだいぶ助けてもらいつつ、やりたかったことを実現できました。これまでの経験では知見が足りなかったりして時間のかかっていたフロントエンドを作り込んでいき、モダンな環境で実行できるアプリケーションを複数出してみることはできたかなと思います。

というわけで、ATProtocol関連で日々続々と出てくるプロダクトなどにワクワクしつつ、そちらの方に興味をそそられている毎日です。

AT Protocolにホストしても良いかなと言っても、結局のところ、ホストされるPDS(アカウントに紐付くデータが保管される場所)に依存するためそこが急に閉じてしまえばそれでデータは消失してしまうことにはなりますが、移行期間と移行先(受け入れ先)が設けられれば、どこにおいても同じように継続できるのはいい仕組みだなと思っています。


最近作ったアプリの話



先日、コナミ社の提供しているコナステのダウンロードコンテンツゲームを1クリックで起動できるアプリを作り、公開した。

Ks Game Launcher (Github)

作った理由として、インストール時に作成されたショートカットをクリックするとブラウザが起動し、ログインしていたらそこから起動ボタンを押して初めてクライアントのランチャーが立ち上がる……という起動方法がイマイチに感じたため。

また、過去に似たような理由(とサブ垢切り替えが面倒だったため)で作ったことがある拙生作 TSLoginManager と同等の仕組みで実装できると考えたため。また、久しぶりにクライアントアプリの開発言語を触りたかったから、というのもある。


今回は作ったときのメモとして、どんなことをやったか、どんな経緯だったかをこの記事に残してみる。メモなのでまとまっていない書き方になっている点はご容赦を。

1Passwordでヴォールトをアーカイブ(非表示)する

昔から1Passwordを使っていて、これまではスタンドアロンタイプの買い切りで利用してきました。

1Password 8からは完全にサブスクリプション型に移行してしまったのでサブスクリプションで利用しています。

サブスクリプション型ではこれまでと同じように管理できますが、基本的にクラウドベースの同期型で管理されます。

私は用途ごとにいくつかのヴォールトに分けて中身を管理しています。例えば、少しお手伝いしたプロジェクトなど。そういった中にはお手伝いが終了したプロジェクトもあるため、本来であればその時点で削除するのが好ましいのですが、状況により引き継ぎが完了していなかった情報があった場合、あとから確認されるケースもあります。

あるいは、個人的に過去に使っていたけど、現在は不要になった情報などもあると思います。

そういった削除したくないけど、普段は使わないため非表示にしておきたいヴォールトについて、ヴォールト単位でアーカイブする機能はないかなと思っていたのですが、そういったものはなさそうで、諦めていました。

が、改めて1Passwordをウェブから確認したところ、これを実現できそうなものがあり、実際できたのでメモしておきます。


👋Clubhouseについてまとめ(更新)

最近流行している新しいSNS、Clubhouse 。これまでのSNSと異なり、文字によるコミュニケーションではなく、音声でのコミュニケーションがメインのSNS。



テキスト主体のSNSがTwitter、画像主体のSNSがInstagram、あるいはPinterestだとして、Clubhouseは音声、会話でのSNSとなっている。SNSなので、その時に話したい人同士で好きに聞いて、話してとすることができる。

ありがたいことに、国内ではやり始め直後に招待してもらうことができ、それを試すことができたので、この新興SNSについて、(既に書かれていること、分かっていることも多いが)分かったこと仕様などをメモとしてここに書く。


日本では2021年1月25日頃から流行りだした。このタイミングで、このアプリの登録時に必要な電話番号で国番号+81(日本の国番号)が追加されたとのこと。

実はサービス自体は既に昨年の夏(2020年7月)頃から、そしてベータ版は2020年月頃から北米西海岸を中心に始まっていた模様。このタイミングは、各アカウントにある招待してくれた人(Nominated by)を辿っていき、開発者(@rohan、またはアプリアイコンにもなっている@iambomanix)に辿り着くことで分かる。




日本でも既に多くの人が招待を受けているようで、マスメディア、芸能関係、政治関係者、その他インフルエンサーなどでも早い段階から入ってきている人も多い。このあたりはそれぞれの業界関係者のTwitterへの参入時のときから比較すると、かなりリーチが早く、正直驚いている(これまでのSNSの傾向的に、この手のアーリーアダプターはテック系メディア関係者やITエンジニアなんか界隈で賑わうことが多い印象が個人的にあった)




AppEngineでcomposerが更新されないとき

Google AppEngine

 最近になってようやくGoogle AppEngine (以下GAE)を使いだし、自サイトをその上で動かせるよう試行錯誤しています。

前置き

私の主サイトは古くからPHPで動かしていて(初期の頃はLegacy ASPで動かしていたこともありました)、GAEでPHPがサポートされてからいつか移植して動かしてみたい。と思っていたのですが、ベースとしていたフレームワークが古く、composerも使用していない状態のものだったため、最近になり、重い腰を上げてLaravelに置き換えるまでなかなか移植できずにいました。

GAEで開発していると、自分で好き勝手にモジュールをインストールして動かしていた環境と異なり、ある程度の制約を受けつつその中で作るようになります。幸いにも既存機能については代替の外部APIなどに置き換える事でほとんど移植可能になりそうとなりました。

minikubeでGoogle Container Registry (gcr)からイメージを取得する

最近は今ごろになってKubernetesの勉強をしています。
概念は大まかに理解した。つもり。けど全然分からん。

Zennで書いた記事のミラー。なので、以下同じ内容。

前置き

現在Google Cloudの無料期間を利用しつつ色々試しているのですが、Google Container Registry(gcr.io)にホストしたコンテナイメージをminikubeで構築しているローカルの環境から取得する際に、プライベートリポジトリだと認証処理が必要になります。

Kubernetesでもこのあたりはもちろん考慮されていて、Dockerレジストリで使用されるログイン認証に準拠した仕組みが準備されています。

が、如何せんうまく認証されない。普通にリポジトリパスを指定しても、PullImageErrorとなってしまう。

エラーログを見ると、認証方法を確認しろ(意訳)というメッセージとともに GCRでの認証方法を案内するページ へのリンクが出ているので確認し、手順に則って見るも、うまくできない🤔

フリーWi-Fiに接続したらサイトに接続できない場合の話


 スマートフォンが普及してからだいぶ経ち、国外からの旅行者向け、観光誘致も込めてまちなかで使用できるフリーWi-Fiもだいぶ普及が進んできました。

おかげで飲食店などに入り、その店内でWi-Fi経由で調べ物をしたりするのにはとても便利だったりします。

しかし、フリーWi-Fiに接続した途端にサイトに接続できなくなることありますよね。あれ鬱陶しいですね。

これは少し仕方がない部分があって、これもまた最近広まっている、常時HTTPS通信によるものが影響してます。

何故繋がらなくなるのか

HTTPSの通信によって通信の内容は暗号化されています。その内容は利用者以外からは読み取れません。また、その通信内容を改ざんすることもできません。

フリーWi-Fiで繋がらなくなるのはこの通信に介入(実質的には一部改竄)し、Wi-Fiの事前認証情報にログインしていない場合はログイン画面に移動させようとします。
また認証されていない場合、ログイン画面と、一部の許可されたサイト(例えば店舗のウェブサイトなど)以外は通信を制限するようにしています。

この機能はフリーWi-Fiのルーターの機能によるもので、これをキャプティブポータル(Captive Portal)といいます。

そのためログイン画面に遷移させることもできず、外部のサイトへの接続も制限された結果、フリーWi-Fiにつないだ途端にウェブサイトにつながらない。という状態が発生します。

ウェブページをリニューアルしました+近況

かなり久しぶりのブログ更新です。 タイトルの通りですが、約6年ぶりにウェブページを刷新しました。 前回は2018年頃に、Zend Frameworkをベースに作っていたのをLaravelベースのサーバーに置き換え、AppEngineで動かす形にしていました。 紆余曲折あり、趣味の...