タグ

ブックマーク / zenn.dev (272)

  • DDDとORMのEntityを混同しないための考え方

    2つの ”Entity” ある種の ORM では RDB のテーブルスキーマモデルとなるクラスのことをEntityと呼んでいます。例えば PHP のDoctrineや TypeScript のTypeORMなどがそうです。 そういった ORM を採用したプロジェクトで DDD に取り組むとき困るのが用語の衝突です。ORM の Entity は RDB のための定義を含むため当然 DDD の Entity とは異なるのですが、なにぶん同じ名前なので混同してしまいがちです。 記事では両者を混同せず扱うための考え方をまとめます。 Entity の定義 まずは定義から確認します。 DDD での定義 エヴァンスの日語訳から引用します。 主として同一性によって定義されるオブジェクトはエンティティと呼ばれる Eric Evans. エリック・エヴァンスのドメイン駆動設計 (Japanese Edi

    DDDとORMのEntityを混同しないための考え方
    mizchi
    mizchi 2020/12/17
  • 「無人化システム」を駆逐する組織マネジメントとエンジニアリング

    弊社では2019年3月ごろから「無人化システム」の駆逐を進めています。記事ではこの取り組みを、組織マネジメントとエンジニアリングの側面から紹介します。 恐怖の無人化システム 「無人化システム」は社内の独自用語なので、まずは言葉の意味から説明します。 無人化とはなにか 無人化の前に属人化について触れておきましょう。weblio辞書から属人化について引用します[1]。 ある業務を特定の人が担当し、その人にしかやり方が分からない状態になることを意味する表現。 無人化は属人化の進化系です。無人化とは「属人化していた業務の担当者がいなくなってしまい、誰にもやり方が分からない状態になること」と定義できます。誰がどう見てもダメな状態ですね。 無人化システムとはなにか システム運用が属人化し、かつその運用者が退職するとシステムが無人化します。我々の会社ではこのようなシステムを『無人化システム』と呼んでい

    「無人化システム」を駆逐する組織マネジメントとエンジニアリング
    mizchi
    mizchi 2020/12/16
  • ブロックチェーンは攻撃手法で分類するとよい

    この記事はpyspaアドベントカレンダー2020の15日目です。 ブロックチェーンによって出来ることを吹聴する無責任な記事は枚挙にいとまがないが、出来ることではなく出来ない事に関して論じる方がその技術の輪郭を適切に表現できると考えたので手の勢いのまま書いてみる。 シビル攻撃(Sybil Attack) 匿名P2Pを作る際によく登場するのがこの攻撃手法である。内容は端的に言うと「大量の悪意ある参加者をP2Pシステムに加えまくる」という物である。計算力の原価は半導体技術の発達と共に大幅に下がり続けており仮想マシンやらコンテナやらプロセスやらを沢山立ち上げるコスト的ハードルは低い。違法なデータのやり取りが行われている匿名P2Pに対して警察が捜査を仕掛けるような道理さえあれば現実的なコストで匿名性を攻撃できる。 BitcoinのようなPoW型のシステムがブレークスルーを果たしたのはまさにこの攻撃手

    ブロックチェーンは攻撃手法で分類するとよい
    mizchi
    mizchi 2020/12/15
  • ペイ・ガガーリン「コンソールは白かった」

    番環境でやらかしちゃった人 Advent Calendar 2020 14日目 の記事です。 稀によくあるアラートで始まる朝 ある日の朝、いくつかあるマイクロサービスの内の一つが稀によくある一部のメトリクスが取れてない趣旨のアラートが大量に飛んでいた形跡を発見した。 この稀によくあるアラートの原因として考えられるのは、一部のサーバーの調子悪いか、監視サービスが不調のどちらかだった。 ここで簡単にサービスの構成を説明しよう。 よくあるロードバランサーにいくつかのインスタンスがぶら下がってる系のもので、負荷が高まったらスケールアウトして、負荷が低くなればスケールインするいい感じのやつ。某AWSではオートスケーリンググループと呼ばれるもの。 インスタンスは使い捨て可能で、サーバーが不調になれば、自動でいい感じに殺すため、大体アラートが出ていても、朝起きた時には直ってることが多い。 加えて早朝に

    ペイ・ガガーリン「コンソールは白かった」
    mizchi
    mizchi 2020/12/14
    オートスケールでゼロ台になってから永遠にゼロなの、確かにありそう
  • Re: Rails を主戦場としている自分が今後学ぶべき技術について

    この記事は、 Rails を主戦場としている自分が今後学ぶべき技術について(随筆) | うなすけとあれこれ についてのアンサー記事です。 うなすけ君が Ruby on Rails で育ってきたように、僕も JavaScript とともに育ってきたという自覚があります。なので、これについて書くことは、ポジショントークは避けられない、という感覚があります。 冷静に比較しようとも思いましたが、やっぱり開き直って思いっきりポジショントークをすることにしました。そっちのほうが面白いと思うので。 自分の基的な主張は、こちらの記事にあるとおりです。 Frontend Study #1: 基調講演 - Frontend 領域を再定義する 自分と Ruby on Rails 僕は、キャリアとしては Rails の会社で JavaScript を書いてきたことが多かったです。学生の頃は socket.io

    Re: Rails を主戦場としている自分が今後学ぶべき技術について
    mizchi
    mizchi 2020/12/14
    Rails について書いた。 @yu_suke1994 のブログに対するアンサーです。
  • TypeScript 4.1による型レベルパーサコンビネーター

    はじめに これはTypeScript Advent Calendarの11日目の記事です。 TS 4.1で導入されたTemplate literal typesが世間で話題ですね。 TypeScriptTemplate string typesで湧き上がる界隈の様子 - Togetter Template String Types でパス文字列を解析してクエリする - Object.create(null) (ネタ) TypeScript 型パズルで作るmini interpreter by Yosuke Kurami TypeScriptにヤバい機能が入りそうなのでひとしきり遊んでみる - TechRacho Template titeral types で型上の簡易 Lisp パーサー - La Verda Luno Template Literal Types の基礎と .join

    TypeScript 4.1による型レベルパーサコンビネーター
    mizchi
    mizchi 2020/12/12
  • Deno 1.6.0 がリリースされたので主要機能の紹介

    Copyright (c) 2018-2020 the Deno authors. MIT License. こんにちは、@magurotuna です。 日時間の今日(2020年12月9日)に Deno の v1.6.0 がリリースされました。 変更内容は 上記の Deno 1.6 Release Notes にまとまっていますが、特に大きな変更としてリリースノート中でも取り上げられている以下の点を簡単に紹介したいと思います。 deno compile deno lsp TypeScript v4.1 へアップグレード、さらに一部のコンパイルオプションの設定変更 M1 Mac サポート (2020/12/11 追記) @uki00a さんが Deno Advent Calendar の10日目の記事として同じく 1.6.0 の紹介をされています! 紹介内容自体はほぼ同じですが、僕の紹介よ

    Deno 1.6.0 がリリースされたので主要機能の紹介
    mizchi
    mizchi 2020/12/10
  • Rust と WebAssembly で爆速な Markdown Editor を作ってみる

    TypeScriptフロントエンドな皆さん、今日も型パズルしていますか? 型が好きなら Rust ですよね。ということで、いまいち使い所が思いつかない WebAssemblyRust でなにか面白いことできないかな、と爆速(JS比2倍)の Markdown Editor を作ってみました(面倒な人は直接 GitHub みてください) この記事は iCARE Advent Calendar 2020 の 8日目の記事になります。昨日は アオキタカユキ さんの 【adobe XD】線型、円型のグラデーションを引く方法 という記事でした Webアプリケーションを作る まず、利用する側の Web アプリケーションを作成します どんな構成でもいいんですが、タイミング的にもちょうど良い Vue3 + TypeScript で環境を作りました $ npm install -g @vue/cli

    Rust と WebAssembly で爆速な Markdown Editor を作ってみる
    mizchi
    mizchi 2020/12/10
  • 「この機能のアクセシビリティどうしよう」と思ったら

    こんにちは、この記事は Webアクセシビリティ Advent Calendar 2020 の6日目です。 すこし前に、同僚のエンジニアに「Webアプリケーションにドラッグ&ドロップを使う機能を作ろうとしているんだけど、アクセシビリティは何をすればいいのかわからない」という相談をされる機会がありました。そのときの回答が、実はアクセシビリティを考える上ですごく大事なことだなと思ったので、ちょっと文章化してみることにしました。 相談されたのは「新しい機能で直感的な操作を実現するためにドラッグ&ドロップを使いたいが、アクセシビリティチェックをパスできない気がする」というような内容でした。たしかに私の会社で運用しているチェックでは、キーボードやスクリーンリーダーによる動作チェックを行っているので、それらではドラッグ&ドロップの操作ができそうには思えません。 彼のこの相談内容からは「良いものを作ろう」

    「この機能のアクセシビリティどうしよう」と思ったら
    mizchi
    mizchi 2020/12/07
  • Deno の組み込みリンター "deno_lint" の紹介 〜 ESLintの代替としても

    この記事は Deno Advent Calendar 2020 6日目の記事です。 5日目は -> Deno Standard Library Working Group について 7日目は -> (あとで埋める) Deno とは こんにちは、@magurotuna です。 このアドベントカレンダーをご覧の方であれば、新進気鋭の JavaScript / TypeScript ランタイムである Deno のことはある程度ご存知の方も多いと思います。 しかし、あえて超ざっくりと説明すると、Node.js (以下 Node と書きます)を作った Ryan Dahl が、Node の反省点をいかして新しく作り直したものです。 "10 Things I Regret About Node.js" (Node.jsについての10の反省点)というタイトルでRyan自身が JSConf EU 2018

    Deno の組み込みリンター "deno_lint" の紹介 〜 ESLintの代替としても
    mizchi
    mizchi 2020/12/06
  • 2021年 は Fullstack Next.js 元年なので、有望な Next.js 系フレームワークを全部試した

    この記事は、Next.js Advent Calendar 2020 の6日目。 突然だが、2021年 は Fullstack Next.js 元年になる。 その理由として自分は以下のものがあると思っている。 ベストプラクティスとしての TypeScript のデファクト化 Next.js の Dynamic Routes による動的パス、 getStaticProps/getServerSideProps による使い勝手の向上 Vercel によるISRの発明 prisma の成熟 Vercel / Serverless / Cloudflare Workers / Cloudrun 等による Node.js サーバーの運用コスト減 参考: Frontend Study #1: 基調講演 - Frontend 領域を再定義する Blog - Next.js 9.3 | Next.js R

    2021年 は Fullstack Next.js 元年なので、有望な Next.js 系フレームワークを全部試した
    mizchi
    mizchi 2020/12/06
    書いた。よろしくおねがいします。
  • "CSS Module" をめぐる混乱

    "CSS Module" が指すもの 2つある 従来のコミュニティベースのもの これのこと。そしてその実装。 現状フロントエンドエンジニアが指すものはだいたいこれ。 Web 標準になりつつあるもの Import Assertions で実現しそうな Synthetic Module としての CSS Module 標準になりそうな所まで来ている。 この2つに関して話がごちゃごちゃになるんで整理する。 コミュニティベースの CSS Module https://github.com/css-modules/css-modules コレ自体は概念的なもの。 その実装 として WebpackCSS Loader などがある。 なので、一般的に「CSS Module か Styled Component か」みたいな議論ででてくるものの場合、 WebpackCSS Loader を入れ

    "CSS Module" をめぐる混乱
    mizchi
    mizchi 2020/12/03
  • 2020年の個人的Firebaseのまとめ

    (この記事はFirebase アドベントカレンダー 2020の記事です) もうアドベントカレンダーの季節かーって感じですね。もともと引きこもるのが好きだったのが、引きこもる大義名分を得た年だったのでずっと家にいて季節感がなかった年でした。 そんなことは関係なく、2020年もFirebaseは進化していたのアップデート内容を個人的興味があったものまとめていきます。 Emulator Suite UI Emulator SuiteはローカルやCI/CDでFirebaseの機能をテストできるツールです。Emulator Suiteが出るまでは物のFirebaseプロジェクトを利用する必要がありましたが、Emulatorの登場で複数人開発やCIでのテストもやりやすくなりました。 5月のリリースでEmulator SuiteにUIが付きより視覚的にローカルでのテストがしやすくなり、Firebase

    2020年の個人的Firebaseのまとめ
    mizchi
    mizchi 2020/12/02
  • システム構成図をテキストで

    Gigazineさんでdrawthe.netを取り上げていたので紹介です。使い方はGigazineさんのほうが丁寧なので、気になる方はチェックしてみてください。(2020年12月1日、追記) drawthe.netとは cidrblock/drawthe.netは複雑なネットワーク図も「テキストで書いてブラウザ上でSVGレンダリングできるようにしよう」というコンセプトのもと開発されたツールです。下図のように複雑な構成図も精度高く描くことができます。 拡大してみると情報量が多いこと、またいかに整っているかがわかると思います。 デモサイトも用意されているので、サクッと試したい場合はコチラが便利です。コードはGitHubで公開されています。更新が2017年末で止まってしまっているのが玉に瑕ですが、十分な性能を発揮してくれます。 drawthe.netを使いたい理由 美しい構成図といえばInter

    システム構成図をテキストで
    mizchi
    mizchi 2020/12/01
  • M1とRosetta 2が速い理由の考察という名目の妄想

    Apple SiliconのM1が速いと話題だ。単に速いというだけでなくRosetta 2を用いてx86_64バイナリをARMに変換して実行した時にIntel CPUで直接実行した時より速くなる場合があるというのだから驚きだ。その要因を考察するにつれ一つの仮説に思い至ったのでここに記しておく。 その要因とはRISCとCISCの違いだ。殴り書きなので詳細は省くが、CISCのほうがやってることが複雑で単純な実行速度という意味ではRISCに敵わない。特にRISCの固定長命令という特徴がカギを握る。 CISCの代表がIntelのx86である。しかし2000年ごろにはCISCはもう駄目だ的なことが声高に叫ばれていたが、気が付けばx86はそのまま栄華を極め2020年にまで至ってしまった。そこまで持ちこたえた理由の1つがRISCとCISCの境目がなくなる Pentium Proの逆襲に書かれているのだが

    M1とRosetta 2が速い理由の考察という名目の妄想
    mizchi
    mizchi 2020/11/21
  • 多言語からみるマルチコアの活かし方

    多言語からみるマルチコアの活かし方 はじめに 近年では1つのCPUに複数のコアが搭載されたマルチコアが一般的になっています。 しかし、現状のプログラミング言語ではエンジニアが意識せずにマルチコアをしたプログラムを作ることは難しいです。 そこで、様々な言語から見たマルチコアの活かし方について説明していきます。 プロセスとスレッド プロセスとは1つ1つのアプリケーションといった実行中のプログラムのことで、スレッドは CPU利用の単位です。プロセスは次のように1つ以上のスレッドを持っており、CPUのコア数分だけスレッドを処理することができます。(また、近年ではSMTという技術によって1つの物理コアで2スレッドといった複数のスレッドを処理することができます。2コア4スレッドみたいなやつです) マルチコアを有効活用してプログラムを実行するためにはCPUが処理できるコア数に対して適切な数のスレッドをプ

    多言語からみるマルチコアの活かし方
    mizchi
    mizchi 2020/11/17
    node14 には worker_threads ある
  • Vue Refの糖衣構文と Svelte

    10/28に、Vue の著者ユーさんは Vue Ref の糖衣構文に関する RFC を提案した。 refの定義をJavaScriptラベル構文を使うことでさらに簡略化できます。この構文はSvelteとまったく瓜二つなので、ここで私の考えを書く。 まず、コードを見ていきましょう。 <script setup> // ラベル構文 ref: count = 1 function inc() { // .valueせずこのままcountを使える count++ } console.log($count.value) </script> <template> <button @click="inc">{{ count }}</button> </template> このコードを理解するには、まず Vue Composion APIをどんな役割をしているのかを理解しなければならない。 Vue Comp

    Vue Refの糖衣構文と Svelte
    mizchi
    mizchi 2020/11/17
  • データベースを遅くするための8つの方法

    はじめに Twitterのタイムラインを見ていたらバッチ系のプログラムで逐次コミットをやめて一括コミットにしたら爆速になったというのを見ました。当たり前でしょ、と思ったけど確かに知らなければ分からないよね、と思って主に初心者向けにRDBを扱うときの注意点をまとめてみました。 プログラミングテクニック的なところからテーブル設計くらいの範疇でDBチューニングとかは入ってないです。 自分の経験的にOracleをベースに書いていますが、他のRDBでも特に変わらないレベルの粒度だと思います。 大量の逐次コミットをする バッチアプリケーションでDBにデータをインサートすると言うのはかなり一般的な処理です。しかしデータ量が少ない時はともかく大量のインサートを逐次コミットで処理するとめちゃくちゃ遅くなります。数倍から十数倍遅くなることもあるので、10分程度のバッチが1時間越えに化けることもザラにあるので原

    データベースを遅くするための8つの方法
    mizchi
    mizchi 2020/11/15
  • プログラミング初心者のための JavaScript と Node.js の歴史、それを踏まえた勉強方法

    プログラミング初心者のための JavaScript と Node.js の歴史、それを踏まえた勉強方法 2020年でJavaScript学ぶならきっとブラウザ向けJSガン無視していきなり初手node.js(ただし暫く何も足さない)がいいんじゃないかというメモ - min.t (ミント) Node.js を教えることについて、自分は賛成なんですが、その学習パスが整理されてないなと思っていたのと、学習パスがなぜ整理されていないかについて書きます。 はじめに 問題意識として、今のプログラミングスクールや独学勢が Ruby on Rails に偏っていて、 Node.js の人間としては、歯がゆく感じているんですが、実際 Node.js を教えるとしても問題も多いと認識しています。 歴史の話は、当時の実情や政治を省いて結果だけを書きます。具体的には第一次ブラウザ戦争、第二次ブラウザ戦争を言及しませ

    プログラミング初心者のための JavaScript と Node.js の歴史、それを踏まえた勉強方法
    mizchi
    mizchi 2020/11/13
    書きました
  • WASMとRustはVue.js/React.jsを打倒するのか? - JSへの侵略の歴史

    はじめに 「Typescriptの次はRustかもしれない」という記事がバズってるのを見かけました。 なかなか面白くて、PAとしてのWASMRustを比較している記事です。ちょうど最近「レガシーおじさん、SPAを始めてみた。そして限界を知る」でも書いた通り最近SPAに手を出してみたのですが、いろいろやろうとするとSSRのためのBackend for Frontend (BFF)等が必要になるとわかり「これJSでやる必要なくない?」とも感じていたのでちょうど良かったです。 こういうのを見るとRIAやGWTのように似たアプローチで廃れた技術や、登場が早すぎたMeteor、今も頑張ってるMSのBlazorなど色々頭をよぎります。といわけで歴史を俯瞰する意味でHTML + JavaScriptとそれ以外の技術のせめぎ合いの歴史やMSのBlazorRustのyewなどWebassemblyを使う

    WASMとRustはVue.js/React.jsを打倒するのか? - JSへの侵略の歴史
    mizchi
    mizchi 2020/11/03
    GC付き言語のコンパイルサイズが現状重くなってる以上、難しいと思ってる。あと異なる言語からコンパイルされたものをリンクするときの仕様がまだない