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

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

Go の検索結果:

GolangでのAPI GatewayとLambdaを利用した認可設定をやってみる

…すが、サンプルを元にGolangでLambdaオーソライザーの関数を作成した場合、 IAM policyを作成する箇所でユーザー毎にアクセスできるリソース(パス)を制御することができます。 具体的には events.APIGatewayCustomAuthorizerResponseを作成している箇所で、 events.APIGatewayCustomAuthorizerPolicyの Resource で、ポリシーを付与されたユーザーはここに記載されているパスにのみアクセス…

【Expo Go】アプリケーションがクラッシュして解決するまでの話

…ナシでは『Expo Go』を使ったアプリケーションの開発を行っており、急にアプリケーションがクラッシュしてしまい解決に至るまでの話をしてみようと思います。 突然クラッシュするアプリケーション まずはこちらをご覧ください。 gyazo.com ローカル環境でExpoを起動した後、iPadでQRコード読み込んでアプリケーションが起動する間もなくクラッシュしています。始めは古いキャッシュでも残っているのかな?と思って、再起動やアプリケーションの削除を行いましたが、この事象は直りませ…

AWS SAMを利用してAPI GatewayとLambda Authorizer(Golang)の構築をやってみた

…ku です。 前回、GolangでLambda Authorizer用関数をやってみましたが、 Golangはコードエディタが使えず、テストするには毎回zipで固めてアップするという一手間がありました。 kaminashi-developer.hatenablog.jp そんな中、先日「AWS SAMを使うとAPI Gateway等とまとめて作成できるので便利だよ!」という話を伺ったので今回使ってみることとしました。 AWS SAMとは aws.amazon.com YAML…

BtoB SaaSスタートアップのインフラの失敗と選択の歴史を登壇の中で暴露してきました

…ろです。 docs.google.com 自前でコードを書くのもいいのですが、こういう選択肢もあると知っておくといざという時にさっと使えていいですよね。 実際インフラ移行までの期間が1ヶ月半と限られた中ではあったので、1週間くらいで環境を整えられたのもツールを駆使出来たからこそだと感じます。 クリスマスLock Waitボムの投下 クリスマスに投下されたLock Waitボムでしたが、垂直スケールとDead Lockの解消で血を止めました。 実は今回に限らず、これまでにもgo…

RDBMSの先を行く?NewSQLを支えるアルゴリズムRaftをGoで紐解く

