カミナシ エンジニアブログ

株式会社カミナシのエンジニアが色々書くブログです

Go の検索結果:

円安を乗り越えるための Arm アーキテクチャへの移行が完了! そのプロセスを公開します

…ではサーバサイドに Go 言語を採用しています。 Go はクロスコンパイルが言語レベルでサポートされているため、アプリケーションコードの修正やモジュールの変更は必要ありませんでした。詳しくは後述しますが、今回も Dockerfile とビルドパイプラインの変更だけで対応できました。 ECS で実行されるタスクを移行する大まかなステップは次のとおりです。 multi-platform image を作るために Dockerfile を修正する ビルドパイプラインで multi-…

フロントエンドから Amazon S3 にマルチパートアップロードしたい

AWS

…にはバックエンドは Go、フロントエンドは TypeScript を使用しています。 🗒️ 方法1: 一時的なIAM クレデンシャルをフロントエンドアプリケーションに渡すパターン。それを用いてフロントエンドで 3 step の処理を実行する 方法1のフロー 🗒️ 方法2: フロントエンドでは Presigned URL による UploadPart のみを行うパターン。アップロードの開始・終了はバックエンドで行い、バックエンドで part 分の Presigned URL を…

Amazon S3 へのファイルアップロードで POST Policy を使うと、かゆいところに手が届くかもしれない

AWS

…g?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=HOGEHOGE%2F20240226%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Date=20240226T142939Z&X-Amz-Expires=60&X-Amz-Security-Token=IQo...3D&X-Amz-SignedHeaders=host&X-Amz-Signature=032a...17 Amazo…

【AWS re:Invent 2023】自社専用 chatbot を作る AWS の新サービス "Amazon Q for general business use" が面白かった

…が、GitHub, Google Workspace, Slack, Notion 全てを連携させられるようになれば、とてつもない価値が出せるのではないかと思います。 最後に、サマリーのスライドの写真をとっておいたので、共有いたします。 セッションのサマリ(1枚目) セッションのサマリ(2枚目) 最後に 今回カミナシからは、私を含め 4人のエンジニアが AWS re:Invent 2023 に参加しました。 (確約はできませんが、)カミナシのエンジニアになれば、AWS re:…

【AWS re:Invent 2023】ラスベガスで開催されたAWS GameDay Championshipsで優勝しました 🙌

…。また、DeepL、Google翻訳、Otter.aiなどテクノロジーで解決できる部分もあるでしょうし、画面を見ながら指差しで意思疎通することも可能です。 今回も、ちょっと早いコミュニケーションについていけなくなったタイミングで、チームメンバーにあまり英語が得意ではないことを伝えていたので、問題に行き詰まっても一緒に画面を見ながら作業して解決することができました。 ここまで読んで英語ができなくても大丈夫なんだ!と思われたかもですが、そんなことはないです。 英語ができなくてもよ…

【AWS re:Invent 2023】Amazon Bedrock の Workshop に参加しました

AWS re:Invent 参加中のソフトウェアエンジニアの内田(@A2hiro_tim)です。 “Build and scale generative AI applications with Amazon Bedrock” という Workshop Session に参加しました。 Workshop Session は、まず簡単に Amazon Bedrock の概要を10分ほど話して、そこから用意された 資料の説明に沿ってひたすら進める形式でした。資料はおおまかに以下の…

カミナシのセキュリティチャンピオンは誰だ!?「ごーとんカップ 2023」を開催しました

…自分自身作問過程で、Go言語でSQLインジェクションって難しいんだなーとか色々と気付きや学びがありました。ただまあ、言語関係なくSQLインジェクションが起きがちな実装というのはあって、Goでも同様にSQLインジェクションが発生することがわかり、無事(?)に、不正に情報が取得できるというシナリオを作ることができました。 実際にエンジニアのみなさんもソースコードを見てSQLインジェクションの脆弱性があることに気付いてくれたようで、こういう実装はいけないんだなという注意喚起になった…

オンライン DDL を期待して ALTER 文を実行したら障害になりかけた話

… 文に明示的に ALGORITHM=INPLACE と LOCK=NONE を付けて実行してみました。 すると、オンライン DDL で実行できると思っていた ALTER 文がエラーになりました。 mysql> ALTER TABLE users ADD COLUMN foo VARCHAR(36) DEFAULT NULL AFTER bar, ALGORITHM=INPLACE, LOCK=NONE; ERROR 1846 (0A000): ALGORITHM=INPLAC…

