新しいローカライズ文言管理ツール hoshi を作っています

これまで担当してきたプロジェクトでは、たびたびローカライズ文言の管理に頭を悩ませることがありました。

もちろん日本語のみ対応すればよいプロジェクトであればソースコードにべた書きというという手もあり、時間がないプロジェクトでは実際にそうしてきましたが、本来ビューにある純粋なリソースであるので、単一言語でも文字列リソースとして管理されるべきだと考えています。

ローカライズ文言管理をプロジェクトに導入しようする際に、スプレッドシートベースの管理などいろいろ試してきましたが、どのプロセスも最終的にしっくりきませんでした。また、SaaSの導入も費用対効果の面で推し進めることがしづらいという課題があります。

これらの問題をまとめて解決できないまま数年過ごしてきたのですが、昨年新しいプロジェクトに入った際に思いついた方法があり、この方法を実現するための文言管理ツール hoshi を開発しています。 このツールはまだ未完成ではありますが、現在のプロジェクトで導入して一定の成果を上げつつあります。

この記事ではhoshiを作るに至った背景と、hoshi使った文言管理プロセスを紹介します。

続きを読む

Ukam 0.3.1 をリリースしました

別ディスプレイにあるウィンドウを現在のディスプレイに移動させるmacOSアプリ Ukam 0.3.1 をリリースしました。

Ukamについてはこちらの記事をご覧ください

iseebi.hatenablog.com

変更内容

  • サブディスプレイに移動させる場合にウィンドウの縦位置が正しくない場合がある。
    • 特にディスプレイを縦に並べたときに画面の外に出てしまったり、メインディスプレイ内で移動するのみになってしまう。

その他、1つ前の0.3.0では、他の仮想デスクトップにあるウィンドウも現在のデスクトップに持ってこれるようになっています。

ダウンロードはGitHubからどうぞ。

github.com

C28セレナNissanConnectナビのAlexaをradiko受信機にする

2023年6月にセレナe-POWER LUXIONに乗り換えていた。セレナに新しく設定された最上位モデルで、一定条件下でハンドルから手を離せるプロパイロット2.0が搭載されたモデルだ。

もともと2018年末からセレナ e-POWERに乗っていたけど、5年の残クレで買っていてちょうど2023年末が買い換え時期だったり、納期が長期化していたというのもあったため、2022年末に先行予約ができるようになった頃には予約を入れていた。*1

結果的にかなり早めに納車されることとなり、お店で2番目のLUXION予約で、最初に納車されたLUXIONとなったらしい。

正直プロパイロット2.0はいらなかったのでLUXIONにする必要はなかったのだけど、ヘッドアップディスプレイがほしいと思い、迷う理由が金額しかなかったのでそれで決めることにした。

セレナのメーカーオプションナビはアリアやエクストレイルについているのと同系統の、日産の中では現状最上位クラス扱いのものがついている。 ここにAlexaが入っていて、ハンドルのボタンを押すことでAlexaの機能を使えるように設定できる。うちではAlexaを家でradiko受信専用としてヘビーに使っていて、セレナのナビでもスマホ操作なしでナビの音声操作だけで再生ができるので非常に便利に使っているので、どのように使っているかまとめてみようと思う。

NissanConnectナビをWi-Fiにつなぐ

*1:納期長期化がなければ、そのあとに出る予定が見えてた他車と相見積もりのつもりだった。

続きを読む

Ukam - Re:別のディスプレイに表示されているウィンドウを強制召還するmacOSアプリ

以前、別ディスプレイにあるウィンドウを現在のディスプレイに移動させるmacOSアプリを作りました。

iseebi.hatenablog.com

どういうアプリだったかというのを再度説明しておくと、マルチディスプレイ環境でMacを使っているときに、あるディスプレイを別の入力に切り替えてて表示されていないときに、別のディスプレイから見えないディスプレイのウィンドウを引っ張り出すというもの。

これを作ったのが2年以上前になることが驚きだったのだけど、自分の生活には手放せないものになっていました。 作った時点ではメニューが出てくるだけの素朴な作りだったのですが、それだけ手放せないものになっているのであればと、少し思い立ってここ数週間でもう少し見た目良く作り直しました。

Mac App Storeにあげるつもりでちょっと気合い入れて権限許可ダイアログとかも作ったけど、そもそもプライベートAPIも使っているし、他のアプリのウィンドウをアクセシビリティ経由で操作するのでサンドボックス化できないのでストアのガイドライン的にNGど真ん中なのでした。(しかもTestFlightの外部共有審査に出して気づいた)

よければ使ってみていただければと思います。

github.com

ReactでGoogle Maps JavaScript APIを組み込む

React+TypeScriptでGoogle Mapsを組み込んだページを作る際、これまではreact-google-mapsのようなライブラリを組み込んで実装してきました。 久しぶりにGoogle Mapsを使ったReactアプリケーションを作るにあたって現在の状況を調べてみたところ、公式のドキュメントにReact アプリケーションに Map と Marker を追加するというページがあり、@googlemaps/react-wrapperというものを使って組み込む方法が紹介されていました。

これまでサードパーティーのラッパーライブラリを使ってきた際、Google Mapの細かい制御をしようとした際に結局Google Mapsインスタンスを直接操作することになりがちだったこともあり、より公式に近い方法があるのであればそちらに乗り換えたほうがいいと考え、このガイドを参考に実装してみました。

ライブラリのインストール

続きを読む

VPSで運用していたサーバーを整理した

個人で複数台のVPSを運用していたが、いろいろなものがサポート切れしてOSの入れ直しが必要になったのを機にVPSの見直しをすることになった。元々3台のVPSを運用していたが、1台減らした。

続きを読む

LightsailをIPv6オンリーにしたらLet's Encryptで証明書の更新ができなくなってた

先日、LambdaからIPv6でアクセスできるようにする で書いたとおり、IPv4アドレス課金を避けるためにLightsailをIPv6 Onlyのインスタンスにしていました。 LightsailをIPv6/IPv4デュアルスタックからIPv6 Onlyにするには、一度停止した上でスナップショットを作成し、スナップショットから新しいインスタンスを作るだけで簡単にできました。

が、数日後Let's Encryptで証明書が更新できていないことに気がつきます。 確認してみると、Let's Encrypt自体はIPv6で使えるものの、Route53のAPIの呼び出しに失敗していることがわかりました。(実際に route53.amazonaws.com をnslookupで AAAA レコードを引くと No Answerになります)

対応としては、いくつか考えられます。

うちは代々グローバルIPを持たない環境が続いていたため、リモートアクセスの中継拠点としてさくらのVPS上にVPNを構築していました。 LightsailからのIPv4トラフィックは、このVPNを経由してアクセスするように設定することでRoute53 APIを直接呼び出せるようにしました。

IPv6に進んでいくのは良いことなのですが、まだ課題が多そうです。