タケユー・ウェブ日報

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

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 = <

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)'…

Shinjuku.rb #37 でSQSとかについて話してきました

shinjukurb.doorkeeper.jp Shinjuku.rb に参加して話をしてきました。 非同期処理は管理画面とかに比べるとちょっと取っつきづらいのか人少なめでしたけど、そのぶんしっかりディスカッションできた気がします。

ruby aws sdk v2 SimpleWorkFlow(Aws::SWF::Client)メモ

swf = Aws::SWF::Client.new 失敗したExecutionを取り出す WORKFLOW_DOMAIN = 'myworkflowdomain' resp = swf.list_closed_workflow_executions( domain: WORKFLOW_DOMAIN, start_time_filter: {oldest_date: 24.hours.ago}, close_status_filter: {status: …

OpsWorks (Chef11) で ERROR: cannot load such file -- /var/lib/aws/opsworks/cache.stage2/cookbooks/compat_resource/files/lib/compat_resource/gemspec

いつも通りアプリのデプロイをしようとしたらエラー。 [2016-05-18T22:55:06+00:00] INFO: Loading cookbooks [apache2, apt, ark, build-essential, chef-sugar, chef_handler, compat_resource, curl, dependencies, deploy, gem_support, homebrew, mingw…

WEB+DB PRESS vol.92 ざっくりまとめ

全体的になかなか実用的な内容だった。 また新連載も今後いろいろ役に立つ記事が生まれそう。 以下ざっくりまとめ