インフラ初心者がゼロダウンタイムでECS clusterの切り替えに挑戦した話〜式年遷宮〜

…ikinen-sengoo-infrastracture/ 今回初めて式年遷宮という言葉を知りました。三重の伊勢神宮で20年に1度行う儀式で(リンク)、新しい社殿を造って御神体を遷すことだそうです。これに準えて、インフラでは維持管理のため、一定期間で更新するような取り組みを指すようです。 既存であった問題点 大きく3つあった問題がどのようなものだったのか?具体的にご紹介します。 1.リリースパイプラインの問題 カミナシでは、Dev環境とProd環境でAWSアカウントを分けて運…

Security-JAWS DAYSで登壇したAmazon Verified Permissionsについての補足

…なことを考えていたらGoogleは、Tool Proxyというものを作成していることを知りました。いわゆるZero Touch Production(ZTP)を実現するもので、これは簡単にいうと人間がプロダクション環境を直接触ることができなくするというものです。人間が直接アクセスできなくすればセキュリティの向上が見込まれる一方、利便性が悪くなる可能性があります。どうしても本番環境でコマンドを実行したい!という状況が訪れた場合に「どうしたらいいの?」となってしまっては本末転倒で…

Feature Flags の仕組みを整備して、デプロイとロールアウトの分離を加速させた

AWS

…、バックエンドでは Go、フロントエンドは TypeScript を主に使用しています。 本記事における「Feature Flags」 Feature Flags と一口に言っても様々な種類がありますが、本記事の以降の記述は、以下のイメージを持って読み進めていただければと思います。 システムを利用するユーザーの属性に応じて、機能のON・OFF(公開・非公開)を切り替える仕組み ON・OFF の切り替えは、(できるだけ)ソースコードの修正やデプロイを伴わずにできる Featur…

カミナシはGo Conference 2023にスポンサー参加します!

Gopherの皆さん、こんにちは! カミナシのHRでエンジニア担当している木村です。 来る2023年6月2日金曜日にGo Conference 2023が開催されますね。 カミナシはシルバースポンサーとして参加させていただきます! Go Conference 2023 今回もオンライン開催となりますが、オフィスアワーでカミナシのブースを出させていただいています! ブース内ではテーブルを2つ設けており、カミナシのソフトウェアエンジニアが常時2名以上おりますので、ぜひお気軽にお声…

技術的負債になりかけていた機能をリアーキテクティングしたら、めちゃくちゃ改善した話

…アプリケーションは Golangで実装されておりgoroutineで変換処理を並列化していました。 正直な話をすると、当時の技術選定について知る方がおらず、このアーキテクチャの意図や背景はよくわかっていませんでした。 設計当初のアーキテクチャ 問題1 タイムアウト問題 このアーキテクチャで最初に起きた問題は、CodeBuildがタイムアウトするという問題でした。 1回のバッチで処理する件数は利用者側の設定に依存するため、利用者のニーズにあわせて変動します。 そのため月末月初の…

開発の作業状況を見える化。Jira + GAS + Slack Botで作業の透明性を高める仕組み作り

…ださい。 docs.google.com このシートのうち、「JIRA Master」のシートにはプロジェクト内にあるJiraチケット群を一括で取得する必要があります。 2. Jiraプロジェクト内にあるチケットを一括で取得 今回Google Workspace内にある以下の拡張機能を用いて、Jiraチケット群を一括で取得していきます。 workspace.google.com こちらの拡張機能を入れることにより、Jira上のチケットを定期的に処理を走らせデータを最新の状態に…

Goでスタイリッシュにエラーをラップする方法を学んだ

Go

… です。 つい先日、Goで有名な@tenntennさんがConnpassで募集していたGopher塾#2に参加させていただきました。 tenntenn.connpass.com 大変勉強になりおすすめです!筆者が参加したのは第一回目ですが、二回目三回目と予定されているようなので、有料講義ではありますが気になる方はぜひ参加してみてください!学生さんであれば無料の抽選枠もあります。 その際に紹介されていたコードで、エラーのラップ関数があったのですが、これが「メッチャアタマイイ!!…

初参加して学んだ AWS re:Invent の過ごし方 〜やって良かったこと・やれば良かったこと振り返り〜

