Brew the Mash

クラフトビール好きなITエンジニア@mashmorgan_jpの開発メモなど

【node.js】geofirexがとうとう使えなくなった??

Firestore + Firebase FunctionsでWebAPIを構築しているプロジェクトがあり、ジオクエリを使用したかったので開発当時にオススメされたgeofirexというライブラリをずっと使用していました。

ところが先日、Firebase環境をアップデートしたところ、見慣れぬエラーが。。。 GithubのIssueを見たら同じような人が起票してくれてました。

github.com

どうやら最新版のfirebase-adminではGeopointのコンストラクタが削除されているようです。 なのでFirebase側のGithubを見てみたら、

github.com

コメントで気軽に「モジュールAPIをimportしたら大丈夫なんじゃね?」くらいの軽い感じ。 しかしgeofirexは年単位でアップデートされていないので、Issueが解決される望みは薄そう。。。 (forkして自分でやれよ!というのはナシで)

さあ、どうすべきか! とりあえずfirebase-adminのversionを10.3.0まで落とすと問題なく動作するようになった!!

ただfirebaseはどんどんアップデートされていくので、これも近いうちに解決しなければならない。chatGPT先生に聞いてもコレだ!という回答はまだ返してくれませんでした。

ひとまず公式サイトにこんなページ見つけたので、これに従うのが一番良さそうですね。。。

firebase.google.com

((心の声)あぁ、また本質でない作業が増えてしまったわい。。。)

【iOS】iPhoneで撮影した複数の動画をパパっと繋げる方法

今回は技術的な内容ではなくライフハックに近い内容です。

iPhoneで縦長の動画をいくつか撮影して、いいとこどりして1つの動画にまとめたいシーンて結構あると思います。(特にペット好きな方や子育て世代など)

もちろんいろんなやり方はあるのですが、なるべくPCで編集したり純正以外のアプリを入れずに対応する方法を模索したところ現状でベストなやり方が見つかりましたので共有させて頂きます。気に入れば使ってみてください!

  1. iOSiMovieアプリをインストール
  2. 結合元の動画を写真アプリで編集し90度回転させておく →ここがポイント!
  3. iMovieアプリで結合元の動画を読み込み、好みで結合や切り取りをする
  4. 編集が終わったらメニューの「ビデオを保存」で写真アプリへ保存
  5. 写真アプリを開き、結合後の動画を90度回転させてもとに戻す

ポイントは、iMovieアプリはなぜか横長の動画しか編集できない(縦長を読み込むと切り取られる)ので、事前に回転させておくことです。 私が気に入ってるのはiMovieはシンプルなUIで切り取りや場面転換のアニメーションもわかりやすくさっと出来る点です。無料アプリだと機能制限もあるのでiMovieに落ち着きました。

知ってる人にとってはなんだよ!って感じかもしれませんが、もし同じ悩みをお持ちの方がいたらぜひお試しください!私は遊園地で約半日試行錯誤してしまいました笑

【Mac】Keynoteで作成した画像を高解像度で出力する方法

タイトル通り。

私はアプリやWebで使用するバナーとかの画像はAdobeツールでなくKeynoteでササッと作っちゃう派です(そのほうが性に合ってる)。

そんな私の長年の悩みがようやく解決されました。

参考元サイト様に記載してあるままなんですが、プレビュー.appを経由すればボケた画像とおさらば出来るんですね!

  1. Keynote.appで画像作成(スライドサイズはお好みで)
  2. Keynote.appで左のスライド一覧から該当のサムネイルをコピー(Cmd+C)
  3. プレビュー.appでクリップボードから新規作成(Cmd+N)
  4. プレビュー.appでpng or jpegで書き出す、その際に解像度を72の倍数にする(例.144など。72だとKeynote書き出し時と同サイズ)

ほかのツールとかWebサービスを経由せず純正アプリだけで完結できるのでスッキリ!

参考元サイト:

yaritakunai.hatenablog.com

【iOS】XCode14にアップデートしたらCocoaPodsでビルドエラーになる

本日、XCode14にアップデートしたのですが、これまでなんの問題もなかったのに突然Firebase関係のCocoaPodsでビルドエラーになりました。

クリーンしたり最新バージョンを入れたりPodsを削除して入れ直しても改善せず。

原因はCocoaPodsみたいですが、改善策を入れたら無事にビルドできるようになりました。 改善策は以下のスクリプトをPodfileの最下部に追加し、ターミナルからpod install し直しただけ。("Your Team ID"に自身のTeam IDを設定ください、確認方法はApple Developer ProgramのIdentifiersで該当AppのIDを開くと確認できます)

