タケユー・ウェブ日報

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

技術

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

cert_content = <

Ruby による Amazon Personalize の使い方

AWSの機械学習レコメンデーションサービスである Amazon Personalize を案件で利用したのでSDKの使い方メモです。 Amazon Personalize aws.amazon.com Amazon Personalize は、機械学習の知識がなくても、簡単にレコメンデーションをアプリに組み込むことが…

OpenAPI Specification からTypeScript型定義を生成するジェネレータ、swagger-to-tsを試す

GraphQLにおける graphql-codegen のような、 OpenAPI のSpecification から TypeScript の型定義を作ってくれる swagger-to-ts を触ってみました。 github.com まとめ VSCodeの補完が効いてうれしい typoやパラメータの不足などのミスを防ぐ 使い方 型定義…

Stoplight Studio を試す

OpenAPI の定義ファイルの作成と管理のためのツールを探していて、Stoplight Studio が良いと聞いたので試してみることにしました。 stoplight.io Stoplight Studio Stoplight Studio の触れ込み Next gen editor for API design & technical docs (API設計…

Lambda から EC2 インスタンス内でコマンドを実行する

Amazon SSM を利用することで、Lambda を使って、EC2インスタンス内で任意のコマンドを実行することができます。 これを CloudWatch Events と組み合わせると、従来CRONによって行っていたような定期実行タスクを、特定のEC2インスタンスをSPOFにすることな…

CloudFormation で CloudWatch Events + Lambda による定期実行タスクを作成する

AWSで定期的な処理を行いたいときは、CloudWatch Events を使い、 Lambda ファンクションの実行をスケジューリングすることで行います。 docs.aws.amazon.com 設定画面 CloudWatch Events のルール Lambdaファンクションの実行権限設定 CloudFormation テン…

DockerCompose + PostgreSQL Replication

Railsの複数データベース機能を開発環境でも有効にしたかった docker-compose up でセットアップから起動まで一発で動くようにしたい Docker Compose docker-compose.yml version: "3" volumes: pg_primary_data: driver: local pg_readonly_data: driver: l…

Ruby で Firebase User を作成

動機 Firebase Auth を使ったWebアプリの Rails System Spec を書きたい フロントエンドで Firebase JavaScript SDK を使っているため、バックエンドでのstubでは書けない サンプルコード(一部抜粋) Google::Apis::IdentitytoolkitV3::IdentityToolkitServ…

rspec で Firebase ID Token を stub

class SessionsController < ApplicationController def create id_token = params.required(:id_token) user = User.from_firebase(id_token) # (snip) end end class User < ApplicationRecord CIRTIFICATE_URL = 'https://www.googleapis.com/robot/v1/me…

rspec で ActionMailer の deliver_later のジョブはすぐに処理する

ActiveJob へのキューインの spec で示したように ActiveJob::Base.queue_adapter = :test を使うと、 perform_later のジョブはキューに溜まるようになる。 しかし、 ActionMailer の deliver_later で非同期送信を使っている場合にまでキューインされてし…

ActiveJob へのキューインの spec

まとめ ActiveJob::Base.queue_adapter = :test を使うと、 ActiveJob::Base.queue_adapter.enqueued_jobs にジョブが入る have_enqueued_job マッチャーでジョブが入っていることを expect する サンプルコード it 'enqueues PaymentIntentSuccessedJob' do…

aws-sdk-ruby で AWS CodeCommit の SSH キーを登録する

まとめ SSHキーペア生成は OpenSSL::PKey::RSA#generate を使う アップロードは Aws::IAM::Client#upload_ssh_public_key を使う 事の起こり 開発中のWebシステムでは、必要に応じてAWS上のリソースを生成しています。 CodeCommitへのコミットに使用するIAM…

WSLのバックアップとインポート

まとめ wsl --export と wsl --import インポートした後はデフォルトのユーザーが root になってしまうので、設定してやる必要がある .bat を書けばバックアップをとってからシャットダウン、もできる forest.watch.impress.co.jp 事の起こり WSL2をゴリゴリ…

AWS SDK for Ruby で EC2 ImageBuilder のパイプラインを作成する

まとめ Aws::Imagebuilder::Client クラスを使う 事の起こり EC2 ImageBuilder でゴールデンAMIを作成している EC2 ImageBuilder のコンポーネントを変更する際、それを使うようにパイプラインを更新するには、コンポーネント、レシピ、パイプラインとそれぞ…

ApplicationLoadBalancer で Basic認証

まとめ リスナールールで Authorization ヘッダーをチェックする Lambda で WWW-Authenticate: Basic を返す アプリケーションの実装なしに簡易認証できて便利 事の起こり ALB をフロントに置いたWebサイト 全体に認証をかけたい サーバー側コード等の変更は…

特定のActionで読み込み専用のレプリカを使う

ActiveRecord::Base.connected_to で包む class PostsController < ApplicationController around_action :set_reading_role, only: %i[index show] def index @posts = Post.all # :reading end def show @post = Post.find(params[:id]) @post.touch # => …

ACMでCAAエラーが発生したとき

まとめ CAAレコードが1つでも指定されている場合、指定にない認証局によるSSLサーバ証明書発行は失敗する CAAレコードに amazon.com が必要 事の起こり AWS Certificate Manager を使い、クライアント指定のドメインのサブドメインで Amazon 発行のSSLサー…

CodePipeline のアクションで AWS Lambda を実行する

まとめ CodePipeline のアクションとして AWS Lambda を実行すれば、いろいろなことができる たとえばRailsのdb:migrateをデプロイ時に自動設定したり、ECSスケジュールタスクを登録したり Lambdaのタスクロールを適切に指定すればAWSアクセスキーなしにAWS …

Windows10標準の機能でVSCode(でなくてもよい)+マイク音声を録画する

まとめ Windows 10 の標準機能 GameBar を使うと、任意のアプリケーションを録画できる マイクからの音声を含めることができる 事の起こり タケユー・ウェブでは、お客様からの技術的な質問に対してお答えする顧問的な業務もあります。 その中でVSCodeを使っ…

EC2 ImageBuilder コンポーネントのデバッグ

まとめ Terminate instance on failure を false にしてもテスト用のインスタンスは殺される S3へのログ保存は絶対に有効にしろ ステップはなるべく小分けに 事の起こり EC2 ImageBuilder でゴールデンAMIを作っている ある日昨日まで成功してたテストをパス…

AMI(EBSスナップショット)の使用量と料金を確認する

まとめ ボリュームサイズとスナップショットの使用量は別 スナップショットの使用量を知るにはコストエクスプローラーを使う EBS:SnapshotUsage (GB-Month) 使用タイプとコスト配分タグを組み合わせる 事の起こり 現在、EC2 ImageBuilder で作成したGolden A…

AmazonLinux2にgcc6をインストール(標準のgcc7と共存させる)

AmazonLinux2 標準の gcc は 7.x ですが、6.xがほしいときもあります。そんなときは Environment modules を使います。

Rais.env.development? みたいな文字列がその値か?真偽値をとれるやつを使いたい

こういうのです。 Rails.env.production? # Rails.env == "production" と同じ ActiveSupport::StringInquirer クラスを使います。 role = ActiveSupport::StringInquirer.new("admin") role.admin? #=> true ActiveSupport::StringInquirer activesupport/l…

Active::Recordのトランザクション復習

user = User.find(2) user.name = 'takeyuweb' user.save! User.transaction do # A user.name = 'takeyuweb(trA)' user.save! User.transaction do # B user.name = 'takeyuweb(trB)' user.save! end User.transaction do # C user.name = 'takeyuweb(trC)'…

RHEL6(CentOS6)のPerlでMTを動かすとき、MTEntriesのcategoryモディファイアで中国語を含むAND/ORを行うとエラー

こんなエラーが。 category属性でエラーがありました: (新闻 OR 其他) AND common 5.8.8 ・・・ エラーなし 5.10.1 ・・・ エラー(MT5.2 / MT6どちらでも) 5.14.2 ・・・ エラーなし というわけで、どうやらPerlのバグっぽい。正規表現(パターンマッチ演算子)でこ…

ERST: Error Record Serialization Table (ERST) support is initialized.

Logwatchを眺めていると --------------------- Kernel Begin ------------------------ WARNING: Kernel Errors Present ERST: Error Record Serializa ...: 1 Time(s) ---------------------- Kernel End ------------------------- Kernel Errors Present…

Object#to_param / Object#to_query(key)

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/conversions.rb https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/to_param.rb https://github.com/rails/rai…

Object#acts_like?(ActiveSupport)

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/object/acts_like.rb クラスに`acts_like_xxxx?`というメソッドを定義しておくことで、安全にダックタイピングできるようになります。 例えば、ActiveSupportによっ…

IDEA 13.0 から 13.1 にアップデート後、リモートインタプリタで /home/xxxx/.rubymine_helpers/rb/testing/patch/testunit/minitest/unit.rb:24:in `<top (required)>': LoadError (LoadError)

/home/xxxx/.rubymine_helpersを一度削除してから、リモートインタプリタを登録し直す。

yum updateしたら、nokogiriがエラーを吐いてサービスが停止した。

不覚。 クライアントから連絡が来て、障害発覚。 godで動かしていたrails scriptが再起動後起動に失敗していた。 [ec2-user@app-production-001 current]$ sudo service app-god status delayed_job: delayed_job-0: start delayed_job-1: start delayed_job…