Post

アプリケーション

2021-06-01 21:46:02

Gitでcommitを分割する方法

概要commitを分割したいときの手順についてメモ。 手順# 分割したいところを指定してrebase。対象のcommitをeditにする。 git rebase -i HEAD~5 # unstageする git rebase HEAD~ # unstageしたものを分割したい粒度で再commitする。 git add & git commit # commitが完了したらrebase --continue git rebase --continue # log確認 git log # force push git push -f origin HEAD これで分割できるは...

アプリケーション

Git

2021-03-17 21:39:16

golang-migrateを使ってspannerのDBマイグレーションをする

概要spannerのDBマイグレーションで、golang-migrateを使ったのでメモ。 使い方dockerで使う想定。dockerではなくバイナリで実行していたが、ホストマシンのopensslのバージョンに依存して動作しない可能性あるようなので、コンテナ実行が無難だと思う。 MIGRATE_VERSION='v4.14.1' docker run -v /migrations:/migrations -v ~/.config/gcloud/:/root/.config/gcloud --network host migrate/migrate:${MIGRATE_VERSION} -pa...

アプリケーション

GCP Golang Spanner

2021-02-08 16:51:08

goのspannerクライアントのReadOnlyTransactionでハマった

概要pkg.go.dev - cloud.google.com/go/spannerでReadOnlyTransactionを使ったときにハマったところについてメモ。 何が起きたか?数万件のデータを複数回のリクエストに分けて処理するようなバッチ処理のコードを書いていた。ReadOnlyTransactionを使った処理を以下のように書いていた。  for { // 〜略〜 // cは*spanner.Client iter := c.ReadOnlyTransaction().Query(ctx, stmt) defer iter.Stop() /...

アプリケーション

GCP Spanner

2020-11-05 00:37:56

認証・認可の基本

概要最近認証サービスの開発に携わっているので今一度基本的なことを再確認しておく意味でまとめる。 Software Design 2020 11月号の認証・認可の特集を参考にしている。 IDと認証・認可の関係性 ID Identity(身元) システム利用のための管理単位 ex. ユーザー、モノ、組織 etc... Identifier(識別子) データとして管理される単位 ex. SasS・SNS・他サービスなどで管理されるユーザーID Attribute(属性) Identifierを構成するそれぞれの情報 ex. Identityが人、Identifierがtaro_yam...

アプリケーション

FIDO IAM LDAP OAuth OpenIDConnect SAML SSO 認可 認証

2020-09-29 01:53:39

Golangでインメモリなキャッシュを実装する

概要Golangのインメモリキャッシュのライブラリは良さそうなものが存在するが、軽量でシンプルなもので十分だったので自前で実装してみた。 実装要件 複数のデータを保持することができる。 期限付きのデータをメモリに保持することができる。期限が来たらメモリから破棄されること。 キャッシュへの同時参照、更新を考慮し、データのロックが意識されていること。 初期設計※github.com - bmf-san/go-snippets/architecture_design/cache/cache.goに置いてあるが、転載。 最初に思いついた感じで実装したもの。 package main import...

アプリケーション

Golang キャッシュ

2020-09-15 00:31:41

Go CodeReviewCommentsのまとめ

概要github.com - CodeReviewCommentsを読んでメモしておきたいことをまとめる。 Comment Sentences コメントの終わりはピリオドで終わるようにする。 golang.org - commentary Copying 別のパッケージから構造体をコピーするときは、予期しない参照に気を付ける。 メソッドがポインタの値に関連付けられているならTではなく*Tを使うようにする。 Crypt Rand 鍵の生成にmath/randを使ってはいけない。crypto/randのReaderを使う。 文字列として扱いたい場合は16進数かbase64エンコードする。...

アプリケーション

Golang コードレビュー 

2020-09-11 01:40:01

JWTとは

概要JWTについて調べたことをまとめておく。OAuthやOpen ID Connectなど実際の利用事例については触れない。 JWTとはJWT(JSON Web Token)は、JSONデータ構造を用いたURLセーフなClaim(JWTを用いたJSONオブジェクトはClaim Setと呼ばれる)を表現するフォーマット。JWTでは、デジタル署名またはメッセージ認証コード(MAC)を用いたJWS(JSON Web Signature)、あるいは暗号化を用いたJWE(JSON Web Encryption)が利用される。 JWT、JWS、JWEのそれぞれのRFCは下記の通り。ietf.org - r...

アプリケーション

JWT

2020-09-08 03:05:50

gRPCとはーGolangでgRPCに入門するー

概要GolangでgRPCに入門する。 gRPCとはgRPCとは、Googleが開発したRPC※実現のためのプロトコル。HTTP/2の利用を前提としている。 gRPCではGoogleが開発しているProtocol BuffersというIDL(インターフェース定義言語)でAPI仕様を定義するシリアライズフォーマットを使用する。 gRPCの通信方式にはHTTP/2の仕様に則った4つのパターンがある。 Unary RPCs 1リクエスト1レスポンス Server Streming RPCs 1リクエスト複数レスポンス サーバープッシュ(HTTP/2の仕組みで、コンテンツをサーバーからプッシュす...

アプリケーション

Golang gRPC マイクロサービス HTTP/2 RPC

2020-08-11 16:43:20

Golang×chromedp×slack botでslackの絵文字自動生成ボットをつくってみた

概要Golang×chromedp×slack botでslackの絵文字自動生成ボットをつくってみた。 作ったものslackでbotにパラメータを付けたメンションを飛ばすと画像を生成してくれるだけのもの。内部的には、パラメータを元にcanvasで画像を生成、ヘッドレスブラウザでスクショを撮って画像を保存、slackに投稿、といった感じ。 github.com - emoji-generator-slack-app 使い方等はREADMEを見ればなんとなくわかるはず... 週末にハッカソン的ノリでつくったため、バグが残ってしまっている...https://github.com/bmf-san/...

アプリケーション

Golang Slack chrome chromedp emoji slack-bot

2020-07-19 17:51:47

vscodeでgoのLanguage Serverを有効にしたらコード定義元ジャンプができなくなった

概要vscodeでgoのLanguage Serverの設定を有効にしたらコード定義元へのジャンプができなくなってしまったので原因を調査した。 settings.json "go.useLanguageServer": true, 結論go.modがプロジェクトのルートに存在している必要がある。 cf. stackoverflow - How to properly use go modules in vscode? vscodeでフォルダを開くときに、こうではなく、 . ├── app ├── go.mod こう開くようにしないとパスが良しなに解決されないせい...

アプリケーション

Golang gocode gopls Language Server vscode

2020-06-26 18:56:52

PHPでUMLを自動生成してくれるツールーphUML

概要クラス設計の外観を把握したい時にUMLを自動生成してくれるツールが欲しかった。phpstormなら標準でいい感じにdiagramを生成してくれる機能があるらしいが、vscodeに入信してしまったのでいい感じのツールを探すしかない。 phUMLぐぐると色々ツールはあるのだが、簡単に使えそうなやつを探してみた。 github.com - MontealegreLuisphumlドキュメント 本家?github.com - jakobwsthoff/phumlはメンテ終了しているようなのだが、探してみると上記のfork版のようなやつが見つかった。 スターは少なくてあまり使う人いないのかな・・?と...

アプリケーション

PHP

2020-01-26 23:57:08

GolangでgoblinというURLルーターを自作した

概要GolangでURLルーターを自作したので実装するまでの過程をメモしておく。 準備URLルーターを実装する際に行った下準備をまとめる。 データ構造とアルゴリズムURLをどのようにマッチングさせるか、というロジックについて検討する。 多くのライブラリでは、データ構造として木構造がよく扱われているので、どんな種類の木構造を採用するかを考えてみた。 文字列探索に特化した木の中で、時間的・メモリ的計算量がよりベストなものを選定しようとすると、基数木というのが良さそうに見えるので最初はそれを採用しようとしていたのだが、実装が難し過ぎて挫折をした。 もう少し身近でシンプルなものをということでトライ木を...

アプリケーション

Golang URLルーティング

2019-12-15 21:47:32

URLルーティング自作入門 エピソード2

概要この記事はURLルーティング自作入門 エピソード1の続きで、Makuake Development Team Advent Calendar 2019の15日目となります。 URLルーティングを自作する前回の続きです。 ルーターを自作するにあたり、ルーターがどういった処理を行うのかデータ構造の観点から考えてみます。 ルーターがどんなInputを受け取って、どんなOutputを返すのか、動的なルーティングの場合の例を図示してみました。 URLのパス部分をInputとして受け取り、パスとマッチするデータを判定してOuputして次の処理につなげる、というのルーターの役割です。 どのようにパスの...

アプリケーション

HTTP URLルーティング

2019-12-14 23:20:25

URLルーティング自作入門 エピソード1

概要この記事はMakuake Development Team Advent Calendar 2019の14日目の記事です。 趣味で駆け出し※URLルーティング自作マンをやっているので、URLルーティング自作界隈※に入門したい人に向けた記事となれば幸いです。 ※駆け出しというキーワードが今年はWeb界隈で流行り?ましたね。私は去年末からURLルーティング自作を始めたので駆け出しだと思います。※そんな界隈があるのかは知らないが、世界は広いのでたぶんある。 駆け出しURLルーティング自作マンの軌跡見るに耐えないものではあるが、色々試行錯誤した過程を晒しておきます。 記事 URLルーティングを...

アプリケーション

HTTP URLルーティング

2019-11-03 11:03:15

GolangのHTTPサーバーのコードリーディング

概要この記事はQiita - Go6 Advent Calendar 2019の20日目の記事です。 GolangでHTTPサーバーを立てるコードの詳細を追ってコードリーディングします。 参考実装コードリーディングしていく実装はこちら。 package main import ( "net/http" ) func main() { mux := http.NewServeMux() handler := new(HelloHandler) mux.Handle("/", handler) s := http.Server{ Add...

アプリケーション

Golang net/http

2019-10-05 20:57:51

FuelPHP1.8.0→1.8.2、PHP5.6→PHP7.3へのバージョンアップした

概要FuelPHP1.8.0→1.8.2、PHP5.6→PHP7.3へのバージョンアップ対応をした。業務でアプリケーションのバージョンアップ対応を行ったので、取り組みをまとめておく。 スコープ FuelPHP1.8.0 → FuelPHP1.8.2 PHP5.6 → PHP7.3 対象リポジトリ ユーザー側アプリケーション 管理側アプリケーション パッケージリポジトリ ※ミドルウェアのバージョンとかは割愛※OSはAmazon Linux(2ではない) FuelPHP1.8.0はPHP7.2まで対応しているが、1.8.2は7.3まで対応している。 バージョンアップに取り掛かる2週間くらい前...

アプリケーション

PHP FuelPHP

2019-08-18 18:05:25

Golangでクリーンアーキテクチャに入門する

概要GolangでClean Architectureの実装に挑戦したみたので整理しておく。 内容は概ねスライドの内容を踏襲している。 理解しきれていないところがあったり、自分の解釈、考えを記述しているので、正しくない部分もあるかもしれない。 スライドLTをする機会があったのでスライドを貼っておく。 Dive to clean architecture with golang ソースソースはこれ。 bmf-san/go-clean-architecture-web-application-boilerplate MVCのパターンでの実装もtagを切って残してある。 1.0.0 - MVC 背景...

アプリケーション

Clean Architecture Golang DIP

2019-05-08 17:05:41

execコマンドによるリダイレクト

概要execコマンドは現在のプロセスを実行するコマンドで置き換えるコマンドだが、引数無しで使うとリダイレクトの動的変更ができる。 ちょうどmaster直プッシュの際にプロンプトで確認するようにするで #!/bin/sh exec < /dev/tty read ANSWER というコードが出てきてよくわからなかったので調べてみたのがきっかけ。 使い方#!/bin/sh echo "Output to stdout" // 標準入力 exec > redirect.txt // ファイルディスクリプタを変更 echo "Output to file" // ファイルに出力される...

アプリケーション

bash shellscript exec

2019-05-08 17:04:11

master直プッシュの際にプロンプトで確認するようにする

概要gitでmasterブランチへの直pushを未然に防ぐためのセーフーティネットの作り方。github上でmasterブランチへのpushを禁止すれば良いのだが、DevOpsの都合上でgithubの設定では問題があったのでhooksを使う方向で設定した。 導入グローバルに設定したいので~/.git_template/hooks配下にpre-pushファイルを作成する。.git_templateディレクトリが存在しない場合は作成する。 なお、グローバルに設定しても既存のリポジトリには反映されないので、既存リポジトリに反映したい場合は既存リポジトリの./git/hooks配下にpre-pushを...

アプリケーション

Git shellscript

2019-04-21 00:05:50

PHPで学ぶデザインパターン - Stateパターン

概要PHPで学ぶデザインパターン Advent Calendar 2018で間に合わなかった記事。 Stateパターンとは状態をクラスで用意することで振る舞いを切り替えることができるようなパターン。 実装スイッチのオンオフの状態を切り替えるような例を想定した。シングルトンを使ったほうが良い気がする。 <?php class OnState { public function getState() { return 'ON'; } public function getNextState() { return ne...

アプリケーション

GoF PHP デザインパターン ステートパターン