えむにわリソース

ITのスキマ的なあれこれを書きます。

CarrierWave を Google Cloud Storage で使おうとしたときに嵌まる罠

困難

CarrierWave で GCS を使おうとすると モデル保存時に wrong number of arguments (given 6, expected 4..5) という度し難いエラーが出る

f:id:m2wasabi:20210410083417p:plain

まとめ

  • fog-googleGCPアクセスでJSON API を使った場合、copy_object メソッドで引数エラーが出る
  • GemがメンテナンスされるまではレガシーなXML APIを使う
  • 問題が発生している組み合わせは carrierwave (2.2.1), fog-google (1.12.1), google-api-client (0.50.0)
続きを読む

Google認証システムから任意のツールにワンタイムパスワードを引っ越す

はじめに

スマホの機種変更のたびにワンタイムパスワードの管理が面倒ですね。
賢明な方は既に1Passwordなどにワンタイムパスワードを登録済みかもしれませんが、
最初にGoogle認証システムなどに登録してしまったら、引っ越すのも作り直すのも面倒になってしまうかもしれないです。

f:id:m2wasabi:20210223042436p:plain

昨年、Google認証システムがエクスポートに対応しました。

japanese.engadget.com

これで機種変更が捗るのですが、公式サイトの説明では、
Google認証システム同士でQRコードを読ませるように書いてあります。

support.google.com

しかし自分は KeepassXC*1 や 1Password*2 で使いたいんだ!
自由になりたいので!

というわけでGoogleのロックインから脱出してみましょう。

然らばLet's Hacking!

おことわり:本記事の内容を参考に起こした結果の情報漏洩、操作ミスによるシークレットの削除などの不利益について、筆者は一切の責任を負えませんので悪しからずご了承ください。

続きを読む

Ruby on Rails 6.x + Omniauth でRedisのSessionを使う

f:id:m2wasabi:20200613110248p:plain

Ruby on Rails5.2以降、 Redisのキャッシュ機能を標準サポートされました。

Rails の OAuth2 クライアントとして Omniauthを使った場合、 無策で実装するとCSRFエラーが出ます。

OmniAuth::Strategies::OAuth2::CallbackError (csrf_detected | CSRF detected):

これはOmniauthが Railsとは別の Rackアプリケーションとして立ち上がっていて、Railsの設定を読まないためです。 公式サイトにはCookieセッションでの対応方法が書いてありますが、Redisで設定する場合の記述がなされていません。

github.com

続きを読む

Rails6のcredentialをファイルから生成する方法

梅雨時になってすっかりRails触っている昨今ですが、いかがお過ごしでしょうか。

Rails6から導入された credentials 、使ってますか?便利ですね。大事な情報はどんどん隠蔽しましょう。

credentialsが何かの説明は、ここ とか ここ を読むと良いでしょう。

要はサービストークンやパスワードなどの秘密の情報をRailsフレームワーク内で暗号化する仕組みです。

最初に rails credentials:edit とかで秘密鍵を作りながら暗号化する情報を書くのですが、
EDITOR 環境変数にエディタを設定して書き込みます。

秘密にする項目が多いと、面倒ですよね。自動で生成したい!!!

そこで、 credentials:edit をファイルから生成してみましょう。

f:id:m2wasabi:20200613110248p:plain

手順

1. ひな形ファイルを用意する

設定ファイルのひな形になるファイルをどこかに置きましょう。
あるいはこれをsedなんかでカスタマイズしてもいいかもしれません。

.credentials_template.yml

secret_key_base: '0123456789'
mysql:
  host: 'localhost'
  database: 'default'
  user: 'user'
  password: 'secret'
redis:
  url: 'redis://localhost:6379/1'
mail:
  server: 'smtp.example.com'
  domain: 'example.com'
  port: 587
  user: 'mailuser'
  password: 'secret'
  authentication: 'cram_md5'

2. ひな形ファイルからcredentialsを生成する

おもむろに以下のコマンドを実行しましょう。 Linux系のシェル用です。Windows民はWSL使いましょう。

EDITOR="cat ./.credentials_template.yml > "  bundle exec rails credentials:edit -e development

staging, produntion 用の鍵も同様に作ります。 -e の引数変えればできますね。

解説

EDITOR の中の > がミソです。
credentials:edit の中では ${EDITOR} #{tmp_path} みたいなコマンドを発行しているので、
リダイレクトで流し込めばいいのですね。

3. 秘密鍵を持ち帰ろう

環境の新規作成はできました。

任意の環境でデプロイするには秘密鍵を持ち帰らなければなりません。

./config/credentials/*.key にあるので、 プライベートクラウドに上げるなり、アーカイブして持ち帰るなりしましょう。

できあがり

簡単ですね!ではよい自動化ライフを!

アバターセットアップ用のUnityプロジェクトテンプレートを作る

VKet4の最終日にこんな記事を書いています。 アバターのセットアップ、してますか?

たくさんセットアップしていると、
繰り返し同じアセットをインポートしなければいけないのが最初の苦行ですね。
人類はコピペ前提のダミープロジェクトを作って凌いでいたようです。*1

しかし、プロジェクトのテンプレートを作ってしまえば、もっとスマートに始められるのではないでしょうか。
プロジェクトのコピー&リネームと比べた利点として以下の3点が個人的には好きです。

  • 通常のプロジェクト開始と同じフローで作ることが出来る
  • テンプレートで開始すると Unityのバージョンが固定される 安心感がある
  • プロジェクト作成後にそのまま Unity Hubのプロジェクト一覧に登録される (再開しやすい)

プロジェクトのテンプレート作成自体は既知のものですが、それをアバターのセットアップに使っている人を見なかったので、
今回はその方法について説明します。

続きを読む

Model Finalizer 070 blender 2.8 用パッチ

今回はblender使いの人向けの記事です。
ModelFinalizer を知っていますでしょうか。

gumroad.com

記者だったりモデラーだったりする佐藤カフジさんの作ったblenderアドオンです。

ボーンポーズコレクションをシェイプキーに一括変換したり、ウェイトを移植したり掃除することが出来るものです。 出力クオリティを調整しながら破綻しないキャラクターモデルをつくるのに欠かせません。

しかしながら2020年4月現在更新が止まっており、blenderは2.8が主流になり、アドオンを使うことが難しくなっていました。

そこで現状のModelFinalizerの機能をそのまま blender2.8で動かすための自家修正を加えました。

Model Finalizer 作者のかふじさんが活動再開するまでのとりあえず版です。

起きてー!

2020/07/29追記

カフジさんが活動再開したので本家から入手しましょう

gumroad.com

続きを読む