Rails 6.1 で追加された permissions_policy.rb とは?
Ruby on Rails 6.1 で、 config/initializers/permissions_policy.rb が追加されました。
# Define an application-wide HTTP permissions policy. For further # information see https://developers.google.com/web/updates/2018/06/feature-policy # # Rails.application.config.permissions_policy do |f| # f.camera :none # f.gyroscope :none # f.microphone :none # f.usb :none # f.fullscreen :self # f.payment :self, "https://secure.example.com" # end
このファイルには Permissions-Policy (旧称 Feature-Policy) HTTP ヘッダーを設定するためのDSLを記述します。
Permissions-Policy (旧称 Feature-Policy) とは何か?
指定されたオリジンのリストに対して、ブラウザのどのAPIを無効または有効にするかを指定できるものです。
- サイト全体で使用されている特定の機能に対して、ブラウザが実施する一連の「ポリシー」を許可する。
- 「ポリシー」で、サイトがアクセスできるブラウザのAPIを制限したり、特定の機能に対するブラウザのデフォルトの動作を変更したりする。
- 「ポリシー」はブラウザと開発者の間の契約であり、開発者の意図をブラウザに伝えるもの。
旧称 Feature-Policy ってどういうこと?
もともと Feature-Policy という名前だったのですが、 Permissions-Policy という名前に変更されました。
Feature-Policy ヘッダーは仕様書で Permissions-Policy に改名されたので、この記事もそのうち、変更を反映するために更新されます。
Rename all the things by clelland · Pull Request #379 · w3c/webappsec-permissions-policy · GitHub
これに対応して、Railsの実装も feature_policy.rb から permissions_policy.rb に変更されました。
Rename HTTP Feature Policy to Permissions Policy · rails/rails@90e710d · GitHub
ですが、実際にはブラウザの対応が追いついていないので、古い Feature-Policy に戻りました。
Permission-Policy headerをFeature-Policyに戻しています。仕様としてはPermission-Policyになったのですが、対応がまだ行われていないブラウザもある為、対応が行われていないブラウザでも使用出来るようにする為、Feature-Policyに戻しています。
設定例
Rails.application.config.permissions_policy do |f| f.camera :none # 映像入力デバイスを無効 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy/camera f.gyroscope :none # ジャイロスコープ無効。デバイスの向きに関する情報の収集を不許可。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy/gyroscope f.microphone :none # 音声入力デバイスを無効 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy/microphone f.usb :none # WebUSB APIを無効 f.fullscreen :self # このドキュメントと、同じオリジンにあるすべてのネストされたブラウジングコンテクスト(iframe)で許可 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy/fullscreen f.payment :self, "https://secure.example.com" # self に加えて https://secure.example.com で Payment Request API を許可 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy/payment end
WSL2のadbコマンドでWindowsホストのadb-serverに接続する
動機・やりたいこと
やったこと
- WindowsホストにWindows用の Android SDK / platform-tools をインストール
- WSL2 (Ubuntu) にUbuntu用の Android SDK / platform-tools をインストール
- Windowsホスト上で所定の操作を行うPowerShellスクリプトを実行
- WSL2で
ADB_SERVER_SOCKET環境変数を設定して adb コマンドがWindowsホスト上の adb-server へ接続するようにする
手順
WindowsホストにWindows用の Android SDK / platform-tools をインストール
Android Studioをインストールするとき、Platform-Toolsもインストールされました。 後からインストールするときは SDK Managerから SDK Tools > Android SDK Platform-Tools でインストールできます。
インストール後、Windowsの環境変数 PATH にパスを追加しておきます。
C:\Users\ユーザー名\AppData\Local\Android\Sdk\platform-tools
WSL2 (Ubuntu) にUbuntu用の Android SDK / platform-tools をインストール
ここなど
Windowsホスト上で所定の操作を行うPowerShellスクリプトを実行
こちらの記事のとおり
ただし
$adbPathは"C:\Users\ユーザー名\AppData\Local\Android\Sdk\platform-tools"Set-NetFirewallProfile -DisabledInterfaceAliases "vEthernet (WSL)"は管理者権限が必要
WSL2で ADB_SERVER_SOCKET 環境変数を設定して adb コマンドがWindowsホスト上の adb-server へ接続するようにする
以下を .profile に追記して source ~/.profile
export ADB_SERVER_SOCKET=tcp:$(cat /etc/resolv.conf | grep nameserver | cut -d' ' -f2):5037
adbを使う
takeyuweb@concolor:~$ adb devices List of devices attached emulator-5554 device # <-- Windows上で動くEmulator
Google Play Store 予約注文(事前登録)開始の手順メモ
大変わかりづらく、先に製品版の審査を通してしまって事前登録できない、製品版の地域を一度選ぶと事前審査の地域が削除され戻せない、など取り返しが付かないところがあるので要注意
- 事前登録の審査を受ける
- バイナリを登録
- 国/地域を選択
- 特典の有無
- 事前登録の審査が終わってアプリページの掲載が開始
- 製品版リリースを作成して公開する(国/地域は選択しない )
- 公開を開始する時に製品版の 国/地域 を選択する
- 事前登録からインストールになって事前登録者に通知が送られる
途中公開版の国/地域を選択してしまうと、事前登録の方の国/地域が削除されてしまうので、うっかり選択してしまったら公開の概要の管理対象の公開をオンにして、反映しないように止めておく必要がある。
オープンテストやクローズドテストと絡めるやり方もあるようだが、シンプルな事前登録の手順は上記のような流れらしい
Chromeでビデオ/音声入力する機能開発の時にオーディオ入力として任意のWAVファイルを使う方法
タケユー・ウェブ株式会社ではWebRTCを利用したブラウザベースのライブ配信サービスの開発運営を行っています。
お客様から、「ステレオ音声配信を行いたい」というご依頼があり、この機能開発を行う必要がありましたが、弊社にはステレオマイクはありません。 適当なステレオ音源をマイク入力の代わりに使いたいところです。
そんなときにはChromeのフェイクデバイス機能を使います。
録音を行うChromeの起動オプションとして --use-fake-device-for-media-stream と --use-file-for-fake-audio-capture=file.wav を渡します。
私の環境はWindows なのでこんなコマンド
"C:\Program Files\Google\Chrome\Application\chrome.exe" --use-fake-device-for-media-stream --use-file-for-fake-audio-capture="C:\Users\takeyuweb\Channel_Test_Once_LR.wav"
こうするとマイク入力のデバイスに Fake Audio Input を使用できるようになり、選択した音声ファイルの内容が繰り返しマイク入力として流してくれます。
ちなみにステレオ音声ファイルはこちらのサイトのものをダウンロードさせて頂き、WAVに変換して使用しました。
Aurora MySQL で utf8mb4 なダンプデータをインポートしようとして ERROR 1709 (HY000) at line 25: Index column size too large. The maximum column size is 767 bytes.
よく知られているのが、 innodb_large_prefix=1 と innodb_file_format=Barracuda にする、ROW_FORMAT は DYNAMIC か COMPRESSED にする必要があることです。
しかしその設定は満足しているのに、なぜ?という場面がありました。
show variables where Variable_name in ('innodb_large_prefix', 'innodb_file_format', 'innodb_default_row_format'); show variables like "chara%";
+---------------------------+-----------+ | Variable_name | Value | +---------------------------+-----------+ | innodb_default_row_format | dynamic | | innodb_file_format | Barracuda | | innodb_large_prefix | ON | +---------------------------+-----------+ 3 rows in set (0.00 sec) +--------------------------+------------------------------------------------------------------+ | Variable_name | Value | +--------------------------+------------------------------------------------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | utf8mb4 | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /rdsdbbin/oscar-5.7.mysql_aurora.2.07.2.0.1106.0/share/charsets/ | +--------------------------+------------------------------------------------------------------+ 8 rows in set (0.00 sec)
原因
dumpファイルで ROW_FORMAT=COMPRESSED が指定されていました。
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`), ) ENGINE=InnoDB AUTO_INCREMENT=50853 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
Aurora MySQL では COMPRESSED に対応していません。
Amazon RDS MySQL DB インスタンスから DB クラスターにデータを移行するAmazon Aurora MySQL - AWS Database Migration Service
このため、このダンプファイルはAuroraでは ROW_FORMAT の不備という扱いになりまいた。
対策
少々乱暴ですがダンプファイルを書き換えることで対応しました。
Linuxの場合
$ sed -i -e "s/ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8/ROW_FORMAT=DYNAMIC/g" dump.sql
macの場合
$ sed -i "" -e "s/ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8/ROW_FORMAT=DYNAMIC/g" dump.sql
Flutter で Android App Bundle を作成して Play Console にアップロードするときのメモ
Android App Bundle (.aab) の作成
flutter clean flutter build appbundle --build-number=123
アップロード
Android App Bundle (.aab)

アップロードするファイル
PROJECT_ROOT/build/app/outputs/bundle/release/app-release.aab
ネイティブ デバッグ シンボル

アップロードするファイル
PROJECT_ROOT/build/app/intermediates/flutter/release/ にある arm64-v8a armeabi-v7a x86_64 を1つのZIPファイルにアーカイブしてアップロードします。
Windowsだとまとめて選択して「圧縮フォルダーへ送る」でOKです。