post_install do |installer|
  installer.generated_projects.each do |project|
    project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings["DEVELOPMENT_TEAM"] = "Your Team ID"
         end
    end
  end
end

要するに何故かCocoaPodsのビルドの際にTeam IDがブランクになっており署名が出来なくなっていた模様ですね。 引用元だとベータ版から改善してないようなので早めに公式対応して欲しいですね。

引用元: github.com

【Conoha WING】突然「An error occurred.」が出るようになった

Conoha WINGのWordpressを使用していましたが、特に何もいじってないのにある日突然「An error occurred.」とnginxのエラーが表示されサイトにアクセス出来なくなっていました。

結論から言うと、ウチの環境ではCloudflareを導入しており、そのせいでした。 Cloudflareを導入していない環境では別の原因だと思いますのでこの記事はスルーしてください。

原因はConoha WINGの無料SSLを使っていたのですが、サイト高速化のためにCloudflareを導入した際にDNSのネームサーバーをconoha標準からCloudflareのものに変更していました。 Conoha WINGではSSLの自動更新のタイミングでネームサーバーがconoha標準である必要があるらしく、よく見るとConohaからメールも来ていたのですがそれをスルーして期限が過ぎてしまっていたようです。

対処方法はConohaの管理画面から無料SSLをOFF→ONにし直すだけ。ただし数時間かかるので即座に解決はしません。(私の場合は4時間くらいだった気がします)

(2022/11/24修正)

対処方法は以下を実施しました。

  1. Cloudflareの管理画面のDNSで、Aタイプのプロキシステータスを「DNSのみ」に変更(wwwあり/なし両方)
  2. ConoHa WINGの管理画面でドメインリストのネームサーバーを「ConoHa(標準)」に変更
  3. ConoHa WINGの管理画面のサーバー設定で無料SSLをONに設定
  4. 数時間かかるので待つ

上記でもうまくいかない場合はConohaのSSL更新に失敗している可能性が高いです。 以下の公式ページにて確認ください。

無料独自SSLの更新について|ConoHa WINGサポート

Cloudflareは目に見えて高速化できる反面、キャッシュパージなどそれなりに手間はかかるので諸刃の剣としての覚悟も必要ですね。。。

【iOS】FirestoreからgetDocumentできなかった件

Swift版のFirestoreで以下のようなコードでドキュメントを取得しようとしたが何度データを登録してもドキュメントなしに落ちてしまう。。。

let db = Firestore.firestore()
db.collection("users").document("xxxxx").getDocument() { document, err in
    if let document = document, document.exists {
        // ドキュメントあり
    } else {
        // ドキュメントなし
    }
}

Firestoreのルールとか散々確認しましたが特に問題なし。

結論から言うと、コールする関数を間違えていたようです。

// NG
db.collection("users").document("xxxxx").getDocument() { document, err in
...

// OK
db.collection("users").document("xxxxx").getDocument { document, err in
...

これ、Webで検索するとほとんどのサイトでgetDocument()が使われているのでFirebase側で仕様が変わっていたみたいです。

たしかに公式サイトではOKバージョンの関数になっていました。でもこれってトラップ過ぎる。。。Google系は特に公式ドキュメントを確認しないとダメですね、という悪例でした。

【iOS】FirebaseAuthで"An internal error has occurred"エラー

これも時間かかったのでメモ。

今まで普通に使えてたFirebaseAuthですが、リリース対応でbundle IDやGoogle Apiキーを変更していたら突然

An internal error has occurred, print and inspect the error details for more information.

というエラーが出て全く認証できなくなってしまった。

とりあえずエラーをそのまま出力してみたところ、何やら権限エラーのご様子。

  "error": {
    "code": 403,
    "message": "Requests to this API firebaseinstallations.googleapis.com method google.firebase.installations.v1.FirebaseInstallationsService.CreateInstallation are blocked.",
    "status": "PERMISSION_DENIED",
...

うーん、テスト段階ではこんな現象は起こったことなかったけど。。。とりあえずググってたらこの情報を発見。

stackoverflow.com

記載通り、apiとサービスの「認証情報」の該当するiOSキー内の「APIの制限」にIdentity Toolkit APIを追加すると全く問題なく動くようになった。

元々そうする必要があったのか、仕様が変わったのかは神のみぞ知る。。。