blogシタテルの技術やエンジニアの取り組みを紹介するテックブログです。投稿を表示しています。投稿を表示しています。2018こんにちは、シタテルの鶴巻です。devops&インフラ担当です。最近、firebase/firebase-admin-goの実装で気になったところがあり、プルリクエストから経緯を知ることができました。GitHub上のソースコードで気になった箇所の経緯を追うことは今後もあると思うので、整理がてら方法を紹介します。対象のソースコードが追加されたプルリクエストで経緯が分かったfirebase-admin-sdk-goの実装で気になった箇所firebase-admin-sdk-goは、名前の通りFirebaseサービスをGolangから扱うためのSDKです。Authenticationを試してみた際に、弊社で使用しているRubyのSDKがなかったため、GolangのSDKの実装を少し読んでみました。そこで、Googleのサーバから公開鍵を取得するメソッドの中で排他制御が行われていることに着目しました。私はここで排他制御を実施している理由がわからなかったので、経緯を調べることにしました。該当ソースコードは以下です。GitHubの対象レポのプルリクエストをHash値で検索プルリクエストが見つかりましたー!🎉🎉🎉https://github.com/firebase/firebase-admin-go/pull/3実装の理由は?プルリクエストのコメントにありました複数のスレッドが共有している公開鍵のキャッシュを同時に更新するのを防ぐためにmutexを導入したみたいです。httpKeySource構造体に定義されており、さらにhttpKeySourceはClient構造体に定義されています。SDKを使う際に最初にClientの初期化を行いますが、初期化した同一のClientで公開鍵取得メソッドがconcurrencyに実行されても安全なように実装されているのかなと考察しました。firebase-admin-sdk-goはgit-flowfirebase-admin-sdk-goはgit-flowで開発されているようです。そのため、masterのソースコードのcommitのHash値がプルリクエストがマージされた時のHash値と同じで、プルリクエストが見つけやすかったです。おまけ(nodejsの実装)Node.jsのSDKの同じ箇所の実装についても少し覗いてみました。Node.jsを書いたことはありませんが、見る限り排他制御はしていないように見えます。Node.jsはシングルスレッド推奨だから排他制御しなくていいのか・・・など思い、言語の特性の違いが垣間見えて面白いですね。https://github.com/firebase/firebase-admin-node/blob/master/src/auth/token-verifier.ts#L260まとめオープンソース文化いいですね。今回の例だとfirebaseの中の人が書いたソースコードや、そのプルリクを見ることができています(もしかしたら中の人じゃないかもしれませんが)。エンジニアとしては当たり前な文化ですが、ブラックボックス化されている業界が多いなか改めて良い文化だと思いました。Auth導入してみたかったのですが残念です。usシタテルのミッションはテクノロジーとイマジネーションで「ひと」と「衣服」の新しい未来をつくること。クラウドシステムを使うように服作りのリソースを誰でも好きなときに好きだだけ使えるプラットフォームを目指しています。(1)どうも朝野です。Storage移行記:バリデーション編こんにちはあさのです。Storageに移行したときの話を書こうと思います。Paperclipはファイルアップロード用のGemです。https://...SQLite3でWindow関数を試してみた!はじめまして、DevOpsチームの甲斐です。何かブログのネタはないかなーと思っていたところ、たまたま以下のニュースを発見しました。ECSに自動デプロイする(おまけで環境面の切り替えも)こんにちは、シタテルの茨木です。ECR/ECSにデプロイする為の設定例を紹介します。Nuxt.jsアプリ用に作ったものですが、言語やAPサーバが違っても共通の部分がほとんどです。