Mobile Factory Tech Blog

技術好きな方へ!モバイルファクトリーのエンジニアたちが楽しい技術話をお届けします!

nestjs/swaggerで生成したOpenAPI 3.0の定義ファイルを使ってReDocにWebhookの項目を表示させる

みなさんこんにちはエンジニアのEadaedaです。 皆さんのチームではAPIドキュメントの生成に何をお使いですか?UniqysチームではReDocを使っています。 nestjs/swaggerを使ってコントローラーから生成したOpenAPIの定義ファイルを与えるだけでリッチなドキュ…

VSCode の Multi-root Workspaces を使用して TypeScript のインポートの書式を使い分ける

こんにちは、ブロックチェーンチームのソフトウェアエンジニアの id:odan3240 です。 ブロックチェーンチームでは、 NFT を販売するためのUniqysマーケットプレイス(以下、ユニマ)と、NFT サービス構築支援プラットフォームのユニキス ガレージ(以下、ガレー…

「YAPC::Japan::Online 2022」に2人のエンジニアが登壇し、スポンサーと運営をしました!

こんにちは。エンジニアのid:kfly8です。 3/4(金) 3/5(土) に、Japan Perl Associationが主催するPerlに関するオンラインカンファレンス「YAPC::Japan::Online 2022」が開催されました。 yapcjapan.org モバファクでは、駅メモ!や駅奪取などのプロダクトでPer…

イベントTシャツを支える技術 ー Acme::Bleachの詳解

こんにちは。エンジニアのid:kfly8です。 技術カンファレンスのノベルティで、コードを載せたデザインってイイですよね。謎解き要素で遊び心をくすぐりつつ、デザイン的にも普段使いしやすくかっこいいんですよね。リブセンスさんから2015年にもらったトート…

TerraformでGitHub Actions OpenID ConnectのIAM IdPを管理したい

こんにちは。エンジニアのEadaedaです。 皆さんのチームではGithub Actionsでaws-actions/configure-aws-credentialsを使っていますか?GitHub ActionsでAWS SDKやAWS CLIを使うために必要なクレデンシャルなどを設定してくれるactionで、我々のチームでは最…

YAPC::Japan::Online 2022でモバイルファクトリーのエンジニアが「TypeScript へ型安全性を高めながらリプレースする」という題で登壇します

こんにちは。id:kfly8です。 2022年3月4日(金), 3月5日(土)に開催されるYAPC::Japan::Online 2022にて、モバイルファクトリーのエンジニアのkimusonが「TypeScript へ型安全性を高めながらリプレースする」と題して登壇します。 登壇は3月4日(金) 20:00から…

google-github-actions/auth を使った GitHub Actions で Firebase へのセキュアデプロイ

こんにちは、エンジニアの夕凪です。 最近、 GitHub Actions が OIDC を正式サポートし、 AWS や GCP へのセキュアなデプロイが可能になりました。 そのうちの GCP の公式実装である google-github-actions/auth を使って、 Firebase へデプロイを行ってみた…

スクラムギャザリング2022に参加しました!

はじめに こんにちは。エンジニアのまえけんです。 1月5日から3日間開催されたスクラムギャザリング2022に行ってきたので、イベントのレポートや感想をまとめようと思います。 2022.scrumgatheringtokyo.org スクラムギャザリングとは 日本のスクラム/アジャ…

YAPC::Japan::Online 2022にイベントTシャツスポンサーとして協賛します

こんにちは。エンジニアの id:kfly8 です。Japan Perl Associationの理事として、YAPCの運営もしているのですが、今回はモバイルファクトリーからのお知らせです。 モバイルファクトリーは、2022年3月4日(金), 3月5日(土)に開催されるYAPC::Japan::Online 20…

肩の力を抜いて技術アドベントカレンダーを運用する

こんにちは。エンジニアの id:kfly8 です。 少し祝うには遅いですが、技術アドベントカレンダー2021無事完走しました ありがたいことに、ホットエントリーした記事もあり、編集担当としてはホッとしています(ホットエントリーだけに) tech.mobilefactory.j…

NFTが再販売された際のクリエイターへの還元機能についての紹介

こんにちは、ブロックチェーンチームのエンジニア id:charines です。 この記事ではNFTにおける「ロイヤルティ」と呼ばれる機能について紹介します。 ロイヤルティとは? クリエイターがアート作品などをNFT化して販売された後、そのNFTが購入者によってマー…

「メリハリのある TypeScript」で運用しながら型安全性を高めやすい TypeScript リプレースを行う

こんにちは、21 卒エンジニアの id:d-kimuson です。 モバイルファクトリーでは、最近のプロダクトではフロントエンドに TypeScript を採用していますが、僕がアサインされているプロダクトは歴史が長く JavaScript で書かれていて、今回 TypeScript へのリ…

技術ブログが書ける開発をする

この記事はモバイルファクトリー Advent Calendar 2021の25日目の記事です。 メリークリスマス エンジニアのid:kfly8です。 技術ブログの「ネタがない」といったコメントや「この記事の課題がよくわからない」といった記事レビューをすることがあります。技…

Jetpack ComposeでModifierの関数はどうして使えたり使えなかったりするのか

皆さん Jetpack Compose は触っていますか? Jetpack Compose といえば Modifier ですが、Modifier の関数は場所によって使えたり使えなかったりする場合があると思います。 どうなっているのでしょうか? 例えばこの画像のようなものを実装したいとします。…

gitを少し快適に扱うためのワンライナー3選

こんにちは、20卒エンジニアのthe96です。 弊社では、リモート下においても勉強会が日頃から開催されています。 以前、勉強会で同期のワンライナーのプロからawkを授けられて以来、ワンライナーで業務を少し改善することの楽しさに目覚めました。 この記事で…

eval "$(hoge init)"するツールをたくさん入れてるシェルの起動速度をちょっと良くする

皆さんのシェルの起動速度はどうですか?シェル起動時に eval "$(hoge init)" を実行するようなツールをたくさん入れていると徐々に遅くなってきてつらいですよね そこで以下のように hoge init の出力をファイルに書き出しておいて、起動時にはそれをsource…

ワインの資格取るために進捗管理やら何やらをした話

はじめに 今年の夏に在宅環境(筋肉)の整備に成功したうっひょいです. tech.mobilefactory.jp 今年,ワインエキスパートの資格を取得しました. 勉強のために様々なツールを使って進捗管理したことについて書きます. なぜ受験したのか いろいろ理由はありま…

1周回ってのポモドーロテクニック

ポモドーロテクニックを改めて実践したら結構良い感じだったので知見を共有します。 作業に集中できない、効率よく作業したい、そんな人におすすめです。 そもそもポモドーロテクニックとは 時間管理術の1つ。 集中の時間と短い休憩を繰り返して作業を効率…

MySQLでデータベース内のGenerated Columnをリストアップする

MySQL 5.7.6 以降ではGenerated Columnが使えます。 テーブル定義に計算式を記述すると計算結果をカラムとして扱えるようになる機能です。 駅メモ!でも最近利用しているGenerated Columnですが、データベース内で増えたGenerated Columnをリストアップした…

アプリに地図を埋め込むのは簡単!

駅奪取エンジニアのid:dorapon2000です。駅奪取では11月にゲーム内の地図のリプレースを行いました。地図そのもののスタイルも変わりましたが、地図の表示に使うライブラリも変更しています。今回は、アプリに地図を埋め込むだけであれば、ほんの少しのコー…

NestJS 製のプロジェクトのテストを@swc/jest で高速化する

NestJS は Node.js 向けのウェブフレームワークです。その特徴として Decorator を用いてクラスやメソッドにアノテーションをする仕組みを提供しています。 例えば API のエンドポイントを定義する場合は次のようなコードを実装します。 import { Controller…

CloudFront + API Gatewayの構成でCloudFront-Is-Mobile-Viewerなどのヘッダーを参照する時の注意点

はじめに CloudFrontからオリジンへのリクエスト時に特定のHTTPヘッダーを含めるには、オリジンリクエストポリシーの設定が必要です。 docs.aws.amazon.com CloudFrontを使用すると一部HTTPヘッダーが書き換えられ、特にUser-AgentヘッダーはAmazon CloudFro…

Mapbox GL JS で大量のデータを可視化する

はじめに 駅メモ!チームでエンジニアをしている id:wgg00sh です. 駅メモ!では2021年11月に「未取得の駅を地図で確認できる機能」をリリースしました. 今回はこの機能を実現するにあたって発生した問題の一例と,その問題をどのように解決したかについて…

VS Code + Code Runner でPerlテストをボタン一つでprove実行

普段Perlのテストはターミナル上で prove t/hoge.t で実行しています。 これを楽するために、VS Codeの拡張機能 Code Runner - Visual Studio Marketplace を使い、編集中のファイルを開いたまま、ボタン一つで実行できます。 拡張機能 Code Runner をインス…

miroをもっと使いたい!miroアプリ 3分クッキング

miro アプリ 弊社はモバワークを導入していて、チームメンバーも普段はフルリモートワークをしています。 チームではオンラインホワイトボードとしてmiroを導入していて、例えばこんな事に使ってます。 ボード上でタスクチケットの管理 残りタスクと進捗の可…

hyperfineを使ったCLIツールのベンチマーク

CLIツールのパフォーマンス気になりますね 皆さん普段様々なCLIツールをご利用かとは思いますが、そのCLIツールのパフォーマンスが気になったことはありませんか?私はまれによくあります。今回はそういうときに役に立つ hyperfine をご紹介です。 github.co…

MySQL 5.7 でクエリだけでランキングを実現する方法

ここ半年、競プロをこつこつ頑張っているエンジニアの id:dorapon2000 です。好きなアルゴリズムは累積和です。 解決したい課題 「MySQL 5.7 内で完結できるように、クエリだけでランキングを取得したい」 データベースのデータを使って調査をする際、ランキ…

外からやってくる値から TypeScript の型を守るライブラリ・ツールまとめ

こんにちは、新卒エンジニアの id:d-kimuson です 先日 type-predicates-generator という型定義からユーザー定義型ガード・アサーション関数を自動生成するツールをリリースして紹介記事を書いたのですが、感想とかを眺めていたら同じく外部から来た値に安…

プロダクトバックログが複雑すぎる!

はじめに はじめましての方ははじめまして、ブロックチェーンチームの id:Nanamachi です。夏頃まではエンジニアとして関わっていましたが、故あって現在はプロダクトマネージャとしての道を進んでいます。今日はそんな新米プロダクトマネージャが、膨れ上が…

Vue.jsでoffsetWidth, offsetHeightが取得できない時は

はじめに offsetWidthやoffsetHeightなどの幅や高さを取得する関数たちは、display: noneになっている場合、0を返します。 Vue.jsで要素の表示非表示にv-showを用いている場合、v-showはその要素にdisplay: noneを付与して制御を行うので、非表示中のoffsetW…