1日1回データを同期して、データ分析やレポート系の処理で利用することになりました。以下の構成でデータを同期することにしました。意外に情報が少なくて、何がベストかはよく分からないですが、メモがてら残しておきます。ソースコードは以下で公開してるので、詳細を見たい場合は参照ください。APIでは1リクエスト1トランザクションが一番シンプルで分かりやすいので、リクエストとトランザクションのライフサイクルは同じにしたいです。一つのAPIコールの途中で何かエラーが発生したら、全部ロールバックする形です。層でトランザクションを開始/終了するのが良さそうです。使い方をメモ程度に残しておきます。既存のRepositoryモデルを元に、RepositoryモデルをDomainモデルに変換するマッパーを生成するようなケースを紹介します。参考にさせていただきました。今回はbunを使ってます。rinoguchiCategory:gcpgoGo+chi+GAEでクリーンアーキテクチャを試してみたちょうど、このブログとは別に自分用のマイクロブログを作りたいと思っていたので、Go+chi+GAEでクリーンアーキテクチャを試してみました。この記事では、バックエンド(APIサーバ)部分について記載していきます。ソースコードも公開してますので、細かいところは直接参照ください。rinoguchiCategory:dockerjavascripttesttypescriptローカル端末で実行中のフロントエンド/バックエンドアプリの現在日時を変更する時系列が関係あるような機能の動作確認をする際に、現在日時を変更したくなるケースがありますが、OSの時間を変更するとちょっと怖いです。ローカル端末上で実行中のアプリだけに日時を変更する方法を記載します。React.jsやVue.jsなどで作っているWebアプリケーションの日時を変更したいです。いうライブラリを使います。ライプラリをインストールします。あとは、main.tsなど、アプリを起動する処理の直前に以下を指定します。良く利用されるようでので、早速導入したいと思います。チュートリアルを自分が今作っているマイクロブログに当てはめただけです。導入前は以下のように、自前でインスタンスを生成して引数として渡していました。rinoguchiCategory:gooapi-codegenでchi用APIインターフェースを自動生成Goでマイクロブログを作成中なのですが、OpenAPIで定義したAPIスキーマからoapi-codegenを使ってchi用APIインターフェースを自動出力することにしました。使うモジュールは以下の二つです。APIスキーマをyaml定義します。Editorという拡張を入れて編集すると便利です。以下の二つのAPIの定義を書いてます。api-schema.yamlというyamlファイルを作成しました。難しい内容ではないので、説明は割愛します。rinoguchiCategory:mysqlMySQLで外部キーが貼れない原因とCharsetについてMySQLでテーブルの作成はできるけど、外部キーを貼ろうとすると謎のエラーが発生しました。その原因を調べる上でMySQLのCharsetの設定について多少詳しくなったのでメモっておきます。今回、新しくテーブルを作って、既存テーブルに対して外部キーを貼ろうとしたところ、エラーが発生してダメでした。エラーログは以下の通りでした。情報が全く足りません。そのような場合は、以下のSQLを実行することでエラーの詳細を見ることができます。今回は、以下のログが出力されていました。Extensionを作って公開した残念ながらAsanaでは、コードブロックをハイライトする機能が提供されていませんので作って公開しました。こんな感じで動作します。ソースコードはこちらで公開しています。現在所属している会社ではチケット管理にAsanaを利用しているのですが、Asanaにはコードブロックをハイライトする機能がありません。機能開発やテックサポートなどをしていると、ソースコードをAsana上に保存しておきたいケースはそれなりにあり、ソースコードが良い感じにハイライトされてないと頭に入ってきません。Framework)が使われていました。ソースコードを一見して正直どこで何が行われているのか全くわからなかったので、チュートリアルを見ながら簡単なAPIを作成し、その後、DRFを使ってAPIを作り直してみて、勉強しようと思います。作成したソースコードは以下で公開しています。DRFは利用せず素のDjangoのみで、チュートリアルに従って投票(polls)アプリを作ってみたいと思います。poetryを使って環境構築しました。