…5f0g— Shingo 吉田真吾 (@yoshidashingo) 2022年12月1日 かなりの距離を移動することになるのでスニーカーなど歩きやすい靴にするのはもちろん、荷物も最小限にしておくのが良いです。 荷物が多いと移動及び待機時の足肩の負担になったり、大きな会場では手荷物検査もあるので荷物が大きいとそれだけチェックが大変になるためなるべく最小限のコンパクトなリュックなどで挑んだ方が良いです。 (筆者は初日バタバタしてとりあえず適当に荷物をリュックに詰めて行ったら手荷…

Goでダブルポインタを知った話

Go

…リズムやデータ構造、Goのキャッチアップしています。 そんな中、go.devのブログ Go blog のとある記事でダブルポインタを使用するコードに出会いました。筆者は今まで、RubyやJavaScript/TypeScriptなどの言語を多く触っていたためか、お恥ずかしながらダブルポインタを使うコードを初めて見たので「なんなのだこれは…」と戸惑いました。本記事ではそんなダブルポインタが使われていたコードについて、簡単にご紹介したいと思います。 そもそもダブルポインタとは? …

サーバサイド ( をメインでやっていた ) エンジニアが React Native と Expo でモバイル開発に入門した話

…スマホに Expo Go をインストールしてPCと同じWi-Fiに接続します。Androidの場合、Expo Goアプリを使用して、iOSの場合は、iOSのデフォルトのカメラアプリに内蔵されているQRコードスキャナーを使用してプロジェクトを開きます。 自分のスマホで動かしてみるのに必要なのはたったこれだけです。 めっちゃ簡単ですね。 また、Hot Reload に対応しているので、コードを変更すると即座にスマホ側に反映されます。 やってみた感想 僕の勝手なイメージで、モバイル…

【登壇資料】「BtoB SaaSにおける技術課題との向き合い方」 で「デスクレスSaaSが向き合う、現場DXのための技術課題」というテーマで登壇してきました。

…りましたので、現在はGoルーチンを利用して関連データを並行して取得するようにしております。 こちらも、アプリケーションの修正でなんとかなるレベルですので、DB構造の抜本的な見直しはまだ行っておりません。 今後、さらにアプリケーションやデータ量が大きくなるタイミングで全体的な改修を行いたいと考えております。 詳しい対応については過去のブログ記事で書いておりますので、よければそちらも参考にしていただけると幸いです。 kaminashi-developer.hatenablog.j…

Google Workspace カレンダーの大事っぽい予定に自動で色付けしてくれる GAS スクリプトを書きました

GAS

…です。みんな大好き Google Apps Script (GAS) の小ネタです。 TL;DR 業務で使っている Google カレンダーの 外部の方がいそうな予定 オフィスとかに出社が必要そうな(≒大好きな家から出なきゃいけなさそうな)予定 あたりに、自動で「色ラベル」を付けてくれるスクリプトを GAS で書きました。 以下のような感じで、いかにも他のと違って目立つよね!という感じに色を自動で付けてくれます。例えば僕のカレンダーだと、緑色のラベルを外部の方がいそうな予定(…

顧客企業のネットワーク構成によりReact Native + ExpoのOTAアップデートが動作しなかったのを突破した話

…App StoreやGooglePlayといったストアを経由せずにアプリのバージョンアップデートを配信する仕組みを指します。 通常、ストアでの審査を通すと審査を経る分待ち時間が発生しますが、OTAアップデートなら素早く最新バージョンのアプリを配信できるわけです。 事の経緯 一部のお客様で、ExpoのOTAアップデートしても最新バージョンのアプリが配信されていないという現象が発生しました。 「カミナシ」はtoB向けサービスであり、これまでの経験から、まずはMDM製品を導入してア…

Goのreflectパッケージを使って構造体の指定フィールドをゼロ値にしてみた

Go

…ーバーサイドの開発をGo言語で行っています。 社内用管理画面のAPIを実装をしていたところ、とある処理の中で「構造体の指定したフィールドをゼロ値にして処理をしたいな🤔」という場面に遭遇しました。利用している OR マッパーが SQL クエリを構築する際、構造体のフィールドがゼロ値ではないと自動的にそれらがクエリに組み込まれるという仕様であり、その仕様を回避したかったためです。もちろん、オプションでこの仕様を回避する方法は提供されていますが、既存のモデル構造体を変更することは出…

【登壇資料】弁護士ドットコム様 × カミナシ共催イベント「憧れのマイクロサービスと愛すべきモノリスの話」にてLTしてきました

カミナシ・エンジニアリングマネージャーの @dmi8a です。 先日行われた 弁護士ドットコム様 × カミナシ共催イベント「憧れのマイクロサービスと愛すべきモノリスの話」 にて「カミナシの開発組織の現在地 〜個人集団からチーム化へ〜」というタイトルで発表してきました。 概要 「カミナシ」というサービスは、その名の通り、様々な紙の帳票を無くす効果がある(デジタル化する)サービスですが、 それだけではなく、紙の帳票を使って行われる様々な業務フローまでをもデジタル化するサービスです…

GORM で出力されるログの SQL と実行される SQL が違った話

… コード読んでみた go-sql-driver/mysql のコード GORM のコード まとめ きっかけ 現在、カミナシの開発では、サーバサイドの言語は Go 、ORマッパーとして 「GORM」 を使い、DB には Amazon Aurora MySQL を使っています。 ある日、開発中に GORM が吐いてくれるログで query を調べていると、アプリケーションの実行中は結果が取れていないのに、その query をコピーして、手動で MySQL に投げると結果が取得でき…

0=>1フェーズの技術的負債を解消する第一歩@バックエンド編

Go

…います! 開発環境 Golang: 1.16 Amazon Aurora MySQL 5.x系 Gorm: v1.9.16 Datadog APM 要約 パフォーマンス劣化しているエンドポイントの全体を見直しました 処理フロー for文で毎回Insert処理していないかの再確認 処理順番が適切かどうかの再確認(機能追加でサッと追加してしまっていないか、まとめて処理できないかなど) Gorm(ORM)の見直し Preload 便利だがすべて一つずつSQLを発行するため、一つが早…

ECSタスクで1時間おきにRDS Auroraのスナップショットを取得する

…はバックエンド開発にGolangを利用しており、私を含めPython or Node.jsに長けたエンジニアがあまりおりません。 過去にAWS SAMを利用した記事を書かせていただいたとおり、それらを利用してGoでも書けなくはないのですがやはり手間がかかります。 現時点でAWS SAMを本番運用している実績もないことからこの案も見送りとしました。 案3) AWS ECSタスク 最終的に検討した案がECSタスクの利用です。 ECSタスク(Fargate)はプロダクトのAPIサー…

multipart/form-data形式のファイルが突然アップロードに失敗する問題を仮説を立てながら解決する話

…こちらへ 開発環境 go - v1.16 echo - v3.3.10+incompatible aws-sdk-go - v1.42.46 Mobile ( React Native + Expo ) 問題の確認 @dmi8a さんが予め調査をしており、以下の共有を受けました。 AWS S3にファイルアップロードする際に UploadWithContext メソッドを使っていて、ここでエラーを出力している。 S3 UploadWithContextに関する調査は行い、Par…

【登壇資料】Go Conference 2021 Autumn に登壇してきました

…です。 先日行われたGo conference にてgoldスポンサー枠にて登壇してきました。 gocon.jp kaminashi-developer.hatenablog.jp 本日は、その際のカミナシ側の登壇資料を紹介します。 発表趣旨 カミナシではバックエンドのAPIサーバーの開発にGolangを利用しております。 カミナシからは「ノンデスクワーカー向けノーコードサービスのつらみ・うまみ」というタイトルにて、 デスクレスSaaSというあまり前例の無いサービスにおいてG…

Go Conference 2021 Autumn に "Go"ld Partners として協賛・登壇します!

…PIサーバーの開発にGolangを利用しております。 (Goの採用に関しては過去のこちらの記事もご覧いただけると幸いです) Go Conference に "Go"ld Partners として協賛させていただけることとなりました! OSSの恩恵を受けプロダクト開発をさせていただいている弊社ですが、この度Go Conference 2021 Autumn に "Go"ld Partners として協賛させていただくこととなりました! gocon.jp gocon.jp カミナ…

インフラ未経験エンジニアがGCPで爆速構築する奮闘記

…を作成 cloud.google.com ※Githubの連携は共通アカウントを利用しましょう!個人アカウントだと予期せぬ問題になりますからね 導線が出来た後はBuildやCloud RunへのDeployを cloudbuild.yaml に追加してDeployできました。 (APIを有効にしたり権限周りで出来ないことはありましたが…) FirebaseにDeploy WebアプリケーションのDeployはFirebaseを利用して、公式ドキュメントを見ました。 cloud…