… { // ... go r.run() return r, nil } func (r *Raft) run() { for { select { switch r.getState() { case Follower: r.runFollower() case Candidate: r.runCandidate() case Leader: r.runLeader() } } } func (r *Raft) runFollower() { for { select { …

開発環境で送信したメールを確認するためにMailHogを導入しました(勝手に)

Go

…開発が捗りました。 Golangでもメールが送信されたかを確認する方法を探してたらMailHogというツールを見つけたので、とりあえず導入してみました。(勝手にプルリクを出した) 導入方法 導入はとても簡単で、 公開されているDockerイメージでコンテナを作成する アプリ側のメール送信先のSMTPサーバーを変更する この2点だけです。 Dockerコンテナの作成 Docker Hubに公開されているイメージを使います https://hub.docker.com/r/mai…

【Golang】で【Amazon API Gateway Lambda オーソライザー】と【FirebaseAuth】を利用しての認証をやってみた

…ーソライザー関数 をGolangで作成 としてますので、ご興味ある方はご覧いただけますと幸いです。 Amazon API Gateway Lambda オーソライザーとは 詳細な説明は公式へ役割をお譲りしますが、概要としては以下の通りです(公式より引用) Lambda オーソライザー (以前のカスタムオーソライザー) は、Lambda 関数を使用して API へのアクセスを制御する API Gateway の機能です。 以下も公式より引用させていただいた図が分かり易いのですが…

NoSQLで悩ましいインデックスとアクセス権限管理を、Firestoreのサブコレクションで実装する

…storeについて Googleが提供しているNoSQLのマネージドサービスです。 他のNoSQLと比較してWeb, Mobileからローカルデータベースのように利用できることやデフォルトで単一フィールドのインデックスが作成されていることが特徴です。 データ構造 今回はチャット機能のデータを考えてみます。 登場人物は以下になります。 ユーザー チャットルーム 投稿(コメント、画像を含む) チャットルームには2人以上のユーザーが参加することができます。 チャット機能のデータ構造…

【Golang + Excelize】Excelファイルを操作してみよう

…penOffice、Google スプレッドシート、Numbers は、いずれもExcelとの互換性を保っています。 互換性を保っているということは、脱Excelが非常に難しくユーザーから互換機能を求められていると思います。 サービスを提供する側としても、Excelをサポートをしないと利用ユーザーの体験が悪くなり、最悪の場合はチャーンする可能性もあります。 『カミナシ』はアプリで作成したデータをExcelに出力する機能を提供しています。その際に利用したパッケージの紹介と、簡単…

TypeScriptで負荷シナリオテストを作りたくなった話

…しょう! yarn go:k6で処理を実行します。 gyazo.com うまく実行出来ていますね! ここで最後に表示されているオプションに関してですが、実際に処理を実行した結果を確認出来ます。 表示されたオプションのうちで特に重要なものを説明します。 vus 同時実行したVUの数 iteration_duration default/main 関数の完全な反復処理を 1 回完了するのに要した時間 checks チェックの成功率 http_req_duration リクエストの…

Goでの自動化が唸るカッコいいworkflow画面を作りたい

これはGo 4 Advent Calendar 2020 18日目の記事です こんにちは株式会社カミナシのエンジニアの浦岡です。 個人的に、Goが一番輝きを放つのはworkflowの自動化だと思っています。 k8sなど自動化分野でGoはなくてはならない存在ですよね! ただ、そのworkflow、テキストで記述するか、画面があってもフローチャートのような物が多く、どこか味けなくないでしょうか? 見た目大事!! 少しジャンルは違いますが、こちらIntegromatというiPaaS…

【Golang + echo】S3のファイルをバイナリデータでレスポンスする

はじめに この記事はGo 4 Advent Calendar 2020 17日目の記事です。 こんにちは、株式会社カミナシのエンジニア @imuです。 早速ですが、S3にあるファイルをバイナリデータで取得してレスポンスに含めたいと思ったことはありませんか? 『カミナシ』ではバッチ処理でファイルを作成してS3にファイルをアップロードした後、Client側でファイルをダウンロードする機能があります。 よくある処理はClient側からAWSにアクセスをしてファイルをダウンロードする…

【Go言語】自作コンテナ沼。スクラッチでミニDockerを作ろう

…ntu 18.04 golang 1.15 Dockerの機能おさらい docs.docker.com まず、ドキュメント内を読み進めてDockerに対する知識を整理します。 DockerはDocker daemonを基幹とし、その呼び出しを行うREST API, Docker Cliと機能が覆い被さっています。 普段Cli経由で処理を行う、network, container, image, volumesはCli経由からこのDocker daemonの機能の呼び出しを行い…

フロントエンドエンジニアがGoの書き方を理解する

Go

本記事は Go3 Advent Calendar 2020 15日目の記事になります。 こんにちは、株式会社カミナシのエンジニア @tomiです。 JavaScript, Node.jsをメインに扱ってきたエンジニアがGoに触れるときにどう解釈したかを、JavaScriptとGolangを比較しながら、理解を深める記事となっています。 はじめに まず私自身のJavaScriptへの理解としては、VueやReact,Redux.Next.jsなどのフロントエンド周りに加え、Ex…

GoでGraphQL Subscriptionsを実装する

はじめに この記事はGo3 Advent Calendar 2020の11日目の記事です。gqlgenを使ってGraphQL Subscriptionsを実装する方法とハマったポイントを紹介したいと思います。 利用技術 gqlgen GraphQL SchemaからGoのコードを出力するコードファーストなライブラリ Redis Pub/Sub Redisでクライアント間通信を行う echo Webフレームワーク 今回はドメイン3層とgqlgenの生成物を合わせた構成にしていま…

iPhone 12 Pro(LiDAR) + ARFoundationで ARゲームことはじめ

… class SetGoat : MonoBehaviour { [SerializeField] Rigidbody m_GoatnPrefab; public Rigidbody goatnPrefab { get => m_GoatnPrefab; set => m_GoatnPrefab = value; } private ARRaycastManager raycastManager; private List<ARRaycastHit> hitResults =…

スタートアップが取組むコンテナ化。EC2からECS Fargate移行の道のり

…成を取っています。 golangで吐き出したシングルバイナリを起動するalpine linuxのコンテナをFargate上で起動し、その他のミドルウェアに関連するコンテナをサイドカーパターンで別で切り分けるようにしています。 サイドカーパターン。コンテナの責務を各ユニットで分割 メインコンテナとはまた別のユニットとして立ち上げるため、仮にサイドカーで立ち上げたコンテナにエラーが発生した時にもメインコンテナ内への影響はなく動作するところがメリットです。 またサイドカー形式で立ち…

React Native と Flutterを比較してみた

…Native 企業 Google Facebook 言語 Dart JavaScript GitHubスター数 107k 91.3k 開発環境 React Native 開発環境の構築やローカル環境の起動はExpoが便利です。 Expo CLIでは主に以下の機能が提供されています。 新しいプロジェクトの作成 ローカル環境の起動 シミュレータ起動 ログ実行 Publish 各プラットフォーム向けのビルド ローカル環境を起動すると以下の画面が表示されます。 ログの出力やシミュレー…

サービスサイトをGatsby×Wordpress×NetlifyでJamstackなサイトにリニューアル

…・Jekyll・Hugo・Gatsby.jsでした。 その中からGatsby.jsを採用した理由は複数あります。 カミナシアプリでもReactが使われていること 魅力的なフレームワークはたくさんあり、ついつい新しい技術に手を出したくなってしまいますが、複数のエンジニアが今後作業するとなると、すでに使っている技術を使った方が開発コストが下がるので、カミナシのアプリでも採用しているReactを使ったNext.jsかGatsby.jsが良いのではと考えました。 Typescript…

【LT参加レポート】GoによるGraphQL実装

…シではAPIの開発にGo言語を使用しています。自分はGraphQLが好きなのですがこれまでGoのライブラリを利用してGraphQLランタイムを実装したことがありませんでした。なのでGoのライブラリの一つであるgqlgenを利用してサンプルアプリケーションを実装してみました。 今回は勉強会で発表した内容を編集して書いていきます。 speakerdeck.com ※ただし書き カミナシのプロダクトではGraphQLを使っていません。 サービスサイトではGatsbyを使っていてこち…

Metabaseのグラフをslackへ通知するbotをServerless Framework + Puppeteerで作ってみた

…wait page.goto(embedUrl) // ダッシュボードが読み込みを完了するまで画面内で待機 await page.waitFor(5000) // fullPageをtrueに設定して、画面内全ての項目を表示出来るように const buffer = await page.screenshot({ fullPage: true }) await browser.close() return buffer } 実装のうちで 画面全体を撮影する方法 スクリーンショ…

【LT参加レポート】「Goと面と向かう」というテーマで発表してきました!

…バサイドの言語としてGoを活用しています。 自分はカミナシに入って約1年ほどになりますが、カミナシは創業して以来サーバーの言語はずっとGoを使って開発しています。 カミナシではちょうど自分が入ったタイミングで新規プロダクトの開発を開始していて、このプロダクト内でもGoが大活躍してます。 改めて成長する事業に寄り添い柔軟に形を変えられる、Goの魅力をひしひしと感じます。 発表の内ではそんな自分がGoとどう向き合い、課題を解決していったのかを話してきました。 スタートアップで自分…