もふもふ技術部

IT技術系mofmofメディア

技術ブログをNuxt + Netlify + Contentfulから、はてなブログ for DevBlogに移行しました

こんにちは。出口です。 タイトルにある通り、技術ブログをはてなブログに移行しました。 この記事では、なぜ移行することになったのか、どうやって移行したのか、移行で苦労したところなどをまとめておきたいと思います。 もし脱セルフホストブログ、脱Cont…

DevOps活動の半年間の振り返り

はじめに mofmofではDevOpsを推進しており、たくさんのプロジェクトに導入が進んでいます。 ここでは、そのうち2つの異なるプロジェクトの振り返りを通じて、私たちが直面した課題、取り組んだ改善策、そして得られた教訓を共有します。 2つのプロジェクトの…

GitHub Copilot CLIを試してみた

https://docs.github.com/ja/copilot/github-copilot-chat/using-github-copilot-chat-in-your-ide GitHub CopilotのCLI版です。 2023年12月5日現在パブリックベータで公開されています。 インストール gh auth login gh extension install github/gh-copilo…

NestJSでGraphQL利用時にFirebase認証結果をデコレーター@CurrentUserで取得できるようにする

タイトルのとおりですが、NestJSのGraphQL利用時に、Firebase Authenticationの idToken を使って認証する実装方法について考えました。 前提 以下のようなデータベーステーブルを定義しています。 // Firebaseアカウントと同期されるテーブル model Account…

NestJSを学ぼう

NestJS はNode.jsでサーバーサイドアプリケーションを構築するためのフレームワークです。 mofmofではNestJSに力を入れています。 今回は、他のフレームワークでサーバーサイドアプリケーション構築経験のあるエンジニアが、NestJSに入門する際に何を知って…

LangChainとNext.jsで簡単なチャットBotを作ってみる

JavaScript版のLangChainを触る機会があったので、備忘録も兼ねて簡単なチャットBOTを作ってみます。 構成 さくっと動かしたいのでNext.jsのAPI Routes上でLangChainを使います。 簡略化のためにチャット履歴はメモリ上に保存します。※Nextを再起動するとチ…

LangChainとpgvector(Postgres)を用いて関連性の高いドキュメントを手軽に検索する

こんにちは エンジニアのshwldです。 「LIKE検索で引っかからないような検索ワードでも関連性が高いなら検索結果に出したい」 このようなニーズは多くあると思いますが、実装するのは結構大変です。 mofmofが提供しているMy-opeでは、チャットボットに質問す…

デプロイ漏れを検知して通知するGitHub Actionを作った話

mofmofでは fourkeys を用いて開発生産性を計測しています。 あるプロジェクトチームが、複数のサービスを管理していました。 コードレビュー、マージ、検証というフローを辿ってリリースされるのですが、 検証完了後にリリース作業が漏れてしまうケースが有…

EventStormingを用いて複雑なシステムの設計に挑む

こんにちはmofmofでエンジニアをしているshwldです。 最近仕事で既存のシステムと連携する新しいプロダクトの設計をEventStormingで行いました。 はじめに 新しいプロジェクトの設計に悩んでいるチームメンバーがいました。 そのプロジェクトの状況は、以下…

mofmofのDevOps活動

mofmofのメンバーに向けてDevOps活動を浸透させるために、DevOpsで解決したい課題や計測方法などを書き出してみます。 課題 mofmofでの導入の背景・ニーズについて。 mofmofはアジャイル開発を得意としており、開発と運用の連携を目指す体制の下地はある。 …

GraphQL RubyでバリデーションエラーをUnion Typeで返す

