GORM+GinでTODOリストを作ってみた」に続いて「GORM+Gin」でTODOリストのAPIを作ってみました。ソースコードは前回からの差分だけを記載しています。できたものは下記URLから確認できます。(https://gorm.io/docs)DB:MySQLルーティングは今回はAPIなので以下としました。モデルをtasksにすればよかったと思いましたが一旦このままにしておきます。router.gorouter.gorouter.goにr.Group("/api/v1")のAPI用のグループを追加してルーティングを追加しました。r.Run(":9000")}api/v1/todo.goJSONで受けた値を処理してJSONを返すように変更しました。})}動作確認ターミナルでjsonをみやすくするようにjsonppを入れておきます。GORMの使い方」に続いて「GORM+Gin」でTODOリストを作ってみました。使い方は「GitHubのREADME」を参考にしました。できたものは下記URLから確認できます。装飾は別途やれればと。(https://gorm.io/docs)DB:MySQLルーティングは通常のフォームだとPUT/DELETEが使えないので以下のようにしました。削除main.goだけで作成した場合main.goに全ての処理を記述しています。r.Run(":9000")}ファイルを分割した場合main.goだけだとちょっと味気ないのでWebフレームワークっぽい構成にしてみました。書き方は色々だと思うので「参考」としてみてもらえればと思います。ORMライブラリのGORMの簡単な使い方を確認してみました。公式ドキュメントにしっかりと使い方が書いてありますので基本的にはそちらを参考にしてもらえればと思います(すべてではないですが日本語訳もされています)。その上でクイックスタートを元に簡単な使い方と挙動を確認してみます。http://gorm.io/ja_JP/docs/インストール以下のコマンドでインストールできます。github.com/jinzhu/gormクイックスタート公式ドキュメントにあるクイックスタートを実行してみました。DBだけsqliteではなくmysqlに変更しています。db.Delete(&product)}実行してみるとproductsテーブルが作成され、以下のカラムとレコードができました。structでは宣言していない、id、created_at、updated_at、deleted_atカラムができ、deleted_atに日付が入りソフトデリートが行われています。main.gogorm.Modelgorm.Modelを宣言するとid、created_at、updated_at、deleted_atカラムが自動的に注入されます。deleted_atカラムがある場合、Deleteはソフトデリートになります。先ほど実行したプログラムでどんなSQLが実行されたか確認してみます。db.LogMode(true)を設定するとSQLの実行ログが確認できます。db.Delete(&product)}実行SQLや実行時間が確認できるようになりました。]created_at、updated_at、deleted_atが不要な場合テーブルによってはcreated_at、updated_at、deleted_atが不要な場合もあります。その時はgorm.Modelを使わなければカラムは作られません(IDだけはできるよう個別に記述しています)。uint}この場合、先ほどのSQL実行ログは下記のようになります。deleted_atカラムがないので今回のレコード削除はハードデリートになります。1の指定はなくなります。2と条件が変わってくれます。]テーブル名を単数形にする場合マイグレーションを実行すると生成されるテーブル名はproductsのように自動的に複数系になりますが、複数形にしたくない場合もあります。その時はdb.SingularTable(true)を宣言するとテーブルが単数形で生成されます。参考:http://gorm.io/ja_JP/docs/conventions.htmlGORM本体のテストカバレッジOSSライブラリを使う時、どのくらいテストが書かれているか気になったりするので確認してみました。GORM本体にはtest_all.shというテストすべてを実行するスクリプトが用意されているのでそれを元にカバレッジを出してみました。(初期実行時はライブラリが足りないなど出るので都度追加しました。)また、mysqlのテストをする為にmain_test.goに書かれている以下の記述に事前に設定を合わせておく必要があります。dbDSN)今回は、postgresとmssql環境がないのでmysqlとsqliteだけに限定しました。testのあとに-coverprofile=cover.outを追記してカバレッジを出力します。cover.htmlを実行してhtmlに変換しました。statementsとカバレッジが81.7%でファイル毎にみても以下のようになっていました。ソースhttps://github.com/taisa831/sandbox-gormまとめ非常に簡単なところだけを触っただけで分かりませんが、通して導入しやすく安定したライブラリだと思いました。個人的にORMはあまり積極的に使わない方ですが簡単に扱える、学習コストが低い、実行SQLを確認しながら扱える、などがあると導入障壁が低くてよいですね。WooCommerce.。