サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
zenn.dev/hsaki
この記事について AWS SQSからメッセージを受けとって処理するLambdaを書いているときに、 標準キューだから順序保証されてないな、じゃあ順序バラバラできても捌けるように処理を書かないと! → ... → あれ???意外とこれ難しくない??? と思った経験、皆さんにもあるのではないでしょうか。 この記事では、筆者が上記のような壁にぶつかったときに「順序を保つってなんでそんなに難しいんだろう?」「保てないならどうやってそれに耐えうるようにすればいいんだろう?」と色々考察した結果を書いていきたいと思います。 使用する環境・バージョン 2024/6/22時点で提供されている機能に基づき考察 読者に要求する前提知識 AWSのSQS, SNS, Kinesis Data Streamがどういうサービスなのかは既知という前提のもとで書きました 順序セマンティクスとは 順序セマンティクスとは「イベ
この記事について 本記事は、筆者が普段AWSの各種サービスを使って感じた感想・気づきをもとに、クラウドアーキの設計やサービスのより良い使い方Tipsを考察するシリーズです。 第二弾も第一弾に引き続きDynamoDBについてです。 DynamoDBはkey-value型のNoSQLであり、従来よく使われていたRDBとは異なるDB特性・クエリ特性を持っています。 そのためRDBを設計するときと同じようなノリでスキーマ設計・テーブル設計を行うと、後から「この操作をやらせるならDynamoDBじゃないほうが良かったんじゃないか?」ということが発覚しがちです。 本記事では筆者が遭遇した「DynamoDBでやらせてみたら苦労した・できなくて設計変更を強いられた」というユースケースをまとめることで、DynamoDBのクエリ特性や適性を考察することを目指します。 使用する環境・バージョン 2024/1/1
テーブル内に格納されているメールアドレスのデータを使って、1日ごと、1週間ごとに全ユーザーに対してメールを送信したいというバッチがあったとしましょう。 とある1人のユーザーのメールアドレスを調べること自体はQuery操作で可能ですが、バッチ処理の性質上それを全ユーザーに対してやると考えると、実質的にはテーブル全Scanと同等の処理が要求されてしまいます。 システムを利用しているユーザーから登録情報の参照・変更を随時受け付けるたびに、このテーブルへのCRUD処理が行われます。そのため、このテーブルへの全Scanはユーザー体験を損なう可能性が高いです。 解決策の模索 「とあるテーブルに対してバッチで大量アクセスするのを防ぎたい」という要件に対して、考えられるアプローチを挙げてみます。 リードレプリカの作成 コピーテーブルの作成 リードレプリカの作成 RDSやAuroraの場合は、同じデータを持
GraphQLはリクエストクエリを書くことで、必要な分のデータを柔軟に取得することが可能なAPI形式です。 RESTとは違うその仕組みはクライアント目線ではとても便利なものですが、サーバーサイドに立ってみると無限の組み合わせがあるリクエストクエリに一体どう対処しているのか不思議に思う人もいるでしょう。 この本では、Goのgqlgenというライブラリを用いてGraphQLサーバーを作る過程を通して、サーバーサイドGraphQLを理解・開発するのに必要な知識を解説していきたいと思います。
この記事について 今年の7/27にGitHub Projectベータと呼ばれていたものがGAになりました。 新しくGAになったProject(以下ProjectV2と書きます)は、 フィールドを用いて、アイテムに様々なメタデータを追加できる カードに設定した様々なメタデータごとにかんばんを作ることができる アイテムのグループ化・ソート・フィルタが簡単にできる 日付・各種メタデータを軸として指定したグラフを作ることができるので可視化が簡単 といった、classic Projectではできなかったあれこれが一つのProjectでできるようになっており、とても便利になりました。 そしてProjectV2がGAした今、一部例外を除いてclassic Projectを新規作成するというのはできなくなっています。 そのため、ProjectV2への移行というのは今後どんどん進んでいくと思われます。 Yo
gRPCは主にバックエンド、特にマイクロサービス同士の通信に多く使われる通信方式です。 しかしそれゆえに知名度が低く、「gRPCってどんな通信なんだろう?」「HTTPとは別の仕組みなの?」と思っている方もたくさんいるのではないでしょうか。 この本では、gRPCはそもそもどんなコンセプトで作られた通信方式なのかから、Goでの具体的な実装ノウハウ、AWSにデプロイするための設定までを通貫して解説することで、 「gRPC全くわからない」という人が「自分で実装して動かせそうな気がする……!」と思える段階までたどり着けるようにしました。
この記事について GitHub Actionsには、以下3つの実行単位が存在します。 Workflow Job Step パイプラインを組む中で出てくる複数個の処理を、1つの実行単位でまとめてしまうか、それとも分割するのかというのは悩むポイントかと思います。 一つのstepのrunフィールドにコマンドを詰め込む?それともstepを分けた方がいい? 一つのJobの中のstepとして記述した方がいい?それとも別のJobに定義した方がいい? 一つのWorkflowの中にJobをたくさん定義する?それともWorkflowを別にする? この記事では、Workflow・Job・Stepそれぞれの性質を踏まえた上で、ベストな処理単位の選び方を考察します。 使用する環境・バージョン GitHub Actions: 2022/5/15時点での機能をもとに考察 読者に要求する前提知識 GitHub Actio
背景 AWSに載せてなんやかんややるというコードは、「使用例が豊富」という理由でboto3で実装となることが多かったのです。 その度にGopherの私は「動的型付けのPython使いづらいよう(注: 個人の意見です)」「try-catchじゃなくてerrをreturnするのが一番わかりやすいよなぁ?(注: 個人の意見です)」「使い慣れた言語で実装したら絶対楽だよなあ」と内心思っておりました。 そしてこの度ついにGoで実装していいよという機会をいただいたので、これ幸いにAWS SDK for Goを使い始めたのですが、その感想が「なんか……思ったほど楽になってない……」でした。 なんでこういう感想になるのかなあというのを明らかにしたい 好きな言語で快適にAWS SDKを触るノウハウや思考メソッドを見出したい という目的のもと「AWS SDK for Go」の使い心地を深く掘り下げたいと思いま
この記事について 上のチートシートは、Goで時刻を扱う際に出てくる表現法と、それらを互いに変換するためにはどうしたらいいのかを一枚の図にまとめたものです。 この記事では、このチートシートに出てくる処理の詳細について掘り下げて説明しています。 使用する環境・バージョン OS: macOS Catalina 10.15.7 go version go1.18 darwin/amd64 OSのタイムゾーン: JST(日本標準時、UTC+0900) 想定読者 この記事では、以下のような方を想定しています。 Goの基本的な文法は分かっている人 異なる時刻の表現法を、Goではどのように変換することになるかを知りたい人 逆に、以下のような方は読んでも物足りないか、ここからは得たい情報が得られないかもしれません。 一般的にサーバーサイドで、どうすればタイムゾーンを正しく扱うことができるかを知りたい人 タイ
本業: クラウドエンジニア/Go言語をよく書いてます/2023 Japan AWS Jr. Champions
この記事について この記事はGo Advent Calendar 2021 13日目の記事です。 記事のテーマはencoding/jsonパッケージにおけるjsonエンコード・デコードの扱い方についてです。 普段私は、 MarshalとUnmarshalってどっちがGo→jsonでどっちがjson→Goなんだっけ? タグでマッピング規則をいじれるのはエンコードとデコードどっちだっけ? 非公開フィールドってどういう扱いになるんだっけ? などというところがうろ覚えでパッと出てこないので、この際なのでまとめてしまおうということで前半部分を書きました。 また記事後半では、私が今年読んだとある本の内容に基づいてGoでのjsonデコードが持つ性質を好き勝手に考察してみました。 25日に向けてちょうど折り返しの位置ですが特におもしろネタ要素はなく、普通に私の書きたいことをひたすら真面目に理屈っぽく書いて
この記事について この記事は、先日公開したZenn本Deep Dive into The Go's Web Serverのメイキングです。 「技術記事ってどうやって書いてるの?」というアウトプット初心者の方々に、あくまで私のやり方ではありますが、メイキング情報をお届けできればと思います。 想定読者 Deep Dive into The Go's Web Serverを読んでいなくてもわかるようにはしていますが、読んでいただいた方がより楽しめるかと思います。 書き始めるまで 突然訪れたネタとの出会い 「Goでのhttpサーバーの中身について書こう」というネタが降ってきたのは、前作であるよくわかるcontextの使い方を書いているときでした。 この本はGoでのcontextパッケージの使用用途をまるっとまとめた本なのですが、contextの機能を実際にフルで使っている例(→第9章)として「ht
Goのnet/httpパッケージはとてもよくできており、Webサーバーを動かすのに必要になる「httpコネクションを確立してリクエストを読んでルーティングして……」という手続き的な処理を気にせずとも誰でも簡単にWebサーバーを立てられるようになっています。 ですが、そのnet/httpが代わりにやってくれている「裏側の処理」の部分が気になる、何やっているんだろう?と不思議に思っている方はいませんか? この本では、実際に筆者がnet/httpパッケージのソースコードを読み込んだうえで、「GoのWebサーバーがどのような仕組みで起動・動いているのか」というところについて、図を使いながら解説しています。
Goの標準パッケージにはcontextパッケージというものが存在します。 このパッケージは、net/httpやdatabase/sqlのような現実の事象と対応している何かが存在するようなパッケージではないため、初学者にとっては使い道がわからない、となってしまいがちです。 しかしcontextパッケージは、複数のゴールーチンを跨いだ処理を実装する際には非常に強力な力を発揮する、とても便利なパッケージなのです。 この本では、「contextとは何か?」というところから「どのように使えばいいのかわかる」ところまでたどり着けるように、Goのcontextまわりのことを解説しました。
この記事について Goの実装というのは基本的にはGo言語そのもので行われますが、runtimeパッケージやmath/bigといった低レイヤ・マシンと密接に関わる部分に関してはGoアセンブリで実装されています。 そしてGoアセンブリについては、公式ドキュメントであるA Quick Guide to Go's Assemblerにある程度の説明が記載されています。 この記事では、前半ではドキュメント"A Quick Guide to Go's Assembler"を読むために必要になる前提知識をまとめ、後半ではドキュメントの翻訳を行います。 使用する環境・バージョン go version go1.16.2 darwin/amd64 想定読者 この記事では、以下のような方を想定しています。 runtimeパッケージやmath/bigパッケージ内に存在するアセンブリを読んで、何やってるのかある程度
次のページ
このページを最初にブックマークしてみませんか?
『さき(H.Saki)さんの記事一覧』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く