graphqlでエラーを返す方法はいくつかあり、それぞれメリデメありますが、Unionで返すのが好みです。 例えば、以下のようにmutationで実行時のバリデーションエラーを共通のフォーマットで返すことを考えてみました。 mutation createPost($input: CreatePos…

イベントストーミングとユーザーストーリーマッピングをスムーズに連携させる

イベントストーミングとユーザーストーリーマッピングの違い、使い分けについて考えました。 また、似てるので実際に両方やってみました。その感想も書いています。 イベントストーミングとは? ドメインイベントや、イベントの発生条件、集約、外部システム…

TypeScriptで「DateRange型」の正しさを保証する

今回はTypeScriptで「DateRange型」のような型を作る利点とその正しさを保証する方法を書きます。 DateRange型の例 type DateRange = Readonly<{ since: Date; until: Date; }>; 利点について Domain Modeling Made FunctionalはF#で関数型によるDDDを実践す…

LeanとDevOpsの科学を読んだ記録(10章〜11章)

mofmofでは最近、「LeanとDevOpsの科学」という本の輪読会を行っています。 この本の輪読会は定期的に開催し、第一部である11章までを読みました。 過去の記事はこちら 第1章:なぜケイパビリティに着目するのか。LeanとDevOpsの科学を読んだ記録(1章) 第2…

LeanとDevOpsの科学を読んだ記録(8章〜9章)

mofmofでは最近、「LeanとDevOpsの科学」という本の輪読会を行っています。 この本の輪読会は定期的に開催し、順次後ろの章についてもログを投稿する予定です。 過去の記事はこちら 第1章:なぜケイパビリティに着目するのか。LeanとDevOpsの科学を読んだ記…

LeanとDevOpsの科学を読んだ記録(5章〜7章)

mofmofでは最近、「LeanとDevOpsの科学」という本の輪読会を行っています。 この本の輪読会は定期的に開催し、順次後ろの章についてもログを投稿する予定です。 過去の記事はこちら 第1章:なぜケイパビリティに着目するのか。LeanとDevOpsの科学を読んだ記…

DevOpsの導入時に考えたい4つのこと

mofmofでは最近、「LeanとDevOpsの科学」という本の輪読会を行い、DevOpsを実践する活動を始めました。 自社プロダクトへの導入の際に考えるべきことを4つ紹介します。 1. 導入の目的と期待する効果を明確にする DevOpsはプラクティスは、変化の大きな市場環…

技術的プラクティスの重要性。LeanとDevOpsの科学を読んだ記録(4章)

mofmofでは最近、「LeanとDevOpsの科学」という本の輪読会を行っています。 この本の輪読会は定期的に開催し、順次後ろの章についてもログを投稿する予定です。 過去の記事はこちら 第1章:なぜケイパビリティに着目するのか。LeanとDevOpsの科学を読んだ記…

組織文化がなぜ重要か?LeanとDevOpsの科学を読んだ記録(3章)

mofmofでは最近、「LeanとDevOpsの科学」という本の輪読会を行っています。 この本の輪読会は定期的に開催し、順次後ろの章についてもログを投稿する予定です。 過去の記事はこちら - 第1章:なぜケイパビリティに着目するのか。LeanとDevOpsの科学を読んだ…

良いコードとはなにか。なぜ必要か。DevOpsとアジャイル、質とスピードについて考える

良いコードと言って、どんなことを思い浮かべますか? 変更容易性、テスト容易性、拡張性、信頼性、可読性、保守性、効率性、、、 どういうコードが良いコードなのでしょう。これをどうやって説明しますか。 良いとされる設計手法や、テクニックはたくさんあ…

開発組織のパフォーマンスをどうやって測定するのか。LeanとDevOpsの科学を読んだ記録(2章)

mofmofでは最近、「LeanとDevOpsの科学」という本の輪読会を行っています。 この本の輪読会は定期的に開催し、順次後ろの章についてもログを投稿する予定です。 前回は1章を読みました。記事はこちら「なぜケイパビリティに着目するのか。LeanとDevOpsの科学…

なぜケイパビリティに着目するのか。LeanとDevOpsの科学を読んだ記録(1章)

mofmofでは最近、「LeanとDevOpsの科学」という本の輪読会を行っています。 この本の輪読会は定期的に開催し、順次後ろの章についてもログを投稿する予定です。 成熟度モデルの問題点 この本の第1章は、多種多様な組織において、戦略目標設定、状況把握を正…

【Flutter 連載記事第4回】S3を使って画像アップロード・ダウンロードする

本記事について 本記事はシリーズ連載記事の第4回になります。 今回はAWSのS3に入れた画像データをダウンロードして表示させたり、アプリからS3に画像アップロードさせるような仕様を実装する方法をご紹介しようと思います。 flutterの環境構築 widgetを使っ…

【Flutter 連載記事第5回】TODOアプリを作成する

本記事について 本記事はシリーズ連載記事の第5回になります。 今回は今まで学んできたことの総まとめという形で、簡単なTODOアプリを作ってみようと思います。 flutterの環境構築 widgetを使った画面表示や、画面遷移をさせる DBの設定やCRUDをする S3を使…

【Flutter 連載記事第3回】DB(Firestore)の設定やCRUDをする

本記事について 本記事はシリーズ連載記事の第3回になります。 アプリの仕様として外部APIなどにアクセスしてデータを取得したり、ローカルに持っているデータだけでやりくりすることでDBを使わずに実装出来るものもありますが、やはり何かしらデータを登録…

serverless framework でS3バケットの作成・操作をする

serverless framework でS3バケットの作成・操作をする 概要 serverless frameworkでS3バケットを作成し、画像を登録・取得します。 リクエストにはfetchAPIを利用しました。 実装 今回の実装内容はgithubにも載せてありますのでご参考までに。 https://gith…

【Flutter 連載記事第2回】widgetを使った画面表示や、画面遷移をさせる

本記事について 本記事はシリーズ連載記事の第2回になります。 第1回では環境構築が完了しましたので、本記事ではその状態から引き続き進めていきます。 flutterの環境構築 widgetを使った画面表示や、画面遷移をさせる DBの設定やCRUDをする S3を使って画…

graphql-rubyでRSpec実装してみた

はじめに graphql-rubyでは大きく分けてスキーマ構造テストと統合テストの2種類がありますが、今回は統合テストのmutationスペックについて紹介していきます。 記事について graphql-ruby初学者向けの記事を書いています。 関連記事 graphql-batchでN+1を解…

RedwoodJSに入門してみた(第5回: 実際に使ってみて感じたこと)

この記事について この記事は、全5回の第5回です。 RedwoodJSに入門してみた(第1回: アプリ作成〜モデル作成) RedwoodJSに入門してみた(第2回: CRUD作成 API編) RedwoodJSに入門してみた(第3回: CRUD作成 WEB編) RedwoodJSに入門してみた(第4回: dbAu…

serverless frameworkでlambda関数からmysqlへの接続を試してみた

概要 serverless frameworkで作成するlambda関数から同じくserverless frameworkで作成したRDSのmysqlへ接続を試しました。 今回利用するRDSはこちらの記事で実装したものになります。 serverless framework でバブリックアクセス可能なmysqlを立ててみた |…