Anti-Pattern Inc. Engineering Blog
Anti-Pattern Inc.(株式会社アンチパターン)のエンジニアブログです。
Home
About
Corporate Site
About
re:invent 2022 振り返り
こんにちは。アンチパターンの岩村です。 2022年11月28から12月2日までのre:inventに参加した際の記録を残せていなかったので、いまさらですが記録として残したいと思います。 re:inventに行くにあたってあまり準備もできずに参加してしまったので本当に準備不足による反省がたくさんあったので書いていきます。 現地で印象強かったもの 兎にも角にも会場の広さや雰囲気も含めすべてのスケールが想像以上でした。 基調講演は最終日だけ参加したのですが、Dr. Werner Vogelsさんが発表しているのを生で聞いて会場の盛り上がりを直接体験できたのはすごく印象に残っています SessionやExpoの展示を見ても幅広い分野での製品に関わっているのを感じました。その中でもF1の世界でもAWSを利用することで今まで60時間かかっていたことを12時間まで削減できたなど元々AWSの事例として発表されていたことではありましたが、初めて知った事例などもあり自身の知識が拡張されてとても良い経験でした。 印象に残っているセッション 現地参加時の業務で大学生がメインとなり開発を進める際にチ
CypressとPercyでVRTを導入したら真っ白でした
初めまして!アンチパターンの安澤です! 今年の4月に転職して、当ブログの記事は初投稿となります。普段はフロントエンドを中心に AWS 関連の作業まで広く対応しております。 この記事では本業とは別で携わっているシステムに Visual Regression Test (VRT) を導入した話について、はまった点などを紹介させていただきます。 このシステムは、React + Express というよくある (?) 構成のWeb アプリケーションなのですが、全体的にテストが実装されていませんでした。 そのため、改修時にデグレ確認などが難しいという課題を抱えており、Cypress を使用した E2E テストの導入を進めていたので、合わせて UI などの崩れを検出するために VRT の導入を行いました。 Cypress を使用した VRT の導入に関しては公式ページ [https://docs.cypress.io/guides/tooling/visual-testing] にもいくつかの方法が紹介されています。今回は、紹介されている中でも Percy という SaaSを利用すること
環境変数について改めて考える
こんばんは!やがさきです。 今回は改めて環境変数について考えてみます。みなさん、環境変数使ってますよね?どんな場面で使ってますか?そりゃ、名前の通り環境ごとに変えないといけない値を入れてますよね。でも、それ、本当にそれは環境固有の情報ですか?なんでもかんでも環境変数にしちゃってませんか?1実行環境に環境変数が100個超えちゃってたりしますか?そして、その環境変数ってどうやって管理してますか?また、パスワードやクレデンシャルなどのシークレット情報も環境変数で管理してますか? このあたりを改めて考えてみたいと思います! 環境変数にすべき値 では、まずどんな値を環境変数にすべきかを改めて考えてみます。名前の通り、環境によって変わる値を環境変数にすべきなのは当然かと思うのですが、これをそのまま地でいくと、だいたいすごい数の環境変数になっちゃいます。そうすると、環境変数をメンテしたり設定したりするだけでひと仕事になりますし、どの環境変数をどうするとどんな挙動になるのかを理解するのが非常に困難になり、環境変数職人みたいな謎のスキルを持った人が爆誕したりします。これはかなりしんどい状況であ
SaaSus Platform
,
Stripe
SaaSus PlatformとStripeを連携して請求書を作成する
こんにちは、郡山です。 今回は 「SaaSの開発から運用まで」の支援を可能とするツール SaaSus Platform と Stripeを連携して請求処理を行い請求書を作成します。 SaaSus Platform についてはこちら https://saasus.io/ Stripe に関してはこちら https://stripe.com/jp Stripe の コンソールの開発者ページ->APIキータブからシークレットキーを取得してSaaSus Platformへ設定します。 Stripeのシークレットキーは SaaSus Platform の SaaS 開発コンソール、 外部連携 > 請求 ページで設定して保存します。 請求元情報の入力 Stripeの設定画面より、請求書テンプレートを開きビジネス情報で設定します。 料金プランの作成、SaaSus Platform の SaaS 開発コンソールの料金プランページで設定します。 今回は「基本料金」を持つプランの設定を行います。 固定ユニット計測単位を作成します > ユニットは料金のベースとなる最小の計測単位の設定と
draw.ioでレイヤーを使ったらAWS構成図が捗ったお話
AWSを使っている方なら、dwar.ioを使って構成図を書く機会が結構あると思います。構成図を書く時のイラッとをなくすレイヤーという機能を知ったのでご紹介したいと思います。え?今更知ったの?そんなの知ってるよ。と言われちゃうかもですが、ご紹介させてくださいませ。 その前に、構成図書く時にどう書いたら良いんだろう、、、となる時ありますよね。参考にしている良い記事あるのでご紹介させてください。今まで結構雰囲気で書いていたのですが、この記事を見てから綺麗にかけるようになりました。 AWSのアーキテクチャ図を描くときに意識していること [https://zenn.dev/k_i/articles/6d76e43aa3bd84] それではレイヤーのお話に行きたいと思います。ECSコンテナを編集したい場合、まずレイヤーを使っていないときは、こうなりますよね。 邪魔なのをどかしてどかして、やっと編集できます。次回すぐ編集できるように最前面に移動することもあるかと思います。これレイヤーを使うとこんなこととはさよならです。 dwar.ioの画面で、表示 - レイヤー と選択してレイヤーウィンドウ
クラウドでスマホアプリを作りたい📱⛅
■結論 * クラウド上でスマホアプリは開発できる * 不安定さはハマりどころはいくつかあるものの、ちゃんと動く ■使ったもの * GitHub Codespaces * AWS Amplify * React Native ■背景 普段は WEB 開発を行っているメンバーで、スマホアプリ開発に挑戦してみようという話になりました。ただし、「クラウド上で」開発を行うという制約付きです。 ■技術選定について ◯ GitHub Codespaces GitHub Codespaces [https://docs.github.com/ja/codespaces/overview] を使うと、GitHub が提供するサーバー上で開発環境を構築することができます。今回はこちらを起点にして環境を整えていきました。 特に、今回は VSCode 上で Codespaces を立ち上げて開発をしました。ポートフォワード先が localhost になるのでこちらが便利です。 ◯ React Native せっかく作るならクロスプラットフォームでいきたいよね、ということで Flutter
Cloud Run
,
Litestream
,
sqlite
Cloud RunとLitestreamで最強コスパ運用
Cloud RunとLitestream、GCSを使用して、SQLiteを使用したGoアプリケーションを格安運用していこうと思います。 FirestoreなどのNoSQL DBを使っても安く運用できますが、RDB使いたいというときもあるということで。 作ったもの GitHub - kooooohe/litestream-cloud-runContribute to kooooohe/litestream-cloud-run development by creating an account on GitHub. GitHubkooooohe [https://github.com/kooooohe/litestream-cloud-run]\]簡単な構成 Litestream LitestreamLitestream is an open-source, real-time streaming replication tool that lets you safely run SQLite applications on a single node.Litestream [ht
Go
Goのサーバーでcontext canceledをハンドリングする
はじめに Goでecho [https://github.com/labstack/echo]を使って以下のようなサーバーを作っていました。 var db *sql.DB func main() { e := echo.New() e.POST("/", func(c echo.Context) error { ctx := c.Request().Context() // 自身の管理するDBに保存する db.ExecContext(ctx, "INSERT INTO ...") // 別のサーバーで管理するDBに保存する req, err := http.NewRequestWithContext( ctx, http.MethodPost, "http://localhost:8081/", nil, ) if err != nil { return err } res, err := http.DefaultClient.Do(req) ... return c.NoContent(http
Goの関数内で引数の値を書き換えた時の影響
はじめに 関数の引数の値を書き換えた時、呼び出し元で渡した変数の値にも影響がある場合があります。どのような場合に影響があるのか、定期的に忘れるため書き残しておきました。 調査 以下の構造体で試してみます。 type TestStruct struct { Value User Pointer *User ValueSlice ValueUsers PointerSlice PointerUsers } type User struct { ID int } type ValueUsers []User type PointerUsers []*User 関数の引数に渡したとき、各フィールドのポイントインタがどうなるかを確認します。 package main import ( "fmt" "os" "strings" "github.com/olekukonko/tablewriter" ) func main() { a := TestStruct{ Value: User{ ID: 1, },
GitHub
,
Agile
自称日本一GitHub Projectsを使っているのでどう使っているか紹介する
こんにちは。 自称日本一GitHub Projectsを活用している CEO兼VPoEの小笹です。 本稿では、株式会社アンチパターンにおいて、実際にどのようにGitHub Projectsを使っているのかについて共有させていただきます。 ■目次 * 何故GitHub Projectsなのか * ISSUEラベル * イテレーション * Workflows * ビュー * Task lists(親子ISSUE) * マイルストーン * ISSUEテンプレート * Insights * 今後やれるといいなと思っていること 何故GitHub Projectsなのか * ソースコードの管理と同じプラットフォームでネイティブに連携していること * 複雑な要求に応えようとすると管理も複雑になるが、機能がシンプルなため思考の制限がかかってちょうど良かったから * 定期的にアップデートがあって今後も期待できる 上記理由からGitHub Projectsをどこよりも活用してみるぞ!という意気込みで頑張りました。 ISSUEラベル まずは基本となるラベルの設計です。
GAS
,
date
,
summertime
,
newyork
,
tokyo
GASの日付処理 SummerTimeで涙
Googleフォームで申し込みフォームを作っているのですが、直前に申し込みがあると対応慌ててしまうので、2日後以降に申し込みが出来るようにしています。 GASを日次で起動して、プルダウンの日付を更新する処理を実行してます、処理は以下の感じです。 function myFunction() { const form = FormApp.getActiveForm(); var items = form.getItems(FormApp.ItemType.LIST); items.forEach(function (item) { if (item.getTitle() == '日付のプルダウン') { var listItemQuestion = item.asListItem(); var choices = []; let date = new Date(); date.setDate(date.getDate() + 2); for (i = 0; i < 30; i++) { c
tRPC
,
deno
,
TypeScript
tRPCをDenoで試す
巷で噂になっているtRPCを触ってみたいと思い、せっかくなんでDenoで動かしてみました。 普段はOpenaAPIを使用している。そこからClient,Sever両方にコードを生成し、ClientからはSever側で実行される同じ名前の関数を実行してリクエストを飛ばしているため、RPCっぽい挙動になっている。 ※ ClientはReactで動かそうと思いましたが、それはまた次回。 RPCとは > >Remote Procedure Call is a software communication protocol that one program can use to request a service from a program located in another computer on a network without having to understand the network's details. RPC is used to call other processes on the remote systems like a local system. A pr
Page 1 of 14
Next