並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 107件

新着順 人気順

パッケージ構成の検索結果1 - 40 件 / 107件

  • クリーンアーキテクチャ完全に理解した

    clean_architecture.md 2020/5/31追記: 自分用のメモに書いていたつもりだったのですが、たくさんのスターを頂けてとても嬉しいです。 と同時に、書きかけで中途半端な状態のドキュメントをご覧いただくことになっており、大変心苦しく思っています。 このドキュメントを完成させるために、今後以下のような更新を予定しています。 TODO部分を埋める 書籍を基にした理論・原則パートと、実装例パートを分割 現在は4層のレイヤそれぞれごとに原則の確認→実装時の課題リスト→実装例という構成ですが、同じリポジトリへの言及箇所がバラバラになってしまう問題がありました。更新後は、実装時の課題リストを全て洗い出した後にまとめて実装を確認する構成とする予定です。 2021/1/22追記: パートの分割と、クリーンアーキテクチャという概念の定義について追記を行いました。大部分の実装例パートを中心

      クリーンアーキテクチャ完全に理解した
    • Linuxコンテナの「次」としてのWebAssembly、の解説

      はじめに WASMをブラウザの外で動かすトレンドに関して「Linuxコンテナの「次」としてのWebAssemblyの解説」というタイトルで動画を投稿したのですが、動画では話しきれなかった内容をこちらの記事で補完したいと思います。 2022年もWebAssembly(WASM)の話題が多く発表されましたが、そのひとつにDocker for DesktopのWASM対応があります。FastlyやCloudflareもエッジ環境でWASMを動かすソリューションを持っていますし、MSのAKS(Azure Kubernetes Service)でもWASMにpreview対応しています。WASM Buildersでも2023年のWASMの予想としてWASMのアプリケーションランタイム利用に関して言及されました。 WASMといえば元々ブラウザ上で高速にC++のコードなどを実行するところから始まっている

        Linuxコンテナの「次」としてのWebAssembly、の解説
      • 現場で役立つシステム設計の原則メモ - Qiita

        This article is a Private article. Only a writer and users who know the URL can access it. Please change open range to public in publish setting if you want to share this article with other users. ※この記事は著者の増田さんの了解の上で限定公開させて頂いております。 https://twitter.com/masuda220/status/1215122054795522049?s=20 オブジェクト指向、設計がなぜ必要か = ソフトウェア全体の整理整頓をするため 第1章 小さくまとめてわかりやすくする 変更が大変なプログラムの特徴 メソッドが長い クラスが大きい 引数が多い 関心事を詰め込みすぎ

          現場で役立つシステム設計の原則メモ - Qiita
        • 「ビジネスロジック」とは何か、どう実装するのか - Qiita

          アプリケーション開発で、「ビジネスロジックは分離しろ」だとか「Controller にビジネスロジックを書くな」といったことをよく言われると思います。 しかし、ビジネスロジックという言葉の意味を聞いたり調べたりしてみても、「システムのコアの部分」とか「システムの目的になる処理をするところ」みたいなことを言われたりして、よく分かりませんでした。 そんな中、クリーンアーキテクチャや DDD の戦術的設計について学ぶことで、「ビジネスロジックとは何か」、「ビジネスロジックはどう実装するか」について、自分なりの考えが整理されてきたので、この記事ではそれをまとめます。 ※ 曖昧な言葉を自分としてどう使っているかという話になります。違う意味で使う方もいると思うので、ご注意ください ビジネスロジックとは何か 「システムのコアの部分」とか「システムの目的になる処理をするところ」といった説明も正しいとは思い

            「ビジネスロジック」とは何か、どう実装するのか - Qiita
          • ドメイン駆動設計に関する何か - 日々常々

            2020-03-13追記: 「ドメイン駆動設計」のハードルを上げる意図はありません。そもそもそんな特殊技能でもないと思っています。「ドメイン駆動設計が合っているか」を測る材料になるかも?くらいの気持ちで読んでいただけると幸いです。 何度目か知りませんがDDDがまたブームを迎えているようで。DDD難民と言う言葉が出た頃を思うと感慨深いですね。実際難民になったわけではないので肌感覚で知らないのが残念なところですが、これはどうでもいい。 DDD、日本語ではドメイン駆動設計となりますが、DDDを冠していてもドメインが語られることは少ないようです。 数ある書籍もドメインモデリングの話ではなく、ドメインモデルをいかに実装に落とし込むかにフォーカスしていると感じています。 これはこれで仕方ないと言うか、ドメインの話って広く語れないんですよね。 ドメインは領域で境界があって範囲が限定されています。特定ドメ

              ドメイン駆動設計に関する何か - 日々常々
            • ドメイン駆動設計の正体

              はじめに "ドメイン駆動設計は当たり前のことを言っているだけ" "ドメイン駆動設計はただのオブジェクト指向プログラミング" "ドメイン駆動設計はより良いアーキテクチャだ" "軽量DDDはアンチパターンだ" このようなドメイン駆動設計に関する言及を聞いたことがあるでしょうか? ドメイン駆動設計に言及する記事や書籍は多くありますが、それぞれ着目する側面が異なったり色々なコンテキストから言及されています。 おそらくそれが原因でドメイン駆動設計が何であるかをぼやけさせ、正体のわかりにくい概念になっているように思えます。 そこで今回は色々な観点から整理し、ドメイン駆動設計とは何であるのか、その正体を考えていきます。 ドメイン駆動設計の基本的概念について ドメイン駆動設計はEric Evansが出版した「Domain-Driven Design」という書籍がルーツになっています。 ドメイン駆動設計を一

                ドメイン駆動設計の正体
              • システム開発でよくある「ごん、お前だったのか」現象と依存関係、そして汎用性の罠の話 | Raccoon Tech Blog [株式会社ラクーンホールディングス 技術戦略部ブログ]

                株式会社ラクーンホールディングスのエンジニア/デザイナーから技術情報をはじめ、世の中のためになることや社内のことなどを発信してます。 マネジメント要求定義教訓ごんおま現象依存関係ツリー思考法カオスエンジニアリングフェイルファスト技術的負債 こんにちは、羽山です。 昔話には生きる上での数多くの教訓が込められています。今回は ごんぎつね からシステム設計・開発について考えてみましょう。 ごんぎつねの話はみなさんもご存じの通り、いたずらを悔いたごんぎつねが人知れず兵十という青年に贈り物を届けるも最後まで気づかれないまま火縄銃で撃たれてしまい、最後に「ごん、お前だったのか」となる話です。 さて、 達人プログラマー という書籍には 契約による設計(Design by Contract) という考え方が解説されています。 メソッドを契約として、 要求された以上のことも以下のことも行わない という考え方

                  システム開発でよくある「ごん、お前だったのか」現象と依存関係、そして汎用性の罠の話 | Raccoon Tech Blog [株式会社ラクーンホールディングス 技術戦略部ブログ]
                • より美しいコードを書くことに対する感情を失ってしまったのは衰えか成長か - まいくろ🍣きりみん

                  昔:感情があった 元々ぼくはきれいなコードを書くことへのモチベーションが高かった。 プログラマーになったばかりの頃にリーダブルコードを読んで感動したというのもあるし、ちょうどその頃DDD原理主義みたいなものが流行ってて、はてブのITタブにはきれいなコードを書くためのコーディング規約やテクニックに関するブログエントリやLT資料がたくさん流れていた。 最初にAndroidの大規模プロジェクトに関わった時は、元々のコードがかなりひどかった(初めてJavaを書く人達だけで書いたとしか思えない、現代ではおおよそあり得ないようなレベル)ため、リファクタリングをすることに非常に意義もやりがいも感じたし、どうせきれいにするのならばと張り切って出来るだけリーダブルなコードを書こうとした。 その後チームにgit化の波が訪れ(自分が推進したんだが)PRによるコードレビューなるものもやるようになった。 意識が高か

                    より美しいコードを書くことに対する感情を失ってしまったのは衰えか成長か - まいくろ🍣きりみん
                  • Go コンパイラのコードを読んでみよう - kosui

                    はじめに 本記事は、 DeNA Advent Calendar 2020 の 11 日目の記事です。 突然ですが、「コンパイラのコードを読んでみよう」なんて言われても、「どうせ巨大で難解で複雑なロジックを理解しないと読めないんでしょ?」と思いませんか。 コンパイラの構造を理解しようとしても聞いたことのないような専門用語がずらりと並び、コードを読もうとしたらそれらをすべて完全に理解してないと一行も理解できないんじゃないか...。Go のコンパイラ gc のソースコードを読むまでは、私もそう思っていました。 しかし、あまりにも暇な休日のある日、思い立って gc のコードを読んでみました。すると、「コンパイル」という難解な響きの処理も、一つひとつを小さなタスクに分解することで、少しずつ読み進めることができると分かったのです! 何よりも感動したことは、 gc そのものが全て Go で書かれていて、

                      Go コンパイラのコードを読んでみよう - kosui
                    • ようこそdotfilesの世界へ - Qiita

                      はじめに 少し前から話題になっているが、日本の労働生産性はG7で最も低いらしい。 日本生産性本部資料より https://www.jpc-net.jp/intl_comparison/intl_comparison_2018_press.pdf 日本は人口減少に突入していることもあって、「作業の効率化」や「自動化・省力化」をいうフレーズをあらゆる業種で聞くようになった。 ITエンジニアは、あらゆる職業の中でも最も効率化、自動化をして生産性を高められるといっても過言ではないだろう。プログラマの三大美徳(「怠惰」「短気」「傲慢」)にもあるように、同じことを何度もやらない、楽をするためにがんばるという生産性を意識した感性が重要視されているからだ。 生産性を高めることで、勉強する時間が作れたり、新しいことを経験したりするなどしてさらにスキルアップができ、さらに生産性が上がるという好循環を作り出すこ

                        ようこそdotfilesの世界へ - Qiita
                      • あなたのGoアプリ/ライブラリのパッケージ構成もっとシンプルでよくない? | フューチャー技術ブログ

                        2023.10.5追記: Goチームからプロジェクトの目的に応じたディレクトリ構造についてのドキュメントが公式に公開されています。 https://go.dev/doc/modules/layout Goでプロジェクトのフォルダ構成どうしよう、とググると見つかるStandard Go Project Layout。とはいえ、これはかなりコード量を増やしてしまう恐れがありますので、導入する場合のデメリットも考えておく方が良いです。 特に、プログラマーは、最初にみたプログラミング言語のフォルダ構成を親だと思う特性があり、Javaや.NETに影響されるとかなり細かくフォルダを切りたくなったり、package privateなど細かく可視性を制御しようとしたりして、なおかつ「privateのテストってどうすべきなんですか?」とか議論を始めたりもしますが、Go先生によればこれぐらいは1パッケージにフ

                          あなたのGoアプリ/ライブラリのパッケージ構成もっとシンプルでよくない? | フューチャー技術ブログ
                        • LAMP 構成のシステムが抱えていた問題を Amazon API Gateway + AWS Lambda のサーバレス構成にして解消した話 - WILLGATE TECH BLOG

                          ウィルゲートのアーキテクト兼技術広報の岡田(@okashoi)です。 今からおよそ 1 年前に取り組んだ、社内システムをリニューアルによってサーバレス化した事例についての紹介と、1 年経過したところのふりかえりや所感を書きたいと思います。 システムリニューアルの背景 利用量の増加に対してスケールしにくい サーバリソースの利用効率が悪い エラーが発生した場合の原因究明が難しい リニューアルプロジェクト発足 目的は「スケーラビリティ向上」 「コスト削減」 「信頼性向上」 メンバー3 名でおよそ半年にわたるプロジェクト 目的へのアプローチ Amazon API Gateway + AWS Lambda によるサーバレスアーキテクチャの採用 Amazon Elasticsearch Service を用いたログの可視化と運用を考えたログ設計 プロジェクトでの取り組み 機能の洗い出し Go 言語 +

                            LAMP 構成のシステムが抱えていた問題を Amazon API Gateway + AWS Lambda のサーバレス構成にして解消した話 - WILLGATE TECH BLOG
                          • プロダクトにドメイン駆動設計を適用するためにはじめたこと - ContractS開発者ブログ

                            こんにちは。最近Slackのカスタム絵文字作りにハマっている友野です。Holmesでサーバーサイドエンジニアをしています。 Holmesが提供するホームズクラウドは、今年8月にサービスローンチ3周年を迎えました! これまでの支持に感謝し、これからも長く使ってもらえるようにプロダクト改善に取り組んでいます。そのひとつとして、ドメイン駆動設計(以下、DDDと表記します)適用に関する取り組みについてご紹介します。似たような状況や同じ課題を持つ誰かの一助になれば幸いです。 背景と現状 まずはじめたこと 戦略的モデリング そして、戦術的な設計 採用するパターン2つ ドメインモデルを反映したオブジェクトを置くパッケージの作成 既存テーブル構造に依存しないRepository+Adapterパターン ふりかえり まとめ 最後に 背景と現状 ホームズクラウドはPMF(Product Market Fit:

                              プロダクトにドメイン駆動設計を適用するためにはじめたこと - ContractS開発者ブログ
                            • Go言語で基本的なCRUD操作を行うREST APIを作成 | DevelopersIO

                              Javaのエンジニアだった私がGo言語でREST APIを作る上で学んだことをまとめています。 プロジェクト構成、単体テスト、Dockerイメージの作成など実際にREST APIを開発する上で必要だと思われる要素を盛り込みつつサンプルプロジェクトを作成していきます。 はじめに Javaのエンジニアだった私がGo言語でREST APIを作る上で学んだことをまとめています。 プロジェクト構成、単体テスト、Dockerイメージの作成など実際にREST APIを開発する上で必要だと思われる要素を盛り込みつつサンプルプロジェクトを作成していきます。 今回はできるだけ外部ライブラリやフレームワークを使わずにGo言語の標準機能のみで開発しました。 これからバックエンドにGo言語を使用することを検討されている方の参考になれば幸いです。 ※この記事は既にGo言語の開発環境をセットアップ済みで基本的な文法を学

                                Go言語で基本的なCRUD操作を行うREST APIを作成 | DevelopersIO
                              • 「詳解Go言語Webアプリケーション開発」という本を発売しました - My External Storage

                                「詳解Go言語Webアプリケーション開発」という書籍を執筆し、2022/07/22にC&R研究所様より発売しました。 全国書店やAmazonで購入できます。本記事では本の内容の紹介や執筆経緯、執筆してみての感想など書きます。 https://www.c-r.com/book/detail/1462 本の内容について 本著は大きく分けて二部構成になっています。 第一部は次のようなテーマにまつわるトピックを中心にまとめました。 他の言語を経験していると不思議になるGoの言語仕様 最近Goを始めた方は知らない過去の経緯や歴史的背景 第二部ではGoを用いたWebアプリケーションのコードをハンズオン形式で解説しました。 テストコードを書き段階的な変更を繰り返しながらAPIサーバの実装を試みています。 Docker Composeを使ったローカル開発環境の構築 github.com/cosmtrek/

                                  「詳解Go言語Webアプリケーション開発」という本を発売しました - My External Storage
                                • Flutterに入門する前に集めたリンク集 - くらげになりたい。

                                  結構前からFlutterしたいなと思ってたけど、そろそろはじめれそうだったので、 今まで集めたリンクを整理してみた(´ω`) Twitterリンクも多いけど、気にせずリンク集にしてみた(´ω`) 公式ドキュメント Flutter Documentation - Flutter FlutterAppの基本 | Flutter Doc JP Language tour | Dart 導入 【Flutter】Firebaseの導入方法をまとめておく【スクショあり】 | ぐるたかログ 【Mac】Flutterの環境構築をまとめてみる | ぐるたかログ Flutter 1.0がリリースされたので概要から、環境構築、実装方法、アーキテクチャ、情報収集方法まで全部書く - Qiita Dart Flutter入門のためのDart入門 - Qiita パッケージ構成 mono0926/flutter_na

                                    Flutterに入門する前に集めたリンク集 - くらげになりたい。
                                  • 実用 Go言語

                                    業務プログラミングの現場でも採用されるようになってきたGo言語。文法はシンプルで学びやすいという特徴を持っていますが、複雑な要件を実現するには、プログラミング言語が提供する構成要素(文法やライブラリ)をさまざまに組み合わせる必要があります。 本書は、そんなGoを使う上でのポイントを単なる文法詳解ではなく「よりGoらしく書くには」「実用的なアプリケーションを書くには」といった観点から紹介します。 構造体やインタフェースの使い方からJSON、CSVファイル、Excel、固定長ファイルの扱い方、またログやテスト、環境構築など現場に即した幅広いトピックについて、「Goらしいプログラムの書き方」をその背景と共に教えてくれる先輩のような書籍です。 まえがき 1章 「Goらしさ」に触れる 1.1 変数やパッケージ、メソッドなどに名前を付けるには 1.1.1 変数名 1.1.2 パッケージ名 1.1.3 

                                      実用 Go言語
                                    • ようこそdotfilesの世界へ - Qiita

                                      はじめに 少し前から話題になっているが、日本の労働生産性はG7で最も低いらしい。 日本生産性本部資料より https://www.jpc-net.jp/intl_comparison/intl_comparison_2018_press.pdf 日本は人口減少に突入していることもあって、「作業の効率化」や「自動化・省力化」をいうフレーズをあらゆる業種で聞くようになった。 ITエンジニアは、あらゆる職業の中でも最も効率化、自動化をして生産性を高められるといっても過言ではないだろう。プログラマの三大美徳(「怠惰」「短気」「傲慢」)にもあるように、同じことを何度もやらない、楽をするためにがんばるという生産性を意識した感性が重要視されているからだ。 生産性を高めることで、勉強する時間が作れたり、新しいことを経験したりするなどしてさらにスキルアップができ、さらに生産性が上がるという好循環を作り出すこ

                                        ようこそdotfilesの世界へ - Qiita
                                      • GoのWebアプリ開発でフラットパッケージにした話 | フューチャー技術ブログ

                                        2023.10.5追記: Goチームからプロジェクトの目的に応じたディレクトリ構造についてのドキュメントが公式に公開されています。 https://go.dev/doc/modules/layout 2020/11/13 「やってみてよかったことまとめ」、「やってみて困ったこと」、「外部モックサービスを使ったユニットテストの未来」の章を追記 2020/11/18 「やってみてよかったことまとめ」にSNSでもらったフィードバック内容を追記 はじめにこんにちは、TIG 真野です。秋のブログ週間連載の第9弾です。 1年弱ほどGo言語でWebAPIアプリケーション開発を行っていますが、かなり割り切った構成・テスト方針を採用しました。そろそろ1年弱になり機能開発も比較的落ち着き、保守運用フェーズの割合も徐々に増えてきた頃合いなので、やったこと・学び・反省といった振り返りを共有します。 Goのパッケー

                                          GoのWebアプリ開発でフラットパッケージにした話 | フューチャー技術ブログ
                                        • Plainのフロントエンドにおける技術選定(2023年8月版) - ROUTE06 Tech Blog

                                          ROUTE06 でソフトウェアエンジニアをしている @MH4GF です。 ROUTE06 ではエンタープライズ向けビジネスプラットフォーム「Plain」を開発しています。この記事では 2023 年 8 月に Plain クラウド EDI の Web フロントエンドで採用している技術について、その選定理由をまとめました。 現代の Web フロントエンド技術は領域ごとに選択肢が多く、プロダクトに最適な技術選定をする上で検討事項が多いと感じます。この記事がフロントエンド技術選定において参考になれば幸いです。 前提 プロダクトの特徴 技術選定に影響するプロダクトの特徴を箇条書きでまとめます。 エンタープライズ向け SaaS 現在開発中のプロダクトは商取引におけるクラウド EDI のドメインにフォーカス Plain が解決する課題は、元々フルスクラッチで開発すると 1 年かかるプロダクトの開発期間を

                                            Plainのフロントエンドにおける技術選定(2023年8月版) - ROUTE06 Tech Blog
                                          • モノリスからマイクロサービスへ-ZOZOBASEを支える発送システムリプレイスの取り組み - ZOZO TECH BLOG

                                            はじめに こんにちは。基幹システム本部・物流開発部の岡本です。普段はZOZO基幹システムのリプレイスを担当しています。 ZOZOではさらなる成長のため、様々なリプレイスプロジェクトが進行しており、これまでにZOZOTOWNやWEARなどのプロダクトにおける多くのリプレイス事例を公開してきました。本記事では、2022年8月より本格始動したZOZO基幹システムリプレイスの第一弾であるZOZOの物流拠点「ZOZOBASE」を支える「発送システムリプレイス」を紹介します。「発送システムリプレイス」は設計を終えた開発段階で、リリースに向けて進行中です。本記事を皮切りに今後も継続的に発信を続けていくので、是非ご注目ください。 現状の「発送システム」は、Classic ASPのトランザクションスクリプトで実装された大規模なモノリス構成のシステムの一部であり、「障害リスク」と「開発速度の低下」に課題を抱え

                                              モノリスからマイクロサービスへ-ZOZOBASEを支える発送システムリプレイスの取り組み - ZOZO TECH BLOG
                                            • ブラウザバックで壊れないstate管理を実現する`location-state`

                                              この記事は最近リリースしたlocation-stateというライブラリの紹介記事です。 モチベーション Reactのstate管理は、様々な分類が可能です。筆者が過去に書いた記事「スコープとライフタイムで考えるReact State再考」では、stateの分類は大きく以下2つの観点で分類ができると述べました。 スコープによる分類 ライフタイム(=stateの生存期間)による分類 詳しく知りたい方はこの記事を読んでいただきたいのですが、今でもstate管理というと多くの場合スコープによる分類の話が多く、ライフタイムによる分類の話はあまり聞かない気がします。 なぜライフタイム観点が重要か ライフタイムを意識せずに実装した場合に発生するのが、遷移時に状態が破棄され復元されない、つまりブラウザバックでstateが壊れるという問題です。この問題については以下の記事で、Vercelの社長が2014年に

                                                ブラウザバックで壊れないstate管理を実現する`location-state`
                                              • フューチャー技術ブログの運営で心がけていること | フューチャー技術ブログ

                                                はじめにTIG DXユニットの真野です。フューチャー技術ブログの運営の1人です。未来報を運営している岡田さんなどと一緒に、気持ちは草の根活動で外部発信に携わっています。 IT企業の技術ブログ運営は、ある一定の質をキープしながらも、投稿頻度を高め・それを継続することが求められ、周囲の期待値もあるので中々気を抜けない仕事だと思います。単発ならともかく、継続することは忍耐が必要なので特に大変です。運営していてこれはナレッジだなと感じたことをまとめていきます。 2020/09/08 続編を公開しました: フューチャー技術ブログで行っている連載企画が良いよって話 技術ブログの大変なところ≒記事ネタを探すところ熱心な寄稿者が複数いて、運営からの声掛け無しで記事が集まるのであれば非常に楽ですが、たいていの組織やチームはそうでないと思います。また、本業は記事を書くことではなく、自社プロダクトの開発やシステ

                                                  フューチャー技術ブログの運営で心がけていること | フューチャー技術ブログ
                                                • Testcontainersを用いてテスト実行前の docker compose up を無くし、Goで並列テストする | フューチャー技術ブログ

                                                  春の入門祭り2024の1記事目です。 はじめにTIG真野です。 Testcontainers を用いて、単体テスト実行前に docker compose up -d 無しで、PostgreSQLにアクセスする単体テストを行う、入門記事です。 恩恵は次のような開発者体感の向上が個人的にあります。 テストを実行するうえで、別プロセスのサービスを起動しておく必要があるといった前提条件を考えなくても済むため、テストを行うビジネスロジックに集中できるdocker compose up -d 打たないだけだが、テストに必要なコンテナを考慮しなくても済む停止し忘れて、別のリポジトリの開発するときに混乱しなくても済む並列テストしやすくなるので、テストの実行速度が向上するGoにおいて、複数のパッケージを同時にテストするとき、 -p 1 で絞らずに済むTestcontainers とはhttps://test

                                                    Testcontainersを用いてテスト実行前の docker compose up を無くし、Goで並列テストする | フューチャー技術ブログ
                                                  • ドメイン駆動設計入門【DDDをわかりやすく解説】 | 楽水

                                                    突然ですが、エンジニアの皆さま、Javaで開発したWebアプリケーションの構成、このようになっていませんか? データとgetter/setterだけのオブジェクト(JavaBean) 画面のコントロールやビジネスロジックの処理はServletが行う データベースのアクセスは、DAO(Data Access Object)に任せる もしそうであれば、そのシステム、ドメインモデル貧血症に陥ってます。 これは、データとgetter/setterだけのオブジェクトを、Anemic(貧血症になって元気がない)オブジェクトと称し、オブジェクトとはいうものの実質的にはデータであり、それをやりとりするだけの手続き型システムなっていることを嘆いたものです。 今回は、本来のオブジェクト指向に立ち返り、そのメリットである高い保守性、再利用性、拡張性を備えた変化に強いシステムを作るための設計方法、ドメイン駆動設計

                                                    • Java, MySQLをKotlin, PostgreSQLに移行した - k0kubun's blog

                                                      7年前にGitHub Rankingというサービスを作り、APIを叩きすぎてGitHubからの風当たりが強くなって*1からはデータの更新を止めていたが、KubernetesやGraphQLの時みたいに技術を試す砂場用に惰性で動かし続けていた。 Issueの機能要望対応が段々面倒になってきて、サーバー代節約のために潰すかと考えていたのだけど、毎日1000PVくらいあるので試しにGoogle Adsenseを設置してみたところ1日平均 $1 くらいは入ってて黒字になりそうだったので、ちょっとメンテしやすくしてデータの更新再開するかー、ということで今回いろいろ綺麗にした。 DB: MySQL → PostgreSQL なぜPostgreSQLにしたのか 個人的には多くの用途ではMySQLとPostgreSQLどっちでもいいと思っているんだけど、今所属してるチームがメンテしてるサービスのDBの多く

                                                        Java, MySQLをKotlin, PostgreSQLに移行した - k0kubun's blog
                                                      • dodaの技術負債を解消するコンテナ環境で動くAPIサーバー - techtekt

                                                        こんにちは。dodaサイト開発グループの齋藤です。 doda トップページリビルドプロジェクトにて、コンテナ環境で動くAPIサーバー(hydrogenと社内では読んでいます)を作成しました。 そのAPIサーバーの開発が活発化してきたため、社外向けへの知見の共有と、社内のチーム向けのドキュメントとして、プロジェクトにおいて工夫した点などをこの記事にて公開することにします。 なぜAPIサーバー(hydrogen)を作成したのか これまでdodaではJava側でHTMLまで返すMPA(Multiple Page Application)で作られていました。 しかし今回のdodaトップページリビルドプロジェクトではSPA(Single Page Application)で作っており、APIが必要になりました。 参考:フロントエンドに関する記事はこちらです。 APIの作成は既存のシステムでも可能です

                                                          dodaの技術負債を解消するコンテナ環境で動くAPIサーバー - techtekt
                                                        • [Go] レイヤードアーキテクチャの階層構造を守らないimportを警告するlinterを作った - My External Storage

                                                          Goでクリーンアーキテクチャ等のレイヤードアーキテクチャを実装するための静的解析ツールを作った。 「webhandlerパッケージからusecaseパッケージを使わずに直接domainパッケージを使わないで!」というような、やってほしくないimportをエラーにできる。 https://github.com/budougumi0617/layer TL;DR クリーンアーキテクチャなどのレイヤードアーキテクチャでは、利用できるパッケージに制限がある レイヤー間の依存関係は一方向のみ 同じ層、あるいは1つ下の層のパッケージしか利用してはいけない https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html Goは循環importができないので、自然に単方向依存は満たしやすい しかし、層を飛び越して、2

                                                            [Go] レイヤードアーキテクチャの階層構造を守らないimportを警告するlinterを作った - My External Storage
                                                          • なぜ自分はDDDを勉強しているのか?

                                                            DDDと出会う前 自分は元々アーリーステージ(シード)のスタートアップでRailsを書いていました。人手の問題で拙いながらもReact Nativeでモバイルアプリを作ったりAWSでインフラを構築したりとよくいるエンジニアです。昨年末に今の会社への転職がきっかけでDDDでの開発に従事するようになり独学でキャッチアップしました。元々DDDという単語自体は聞いたことがありました。きっかけは確かこちらの記事だったと思います。 ドメイン駆動設計の比類なきパワーでRailsレガシーコードなど大爆殺したるわあああ!!! 自分自身Railsを書いてはいましたが、自分のコードに納得感を得られたことは一度もありませんでした。 このロジックはここに書いて良いのだろうか? DB設計ってこれで合ってるのか? う〜ん、テストコード書きにくいなあ よくある悩みです。しかし、スタートアップでスピード開発を優先していたの

                                                              なぜ自分はDDDを勉強しているのか?
                                                            • Flutterに入門して疑問に思ったことと、そのとき調べたこと - くらげになりたい。

                                                              前々から気になってたFlutter。 Flutter for Webが統合されたっぽいので、そろそろはじめたいなと(´ω`) www.publickey1.jp せっかくなので、 「なにを疑問に思って、なにを参照したか」 をまとめておこうと思ったので、整理してみた(´ω`) 疑問に思ったことを時系列にまとめてます。 注意 初期段階の理解度なので、正しくないこともあります。。 どう理解したかだけを書いていく予定です。 公式ドキュメントとか このあたりをベースに、いろんな記事を調べていく感じ。 Flutter公式ドキュメント: Flutter Documentation - Flutter Flutter公式ドキュメントの日本語訳版: Flutter Guide JP | Flutter Doc JP Dart公式ドキュメントLanguage tour | Dart 公式ドキュメント以外には本

                                                                Flutterに入門して疑問に思ったことと、そのとき調べたこと - くらげになりたい。
                                                              • GoでDBを使ったアプリを書くときみんなどうしてる? Tonamelはどうしているか晒してみます - KAYAC engineers' blog

                                                                こんにちは。ゲームコミュニティ事業部サーバサイドエンジニアの谷脇です。 この記事はTech KAYAC Advent Calendar 2022の2日目です。 私はTonamelというWebサービスを運営しています。Tonamelでは、GoとPerlを用いてサーバサイドアプリケーションを構築しています。 この記事ではTonamelでのパッケージ構成や、DBを使う際に用いているライブラリについて紹介します。 そもそもTonamelって何 パッケージ構成やは、アプリケーションの特性や、実装の複雑さなども考慮するため、前提として作っているものを説明します。 tonamel.com Tonamelとはeスポーツを始めとした競技の大会を開催するときに用いるプラットフォームです。大会主催者と参加者双方が利用します。 Tonamelの機能説明 この図に挙げているように、『参加者管理』と『トーナメント表』

                                                                  GoでDBを使ったアプリを書くときみんなどうしてる? Tonamelはどうしているか晒してみます - KAYAC engineers' blog
                                                                • 第820回 改めてUbuntuに入門したい人向けのUbuntuサーバー講座2024 | gihyo.jp

                                                                  2024年もいつの間にか半分が過ぎました。夏越の祓も終わり、なぜか既に始まっている気もする本格的な夏に向けて心機一転気合を入れる時期です。 今回は、研修期間が終わった途端にもう誰がメンテナンスしているかもわからなくなった古いサーバーのリプレースを依頼された不幸な新社会人に向けて、改めてUbuntuサーバーの初歩的なインストール方法について紹介します。 ちなみにUbuntuデスクトップや基本的な部分については、第811回「ゴールデンウィーク特別企画 新学生・新社会人向けのUbuntuデスクトップ講座2024」を参照してください。 図1 Ubuntuサーバーのインストール画面 Ubuntuサーバーとは まず最初にUbuntuサーバーに関する一般的な話をしましょう。「⁠とりあえずUbuntuのインストール方法がわかれば良い」のであれば、「⁠Ubuntuサーバーのインストール手順」まで読み飛ばして

                                                                    第820回 改めてUbuntuに入門したい人向けのUbuntuサーバー講座2024 | gihyo.jp
                                                                  • AWS Lambdaデプロイツール lambroll v1をリリースしました - 酒日記 はてな支店

                                                                    AWS Lambda用のデプロイツール、lambroll の v1.0 を2024年2月10日にリリースしたのでお知らせです。 github.com リリースして早速ですが v1.0.0 には一部のフラグ名がv0と異なるというバグがあるので、v1.0.1 以降をご利用ください。 v0.x と v1 の変更点 リポジトリ にまとめてありますが、簡単に解説します。 非互換変更 lambroll archive zipのバイナリを、標準出力ではなくファイルに書き出します デフォルトのファイル名 function.zip(--dest オプションで指定可能) に書き出すようになりました。 --dest - を指定することで、v0と同様に標準出力に書き出すことができます。 lambroll diff コマンドは、常に短縮型の unified 形式で出力します --unified オプションは廃止され

                                                                      AWS Lambdaデプロイツール lambroll v1をリリースしました - 酒日記 はてな支店
                                                                    • GradleのマルチプロジェクトによるKotlin、Spring Bootでのオニオンアーキテクチャの実現 - タケハタのブログ

                                                                      4月に発売した書籍「Kotlin サーバーサイドプログラミング実践開発」なのですが、この中で途中まで作っていてボツネタにした内容がありました。 gihyo.jp それが「Gradleのマルチプロジェクトでオニオンアーキテクチャを実現する」というものです。 第2部で作成していたbook-managerというアプリケーションは、もともとこれを使って作成していましたが、途中でやめて現在の形になりました。 github.com ボツネタにした理由としては、一回実践で導入してみていくつか微妙な点があったことと、紙面上の説明が複雑になるのでベーシックな内容としては外していいかなと思ったためです。 ただせっかく途中まで作っていたので、試して微妙と感じた点も含めて、今回紹介したいと思います。 サンプルとしてこのbook-managerの内容をマルチプロジェクト化したアプリケーションを使い、オニオンアーキテ

                                                                        GradleのマルチプロジェクトによるKotlin、Spring Bootでのオニオンアーキテクチャの実現 - タケハタのブログ
                                                                      • GitHub Actions上でdocker composeを使ってCIを回すためにうまいことキャッシュする方法 - Qiita

                                                                        docker compose on GitHub Actions 昨今ではDocker(コンテナ)を使った環境整備が主流になってきています。アプリケーションの実行環境自体をコード化できるため、開発環境間の差異や、本番環境の差異を吸収し、アプリケーションの開発に集中することができます。 一方、CIとDockerの相性はなかなかに良くないです。Dockerの肝はイメージやレイヤーのキャッシュにより、初回のダウンロード以降は爆速に使えることですが、環境がある程度リセットされてしまうCI環境で愚直にDockerを動かすコードを書くと数百MB単位のイメージのダウンロード、ビルドが毎回走ることになり、Dockerを準備する処理でCIの処理の大半が使われてしまうこともままあります。 今回はDockerによる環境のカプセル化の恩恵を受けつつ、GitHub Actionsでdocker composeを動か

                                                                          GitHub Actions上でdocker composeを使ってCIを回すためにうまいことキャッシュする方法 - Qiita
                                                                        • Effective AppSync 〜 Serverless Framework を使用した AppSync の実践的な開発方法とテスト戦略 〜 - Qiita

                                                                          Effective AppSync 〜 Serverless Framework を使用した AppSync の実践的な開発方法とテスト戦略 〜JavaScriptAWSGraphQLserverlessAppSync AppSync は AWS が提供するマネージド GraphQL サービスです。Amplify と統合することにより、スキーマさえ宣言すれば GraphQL の Query, Mutation, Subscription コードを自動生成します。バックエンド GraphQL エンドポイントやデータソースを構築し、即座に動く環境が手に入ります。 こちら は過去の記事ですが、リアルタイム掲示板アプリの主要機能を 15 分で作った例を紹介しています。 PoC のように使用する分には Amplify CLI を使用してサクッと開発してしまう方法が効果的ですが、実際のプロダクト開発で

                                                                            Effective AppSync 〜 Serverless Framework を使用した AppSync の実践的な開発方法とテスト戦略 〜 - Qiita
                                                                          • XcodeでSwift Package Manager実用段階 - クックパッド開発者ブログ

                                                                            こんにちは、モバイル基盤部のヴァンサン(@vincentisambart)です。 Swift Package ManagerはAppleがXcodeで公式にサポートしている唯一のパッケージマネージャーです。Xcode公式サポートの他に、Swift Package Manager形式でのみ提供されているswift-algorithms、swift-atomics、将来的に期待されているswift-async-algorithmsといった準標準ライブラリを利用できるようになるという大きなメリットがあります。 クックパッドiOSアプリ(以下クックパッドアプリ)で一部の依存パッケージをXcodeのSwift Package Manager対応を使って入れるようにしました。この導入で得たいくつかの知見をまとめました。 XcodeのSwift Package Manager対応 本来のSwift Pa

                                                                              XcodeでSwift Package Manager実用段階 - クックパッド開発者ブログ
                                                                            • Kotlin Multiplatform Projectを使ってAndroidとiOSのログ送信部分を共通化した - エムスリーテックブログ

                                                                              エムスリーエンジニアリンググループ マルチデバイスチーム所属の荒谷(@_a_akira)です。 弊社では、昨年の12月に医師向けの新規アプリをAndroid, iOS向けにネイティブ実装しリリースしました。 今回は、その際Kotlin Multiplatform Projectを用いてユーザの行動ログ送信部分を共通化した話をしたいと思います。 Kotlin Multiplatform Projectとは Kotlin Multiplatform Project(以後MPP)とは、 Kotlinで書かれた単一のコードを Kotlin/JVM,(Android, Server等) Kotlin/Native(iOS, Windows, Linux等) Kotlin/JS の各プラットフォーム向けにトランスパイル可能なプロジェクトのことです もっと詳しく知りたい方は 公式ドキュメントだったり、私

                                                                                Kotlin Multiplatform Projectを使ってAndroidとiOSのログ送信部分を共通化した - エムスリーテックブログ
                                                                              • マルチプロジェクト構成リポジトリにおいて変更の影響を受けるプロジェクトを検出する - Repro Tech Blog

                                                                                どうも、Repro Core Unit に所属している村上です。 Repro では現在、20 を超える Kafka Streams アプリケーションが稼働しています。 その中の半分くらいが Repro システムの共通基盤を構成する Kafka Streams アプリケーションであり、それらの運用は Repro Core が持つ責務の 1 つとなっています。 この共通基盤となる Kafka Streams アプリケーション群は、Gradle のマルチプロジェクト構成になっていてコードベースはモノレポで管理されています。 本稿では、この構成におけるデプロイ性の課題とそれに対するアプローチの話をします。 ディレクトリ構造 共通基盤のコードは以下のようなディレクトリ構成になっています。 . ├── Base ├── Deployments A │ └── Kafka Streams Applica

                                                                                  マルチプロジェクト構成リポジトリにおいて変更の影響を受けるプロジェクトを検出する - Repro Tech Blog
                                                                                • イマドキのJava徹底入門(4) Javaのモジュールシステムを理解しよう(その1)

                                                                                  Javaのモジュールシステムとは Javaのモジュールシステムに関する議論がスタートしたのは15年ほど前のことになる。Javaアプリケーションの多様化やJava言語仕様の巨大化によって,従来のパッケージの仕組みだけではクラスライブラリの適切な構造化や管理が難しくなったというのがその発端だ。さまざまなライブラリのJarファイルが複雑に依存し合っているこの状況は「Jar地獄」などと呼ばれ、Java 9のリリースに到るまで問題視され続けてきた。 Java 9に導入されたモジュールシステムは、「Project Jigsaw」というプロジェクト名で仕様策定と実装が進められた。Java Community Processにおける正式なJSRは「JSR 376: Java Platform Module System」で、OpenJDKプロジェクトではJEP 200を中心とした複数のJEPによって構成さ

                                                                                    イマドキのJava徹底入門(4) Javaのモジュールシステムを理解しよう(その1)