タケユー・ウェブ日報

Ruby on Rails や Flutter といったWeb・モバイルアプリ技術を武器にお客様のビジネス立ち上げを支援する、タケユー・ウェブ株式会社の技術ブログです。

技術

WSL2のadbコマンドでWindowsホストのadb-serverに接続する

動機・やりたいこと WSL2で開発するが、WSL2上では Android Emulatorが使用できない WSL2から、Windowsホストにインストールした Android Emulator を使いたい やったこと WindowsホストにWindows用の Android SDK / platform-tools をインストール WSL2 (Ub…

Google Play Store 予約注文(事前登録)開始の手順メモ

support.google.com 大変わかりづらく、先に製品版の審査を通してしまって事前登録できない、製品版の地域を一度選ぶと事前審査の地域が削除され戻せない、など取り返しが付かないところがあるので要注意 事前登録の審査を受ける バイナリを登録 国/地域を選…

Chromeでビデオ/音声入力する機能開発の時にオーディオ入力として任意のWAVファイルを使う方法

タケユー・ウェブ株式会社ではWebRTCを利用したブラウザベースのライブ配信サービスの開発運営を行っています。 お客様から、「ステレオ音声配信を行いたい」というご依頼があり、この機能開発を行う必要がありましたが、弊社にはステレオマイクはありません…

VSCode Remote - SSH と WSL2 でリモートFlutter開発

WSL2はローカルのメインマシンとしてWindowsを使う私のような開発者には非常に便利なものですが、リモートホストのWSL2への接続、ウェブ以外の開発ではなかなか嵌まり所が多く、できはしましたが結構大変です。 VSCode Remote - SSH で使うなら素直に(WSL2…

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 Varia…

Flutter で Android App Bundle を作成して Play Console にアップロードするときのメモ

flutter の成果物を Play Console にアップロードするときのコマンドと、成果物がどこにあるか、ネイティブデバッグシンボルって何を?と調べてたのでメモ。

Flutter/Dart で S3 へのダイレクトアップロードを実装する

DartでS3へのダイレクトアップロードを実装したときのメモ。ポイントはMD5ハッシュの生成と、PUTリクエストの送信について。

codemagicのiOSビルドで Did not find matching provisioning profiles for code signing!

事象 Flutter向けのCI/CDサービスの Codemagic を使っていて、 ios/Runner.xcodeproj/project.pbxproj を PRODUCT_BUNDLE_IDENTIFIER を jp.co.takeyuweb.app.${DEFINE_BUILD_ENV} のように変数を埋め込む形にしたところ、 == Building for iOS == > xcode-p…

Ngrokなどのトンネリングツールを使うときは、 default_url_options をトンネリングURLのものにしたい

ローカル開発中のRailsアプリに外部からのリクエストを届かせる必要があるとき、Ngrokは便利です。 たとえば 開発中のアプリなどを実機で動かしてて、ローカルのRails APIサーバーと通信したい 外部のサービスからのリクエストを受け取る必要がある といった…

Railsのアセット(ActiveStorage , Webpacker, Asset Pipeline)をCloudFront経由で配信する

ActiveStorageで添付したファイルや加工したファイル、Webpackerの成果物などのアセットのURLをCDNを経由するものにする方法と、その構成をCDKで構築する方法について紹介します。

Rails 6.1 の rails_storage_proxy_url でActiveStorage のリダイレクトURL問題を解決する

Rails 6.1 の新機能 rails_storage_proxy_url を使うと、ActiveStorage で添付したファイルへのリンクが署名付きURLへのリダイレクト問題を解決できる他、CDNのURLを生成することもできるようになります。

his CDK CLI is not compatible with the CDK library used by your application. Please upgrade the CLI to the latest version.

npx cdk deploy したら発生したエラー $ npm update aws-cdk $ npx cdk deploy グローバルの cdk cli を使っていなかったので npm -g ではない

ActiveStorageのダイレクトアップロードを付属のJavaScriptライブラリ以外で使う

たとえば、graphqlなどアップロード機能を提供したいとき、 ダイレクトアップロード用の ActiveStorage::Blob とURL等を生成 結果を受け取ってレコードにファイルを添付する をMutationで実装したいことがあります。 クライアントはアップロードしようとする…

Adobe XD + VSCode + Flutter でデザイントークンを開発者に共有する

先日VSCodeのAdobe XDプラグインが公開され、Adobe XDで作成したプロトタイプをコーディングに利用することが可能になりました。 利用までの手順と、実際に何ができて何ができないのか?試してみたので記録しておきます。 coliss.com letsxd.com Adobe XD + …

RubyでFirebase Authenticationトークンを検証するサンプル

Firebase AuthenticationのトークンをRubyで検証する方法について

graphql-ruby + Multiple Databases with ActiveRecord

Query では読み込み専用 、Mutation では読み書きを使うようにしたかった。 github.com 上記のコメントで動くのだが、テストでトランザクションを使ったロールバック戦略を採用していると、レプリカに変更が伝搬されずに失敗する点に注意。(関連:Rails 6.0…

ActiveRecordでid以外によるアソシエーションを設定する

foreign_key: と primary_key: オプションを利用する。 # == Schema Information # # Table name: twitter_accounts # # id :bigint(8) not null, primary key # screen_name :string(255) not null # # Indexes # # index_twitter_accounts_on_screen_name …

コレクションキャッシュでキャッシュのキーをカスタマイズする方法

コレクションキャッシュについてコードリーディングを行ったところ、キャッシュキーのカスタマイズ方法がわかったのでメモ。

cron の代わり CloudWatch Events + Lambda + RunCommand でタスク実行を冗長化する

AWSでサーバーレスなcron代替を構成する方法を紹介します。 この構成ではスケジューリングサーバーの管理なしに、冗長な定期タスク実行の仕組みを実現できます。

EC2インスタンスにSSH接続せずに任意のLinuxコマンドを実行する

AWS Systems Managerを利用すると、任意のLinuxコマンドを、外部から実行することもできます。

AWS WAF v2 を使って特定のURLパスにアクセス元IPアドレス制限をかける

やりたかったこと ALB 配下のWebサーバーの特定のURLパス( /admin/ )には特定のIPアドレスからのみアクセスできるようにする IPアドレスの数は1個~たくさん 断念したこと ALBのリスナールールで制限 リスナールールの条件の数は上限が5個で許可対象のIPア…

Rails + PostGIS (activerecord-postgis-adapter) で矩形内に含まれるレコードを検索する

# == Schema Information # # Table name: places # # id :bigint not null, primary key # geom :geography not null, point, 4326 # # Indexes # # index_places_on_geom (geom) USING gist class Place < ApplicationRecord end class CreatePlaces < Act…

Docker Compose で PostGIS を使った開発環境を構築する

postgis/postgis イメージがあるのでそれを使います。 hub.docker.com このイメージは公式のpostgresイメージをベースに作成されていて、安心感があります。 Postgres の各バージョンと、PostGIS の各バージョンそれぞれの組み合わせから選べるので、多くの…

Rails で言語別に複数形変換 pluralize をカスタマイズする

言語特有の複数形やイレギュラーは、Rails標準の `pluralize` では正しく変換することができません。このようなときは、 `config/initializers/inflections.rb` に独自のルールを定義します。

Google API Client for Ruby でGoogleDriveにアップロード

S3などのオブジェクトストレージと比べて面倒 フォルダを作る必要がある 同名のフォルダを複数作成できてしまう gem 'google-api-client' require 'googleauth' require 'google/apis/drive_v3' FOLDER_ID = "xxxxxxxxxxxxxxxxxxxxxx" # https://drive.googl…

JavaScript (TypeScript) でビデオキャプチャーからの映像を表示したり、スナップショットを取ったりしたい!

USBビデオキャプチャーからの映像は、ブラウザからはWebカメラと同じように扱えます。 従って `getUserMedia` を使うことで簡単に取得することができます。

JavaScript (TypeScript) で画面全体や他のウインドウのスクリーンショットを取りたい!

Webアプリでデスクトップや他(ブラウザ以外の)ウインドウのスクリーンショットを撮りたい場面がありました。 こういうことです。 ブラウザで画面をキャプチャ&ショット サンプル See the Pen wvMGvWp by Yuichi Takeuchi (@takeyuweb) on CodePen. 動作確…

rails new したときにライブラリのインストールをしない

docker-compose などで動かしたいとき、ホストへライブラリのインストールをなるべくしたくない。(依存パッケージの関係でそもそも pg が入らない、とか) bundle install と rails webpacker:install を避ける rails new myapp --skip-bundle --database=p…

S3からGoogle Driveに同期する(Lambda Ruby + CDK)

やりたかったこと S3にアップロードされたアイテムをGoogleDriveの共有フォルダに同期する S3のオブジェクト作成イベントでLambdaを実行して処理 対象のバケットやLambda関数などはCDKで作成する この記事に書いたこと Lambda Ruby で gem を使う方法 AWS SD…

Ruby で SSLサーバ証明書の内容を確認する

cert_content = <