MySQLの場合、--safe-updatesオプションを利用することでこういった不慮のUPDATE/DELETEを防げるようです
タグ検索の該当結果が少ないため、タイトル検索結果を表示しています。
自分の本業は10年物のMVCプロジェクトなのでClean Architecture忘れがちです。 なので、慣れてるGoでパッとClean Architectureの復習を行ってみました(2年前にPythonでやった事はあるんだけど・・・)。 このスクラップでは単語とか作りどころとかを整理するのですが、また後でRustで作ってそっちは前例がほぼないので記事にします。 Go + Clean Architectureは結構記事あるんですが、Swaggerつけたしたのと自分なりに納得いくディレクトリ構成にオリジナリティを出しました。ちなみにgo-swagger使うと本当は凄く楽に作れるのですが(ついでにフロントはopenapi-generator)、今回はClean Architectureを理解するのが主目的なので、サーバーは手書きでopenapiのyamlも1から自作しました。 ↑ postに
ANDPADボードチームの原田(tomtwinkle)です。 Node.jsの mysqljs/mysql の仕様に起因するSQLインジェクションが話題に上がっていたので、それGolangのORMであるGormでも同じような「仕様」があるよ! という注意喚起の意味も込めて筆を執りました。 ※ 2022/02/21追記 コードレビューを自動化して指摘してもらう記事を公開しました! tech.andpad.co.jp Node.jsのMySQLパッケージにおけるエスケープ処理だけでは防げない「隠れた」SQLインジェクション | 株式会社Flatt Security TL;DR GormのQuery Conditions関数に関する危険な仕様 対策 締め TL;DR GormのConditions関数(Find, First, Delete...)を使用する際、第2引数の値にStringを引き渡
7月に株式会社カミナシに入社したくらさわです! カミナシでは、現場DXプラットフォーム「カミナシ」の開発をしています! よろしくお願いします!!! きっかけ 検証バージョン 結論 コード書いて確認してみた ドキュメント読んでみた コード読んでみた go-sql-driver/mysql のコード GORM のコード まとめ きっかけ 現在、カミナシの開発では、サーバサイドの言語は Go 、ORマッパーとして 「GORM」 を使い、DB には Amazon Aurora MySQL を使っています。 ある日、開発中に GORM が吐いてくれるログで query を調べていると、アプリケーションの実行中は結果が取れていないのに、その query をコピーして、手動で MySQL に投げると結果が取得できるということがありました。 パッとわからなかったので、それについて調べたことを記事にしてみま
これはGo3 Advent Calendar 2019の2日目の記事です。 昨日はimotyさんの「とにかく要素一覧の取得が高速な、要素が削除可能であるリストを実装する」でした。 昨年後半から仕事で Go を書く機会が増え、使用している DB ライブラリ GORM を使う事が多かったので いちユーザーの視点から今年の動きについてつらつらと書きたいと思う。 GORM v1.9.2 以前 GORM は Go の ORM のひとつで、使い方などについては日本語での紹介記事も複数あるため改めて書く事もないが、 リポジトリスター数の多さなど知名度の面では Go ORM の中では上位に入るのではないだろうか。 …が、自分が仕事で使い始めてからは PR の消化も滞り気味で、2018年11月にリリースされた v1.9.2 を最後に新しいバージョンも出ず、 少し触っているだけでバグではないかという挙動もいく
この記事はテックタッチアドベントカレンダー3日目の記事です。2日目は国定による「TypeScript 4.1 に更新しました」でした。 SREチームの taisa です。「愛の不時着」をきっかけに韓国ドラマにハマっています。最近は「スタートアップ」と「梨泰院クラス」をみています。Netflix な毎日です。 今回は「GORM v2 Major Features 編」ということで、今年8月にリリースされた GORM v2 の新機能をリリースノートに従って簡単に動かしてみたので紹介します。テックタッチのバックエンドは Go で実装していて ORM には GORM v1 を利用しています。v2 の Major Features と Breaking Changes をチェックして v2 へのアップデートも検討したいところです。 公式ドキュメント GORM v2 リリースノート v1 のファイル構
GORM 2.0 is a rewrite from scratch, it introduces some incompatible-API change and many improvements Highlights Performance Improvements Modularity Context, Batch Insert, Prepared Statement Mode, DryRun Mode, Join Preload, Find To Map, Create From Map, FindInBatches supports Nested Transaction/SavePoint/RollbackTo SavePoint supports SQL Builder, Named Argument, Group Conditions, Upsert, Locking, O
目次 Clean Architectureとは Clean Architectureというと、以下の図が大変有名です。 Clean Architectureの目的は関心の分離で、 これを達成するために意識すべきことが各レイヤーの依存性です。 関心の分離によりコードの可読性が向上したり、変化に強い設計になります。 この辺のメリットやClean Architectureの詳細に関しては参考記事に載っていますのでそちら参照ください。 上記の図では、円の外側から内側に向かって矢印が向けられていますが、これが依存の向きで、 外側から内側への依存は可能ですが、内側から外側は不可能です。 言い方を変えると、内側で宣言したモノを外側から呼ぶことはできますが、外側で宣言したモノを内側から呼ぶことはできないという話です。 この記事では依存の向きに注意しながら コードを紹介していきます。 各機能に関して 各機能
この記事はテックタッチアドベントカレンダー13日目の記事です。 SREチームの taisa です。韓国ドラマにハマっていましたが、沢山みたので結構満足しました。最近は「よくおごってくれる綺麗なお姉さん」をみました。 今回は、前回の「GORM v2 触ってみた Major Features 編」で触れられなかった Prometheus 連携機能について書きます。 SRE 本を読んでいると Borgmon という Google 内部で利用されているモニタリングツールがよく出てきます。気になるものの Borgmon 自体は使えませんが、Prometheus は Borgmon をルーツとして元グーグルのエンジニアが作った OSS で、Borgmon に似た機能を持っているようです。触ってみたい気持ちが高まります。 ドキュメント Prometheus をセットアップする GORM v2 の Pro
お題 表題の通り。GraphQL関連では前々回、frontend に「nuxtjs/apollo」、backend に「go+gqlgen」の組み合わせでGraphQLサービスを作るというのをやった。 その時は backend は単に固定のJSONを返すだけでお茶を濁したのだけど、もちろんサービスとして成り立たせる上で固定のJSON返すだけなんてことはない。 ので、今回は、永続化実装。 関連記事索引 第12回「GraphQLにおけるRelayスタイルによるページング実装再考(Window関数使用版)」 第11回「Dataloadersを使ったN+1問題への対応」 第10回「GraphQL(gqlgen)エラーハンドリング」 第9回「GraphQLにおける認証認可事例(Auth0 RBAC仕立て)」 第8回「GraphQL/Nuxt.js(TypeScript/Vuetify/Apollo)
Docker環境を構築し、Golang Echo v5-alphaでJWT Token認証 ホットリロード、リモートデバッグ、マイグレーション、GormのORMが入ったフルスタックフレームワークチックな環境の構築をしたGoDockerGORMGoModulegolang-migration docker環境を構築し、 Go言語のフレームワークのechoフレームワークに、 JWT Token認証 ホットリロード、リモートデバッグ、マイグレーション、 GormのORMと色々入ったフルスタックフレームワークチックな環境の構築をしてみました。 今回の記事は、この記事の作成の為に公開しました、gihubのソースの動かし方の説明になります。 ※githubのソースは記事の一番下になります。 記事の評判がよければ、ライブラリーの比較や説明、ソースコードの説明等記事を更新するかもしれません。 ※ vali
お題 表題の通りだけど、Goでクリーン・アーキテクチャの記事は既に山ほどある。 この記事では、そもそもクリーン・アーキテクチャで書く必要のないレベルのコード量のソースを元に、「クリーン・アーキテクチャで書いたらどんな感じになるだろう?」を確認している。 他の記事との差別ポイントは特にないけど、ひょっとしたら特定のフレームワーク(「Echo」、「Gorm」、「google/wire」」との組み合わせで書かれたものは少ないかもしれないので、そこがポイントかも。 ただし、(ソースにも書いたけど)あくまで「どんな感じになるだろう?」という書きっぷりなので、当然、プロダクションレベルに耐えられるものにはなっていない。 そうそう、実装の題材は「ある特定の”商品”(itemと命名)を”登録”し”全件参照”する機能をREST形式で提供するWebAPIサーバ」としてみた。 注釈 クリーン・アーキテクチャ自体
こんにちは。AI サービス開発部の千坂です。 Go に generics が入るのを密かに楽しみにしています。 今回は、Go 言語で使う ORM を GORM から SQLBoiler に変えた経緯を説明します。 個人で書く場合は ORM より生 SQL 派ですが、業務では開発効率重視で ORM を使います。 ORM とは O/R (Object-relational) マッピング(またはマッパー)の略で、プログラム上のオブジェクトと RDB のデータを対応付けること、およびそれを行うツールを表します。 Go の ORM では通常、構造体と RDB のデータを対応付けます。 本記事では GORM と SQLBoiler の概要および長所・短所を紹介していますが、それらは数ある特徴のうちの一部です。 これらの2つ以外にも ORM はありますので、ORM を利用するかどうか、またどの ORM
この記事はテックタッチアドベントカレンダー 17 日目の記事です。 SRE チームの taisa です。韓国ドラマの「スタートアップ」が最近 Netflix で最終話までみれるようになりましたね。最近はぼちぼち来年の抱負を考えるようになりました。懲りずにまた英語をやろうかと考え中です。 今回は「GORM v2 触ってみた Major Features 編」の続きで「Breaking Changes 編」です。 GORM v2 リリースノート Breaking Changes Tags Soft Delete BlockGlobalUpdate ErrRecordNotFound Updating with struct Migrator Count Transactions まとめ GORM v2 リリースノート 1 系から移行する場合は少なくともこちらにある内容の対応をする必要があります
はじめに Go言語で開発したWebアプリをローカルサーバーでデバッグする(VSCode)ことができましたので、 Go/Gin/Vue.js/MySQLでSPA(単一のWebページでアプリケーションを構成)を開発してみます。 ・フロントエンドはイマドキのWebアプリ風にSPAで開発したいためVue.jsを使用します。 JSフレームワークはAngular・React・Vue.jsなどがありますが、各々を比較検討し、 コンポーネント内記述がHTMLとJSとで独立しているのでソースをより綺麗に書けて、 双方向データバインディング(データと描画を同期する仕組み)と、 スモールスタートが可能なVue.jsを選定しました。 ・バックエンドはイケてる企業で流行りのGo/Ginを使用します。 Go言語のWAFは潤沢にありますが、各々を比較検討し、 比較的パフォーマンスと生産性が高く、日本語ドキュメントもある
こんにちは。バクラク請求書チームでエンジニアをしている赤羽です。 昨年の12月のLayerXにJOINしたので、今月でちょうど1年経ちました。 この記事は LayerXテックアドカレ2023 25日目の記事です。 前回はsh_komine が「相互理解の重要性と、促進するためのワークショップのご紹介」を書いてくれました。次回は@yoheiよりポストされる予定なのでご期待ください。 GORMとは GORMはGo言語の人気のあるORM(Object Relational Mapping)ライブラリです。 データベース(テーブル)とGoの構造体のマッピングを簡単に行うことができます。シンプルな構文、多様なデータベースサポート、マイグレーション、トランザクション管理など、豊富な機能が提供されています。 柔軟なクエリビルダーも提供され、開発者に使いやすいORMライブラリとなっています GORMに
❯ tree -L 1 --dirsfirst . ├── dialects ├── License ├── README.md ├── association.go ├── association_test.go ├── callback.go ├── callback_create.go ├── callback_delete.go ├── callback_query.go ├── callback_query_preload.go ├── callback_row_query.go ├── callback_save.go ├── callback_system_test.go ├── callback_update.go ├── callbacks_test.go ├── create_test.go ├── customize_column_test.go ├── delete
テックタッチアドベントカレンダー20日目担当する@smith-30です。 19日目は@kosy による Vueで日本全国ダーツの旅的なものを作ってみた でした。遊んでみたら僕は福島に行けと言われました。 弊社はまだエンジニア/デザイナが少数なので1人2回記事を書くスケジュールでしたが、毎日誰かの投稿がみれて楽しかったです。 このページについて gorm のコネクションプール周りの挙動を理解するためにパフォーマンス等色々実験したときのメモです(2019-12) なんとなく設定して使っていましたが、ちゃんと検証はしたことがなかったので動かしてみました。 といっても gorm は、 database/sql のラッパーなので実質その挙動の調査です。 内容 環境 mysql mysql> show variables like 'max_connections'; +---------------
概要 仕事でgolangを使ってみようという話になりAPIを作りました。 自分自身も他メンバーもRails使いが多いのでRailsに寄せてMVC構成で作りました。 golangに慣れたメンバーが少なかったのでできるだけメジャーで情報が多そうなフレームワークを使おうと考えてginを採用しました。 同様にORMもgormがメジャーなようだったので採用しました。 golang自体が手探りの状態だったので主に以下を参考にさせて頂きました。 日本語のQiitaの記事Gin と GORM で作るオレオレ構成 API Starが多かった深センの方が作ったAPI 自分でもサンプルAPIとしてgin-gorm-rails-like-sample-apiを作ってみましたので紹介のためにこの記事を書きました。 想定読者として自分のようにRails辺りで開発してきてgolangに手を出してみようと考えている方です
package external import ( "github.com/maruware/gqlgen-todos/entity" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func ConnectDatabase() (*gorm.DB, error) { db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { return nil, err } err = db.AutoMigrate(&entity.User{}, &entity.Todo{}) if err != nil { return nil, err } return db, nil }
package user import ( "github.com/jinzhu/gorm" ) type User struct { ID string `gorm:"primary_key"` Name string } type Repository struct { *gorm.DB } func (p *Repository) Create(id string, name string) error { person := &User{ ID: id, Name: name, } return p.DB.Create(person).Error } func (p *Repository) Get(id string) (*User, error) { var person User err := p.DB.Where("id = ?", id).Find(&person).Er
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く