サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブラックフライデー
tech.yappli.io
こんにちは! データサイエンス室の山本(@__Y4M4MOTO__)です。 ヤプリではdbtを用いてデータ基盤を運用しており、dbt docsをデータカタログとして使用しています。 dbt docs整備の話はこちらの資料にて公開しているので、そちらをご覧いただけましたら幸いです。 speakerdeck.com ヤプリのdbt基盤には主にアプリユーザーの行動ログやアプリプラットフォーム「Yappli」のサービスDBのデータが入っています。これらのデータをSource, Staging, Component, Martの4つの層で加工しています。当時、dbt docsのdescriptionが埋まっていたのはSource層のテーブルのみで他の層はほとんど埋まっておらず、拡充率としては30% ほどでした。 そこで、dbt-osmosisというツールを導入して拡充率を80% まで引き上げました。
こんにちは!データサイエンスグループの山本( @__Y4M4MOTO__ )です。 さて、ヤプリのデータサイエンスグループ(以下、DSグループ)では2023年から分析用データ基盤の dbt 移行に取り組んでいます。 dbt 移行に至った経緯などについては昨年開催された Yappli Tech Conference 2023 にて発表しているので、そちらをご覧いただければ幸いです。 tech.yappli.io dbt 移行に伴い、ヤプリの各種サービスが参照しているデータマートも dbt 移行後のものへ切り替えを行っています。 dbt 移行後の分析用データ基盤(以後、 dbt 基盤)の運用が本格化してきたことで、その開発フローの方も併せて改善していきました。 この記事では、その時の話について記したいと思います。 なお、開発フロー改善は分析ツール「 Yappli Analytics 」のデータ
はじめに こんにちは。昨年の11月にYappliへ入社したしがないサーバーサイドエンジニアの佐野(@Kiyo_Karl2)です。 自分はYappliに入社するまでGo言語を利用した経験が無く、言語仕様についての理解がまだ浅いと感じる部分があるなと思っています。 そのため、今回はGo言語の最大の特徴でもあるGoroutineについてまとめてみました。 本記事は、4本の連載記事の1本目となります。 Goの並行処理入門-Goroutine基礎編 ←今ここ Goの並行処理入門-syncパッケージ編 Goの並行処理入門-channel編 Goの並行処理入門-select編 対象読者 Go言語の基礎はわかっているが、Goroutineについてはあまり理解していない メモリ、プロセス、スレッド、並行処理、並列処理といったワードについて概要とその違いを理解している 連載記事を通して取り扱わないこと 本連載
こんにちは。サーバチームの窪田です。 今回は、『A Philosophy of software design』 A Philosophy of Software Design, 2nd Edition: Ousterhout, John: 9781732102217: Amazon.com: Books で登場する「deep module」という概念の解釈とDDDのRepositoryの設計について考えていきます。 『A Philosophy of software design』について 概要 この本はコンピュータサイエンスのProfessorであるJohn Ousterhout氏 web.stanford.edu が書いた本で、シンプルなソフトウェアの設計で大切なことがいろいろな視点から述べられています。 冒頭で、complexity(複雑性)を「わかりにくさ+変更しにくさ」と定義し
サーバーサイドエンジニアの @shuymn です。 先日 Go の独自エラーについての記事を投稿しました。そこで error インターフェースを実装する時はポインタレシーバで実装しましょうという話をしました。そちらでは詳細は長くなるので割愛させていただきましたが、この記事では Go のインターフェースについて深掘りしつつ、前回の記事の主張を補完します。 インターフェースを満たす構造体を実装する方法 Go ではインターフェースを満たす構造体を実装する方法は 2 種類あります。 値レシーバでメソッドを実装する ポインタレシーバでメソッドを実装する 以下は error インターフェースの実装サンプルコードです。 type ErrFoo struct{} func (e ErrFoo) Error() string { return "foo" } type ErrBar struct{} fun
概要 こんにちは。サーバーサイドエンジニアの窪田です。 これまでの戦術的DDDについて以下のような記事で紹介してきました。 戦術的DDDをGoで実現する【entity編】 - Yappli Tech Blog 戦術的DDDをGoで実現する【Value Object編】 - Yappli Tech Blog Deep Moduleという観点から戦術的DDDのRepositoryの設計を考えてみた - Yappli Tech Blog 今回は戦術的DDDにおけるトランザクションの扱いについて注目します。 トランザクションは一見インフラ層の関心ごとなのでインフラ層で完結するように思えますが、DDDの本にある例では、ユースケース層で張っているソースコードの例が紹介されています。 なぜ、そのような設計になるのかを考えていきます。 DDDとトランザクションの関係 DDDとトランザクションは実は深い関係
こんにちは!SRE三橋です。 突然ですがSecurity Hub使っていますか?AWSを利用している企業様であればAWS Security Hubで継続的なセキュリティコンプライアンス対応状況の可視化、対策を実施していることが多いかと思いますが、今回はサードパーティ製のセキュリティSaaS「Shisho Cloud」を使ってみたのでご紹介したいと思います。 ※ この記事の内容は2023年5月12日現在の内容であり、AWS、ShishoCloudのアップデートにより内容が古くなる可能性があります。 はじめに 想定する読者 背景 Shisho Cloudとは Security Hub運用の辛さ 検証結果 導入難度 UI 診断レポート 網羅性 通知設定 運用性 カスタマイズ性 サポート体制 課金体系 おわりに はじめに 想定する読者 Security Hubに物足りなさを感じている方 日本製のイ
こんにちは、YappliでiOSエンジニアをしているカンです。 最近、TechBoosterの書籍「プロと読み解くモバイル最前線~アプリを支える最新技術~」を読んでWebKitでのSwiftUI、Swift Concurrencyへの移行が取り上げられており、その内容を紹介してみようかと思います。 booth.pm 概要 Swift Concurrencyとは? WebKitをSwiftUIで扱う UIKitでこれまで実装 SwiftUIでの実装 Cookieを扱うメソッドをasync/awaitに置き換え まとめ 概要 iOSにおけるSwiftUIフレームワーク登場は2019年9月、Swift Concurrencyのリリースは2021年9月です。 当初にあった問題も改善されてつつあり、弊社でもSwift ConcurrencyやSwiftUIを積極的に採用しています。 ただ古くから存在
Sentry大臣に就任しました。 こんにちは。フロントエンドエンジニアの武井です。 このたびフロントエンドチームのSentry大臣に任命されました。 なんやそれ、とお思いでしょう。 これはフロントエンドチーム内での役割分担を大臣と呼んでいるだけで、「○○担当」くらいの意味合いです。 こんな感じでわいわいとやっているフロントエンドチームの日常業務を少しご紹介いたします。 フロントエンドチームの大臣制度 大臣制度について少し補足すると、自分が主に参加しているプロジェクト以外にフロントエンドチームとして日々取り組まなければならない課題に担当を割り振ったものです。日々の作業割合としては1〜2割くらいをあてている感じでしょうか。 他に「デザインシステム大臣」や「Github大臣」「多言語大臣」などをフロントエンドチームのメンバーがそれぞれの分野に責任を持って活動しています。大臣だからといって偉くなる
こんにちは!NewRelic大好きSREの三橋です。 今回は「O'Reilly Japan - オブザーバビリティ・エンジニアリング」に感化され、社内でオブザーバビリティの布教活動を行なった話について記載します。 布教活動といってもまだ社内のエンジニア向けにプレゼンを実施しただけなのですが、まず第一歩を踏み出すことができたということで、発表にあたり工夫した点等をご紹介できればと考えております。 書籍自体の紹介については他の方もされているため、この記事では割愛させていただきます。 参考 dev.classmethod.jp 想定する読者 背景 発表にあたり工夫した点 SREの役割の説明 ヤプリにおける課題提起 書籍紹介 すでに実践できている内容の紹介については省く 具体例を挙げる 5W1Hを多少意識して疑問を投げかけながら資料を構成する ヤプリにおけるオブザーバビリティ New Relicに
サーバーサイドエンジニアの田実です! ヤプリのテックブログにちょくちょく投稿しているのですが、今数えてみたら23記事も書いていたようです。 ヤプリのテックブログに投稿した数も多いのですが、 実は私の ブログ も含めると、これまで書いてきたブログ投稿数は400以上になります。 そういうわけで、社内外でブログを書くコツやネタ探しなどで相談を受ける機会も増えてきたのと、今年もヤプリのテックブログが盛り上がっているため、今回は「ブログを書く技術」というメタなテーマで書いていこうと思います! ※この記事は ヤプリ #1 Advent Calendar 2022 の11日目の投稿になります! 俺たちはなぜテックブログを書くのか スキルの向上 コミュニティへの貢献 社内共有・社内認知 情報交換のツールとして メリットはわかった。じゃあ何を書けばよいの? 書き方やメンタル的TIPS ネタの賞味期限と技術的
SREチームの中原です。 Aurora MySQL 2.x で運用している本番DBから Aurora Serverless v2 な調査用DBを作成する方法について書いてみます。 TL;DR Aurora MySQL 2.x で運用しているDBでも Serverless v2 な調査用DB立てられるよ ただし毎回メジャーバージョンアップの処理が必要なので時間かかるよ (弊社の環境で1.5〜3時間) Aurora Serverless v2 だとクエリーの途中でもスケールアップしてくれるのでハッピーだよ AWS さん Aurora Serverless v2 の Aurora MySQL 2.x 対応はよ! Aurora MySQL 3.x の LTS 版提供はよ! 経緯 弊社の本番DBは Aurora MySQL 2.x の LTS バージョンで運用しています。 これまで本番影響なく調査用
皆さんこんにちは。プロダクト開発本部・フロントエンドチームの平川です。 Yappli Tech Conference 2022で 「フロントエンドにおけるテスト戦略」というテーマで登壇しました。 アーカイブ動画 youtu.be スライド 発表概要 ヤプリのフロントエンドは管理画面であるCMSを開発しています。 歴史的経緯もありフロントエンドのテストが十分に足りていない、どのレベルでテストを書けば良いか不明瞭な状態になっているといった課題がありました。 そのような課題を解決するためにヤプリにおけるフロントエンドのテスト戦略について、テスト戦略を考える上で参考にした一般的な知識も交えながらお話ししました。 詳しくはアーカイブ動画・スライドをご覧ください。 最後に 発表を見ていただいた皆様ありがとうございました! 個人としては入社半年も経たないタイミングでこのような大きな舞台に登壇する機会を頂
サーバーサイドエンジニアの @shuymn です。 Yappliではサーバーサイド領域で利用するプログラミング言語のうちの1つとしてGoを採用しています。 Goには様々な言語機能がありますが、その中の1つにdefer文(defer statement)と呼ばれる機能があります。 本記事ではdefer文の簡単な紹介と実際にプロダクトコードで利用する際に気をつけるべきことを紹介します。 defer文の紹介 defer文を使う時に気をつけること defer文の中身が実行される順番を把握する os.Exitするとdefer文は実行されない defer文で発生するエラーをどうするか defer文に渡した関数の引数は即時評価される forループでループごとにdefer文を実行する方法 defer文はエラー処理より先に書かない さいごに 参考記事 defer文の紹介 defer文はifやforなどの制御
ヤプリの新卒Androidエンジニアの近藤(ふなち/@_hunachi)です。 AndroidでVPNに接続する一般的な方法とその問題点 皆さんは、AndroidでVPN接続するときはどのようにしていますか? 私は、OSに標準で搭載されているVPN接続機能を使用するのが一般的な方法かなと思います! 一般的なVPNの設定方法 この方法ですね↑ ですがAndroid 12以降では、この方法だと使われているプロトコルが IKEv2/IPsec 系の場合しか対応できなくなってしまいました😭 設定できるプロトコルを表示 しかもAndroid 12ではAndroid 11以前で設定できていたものを使用して接続できるのですが、Android 13ではその方法での接続もできなくなっています。 でもAndroid 11以前で使用していたプロトコルなど、違うプロトコルを使っているVPNを使いたい時ってありま
はじめに こんにちは。サーバサイドエンジニアの窪田です。 前回の 戦術的DDDをGoで実現する【entity編】 - Yappli Tech Blog に続き、 今回は戦術的DDDにおける、Value ObjectがGoでどのように書けるのかを考えていきます。 例によってTypeScriptとの書き方の違いも一緒に考えていきます。 要件・目指す状態 ドメインルールを表したドメインモデルが定義されている 値の性質を満たした実装がされている という状態を目指します。 書いてみる ドメインモデルを定義する 例えば、ある登録制のサービスでのユーザーネームについて考えます。 そのユーザーネームが 5文字以内でなくてはいけない 半角英数字のみでなくてはいけない というドメインルールがあるとします。 TypeScriptでは以下のように書けます。 class UserName extends Strin
サーバーサイドエンジニアの田実です! Yappliではアプリのリリース前に下書きのコンテンツ(プレビュー)を事前に確認したり、下書きのコンテンツを本番に反映する機能があります。 stagingブランチでアプリの動作確認を行い、問題がなければstagingブランチをproductionブランチにマージして本番反映するといったGitの開発・デプロイフローがあると思いますが、こういった運用をノーコード上で実現できる機能です。 また、スナップショットと呼ばれる任意の時点でコンテンツのバックアップを取得・復元する機能もあります。 こちらもGitのコミットをリバートしてロールバックするような機能をノーコード上で実現したものです。 コードを書くエンジニアにとってGitのブランチが不可欠なツールであるのと同様に、ノーコードプラットフォームのYappliを使ってアプリを運用する非エンジニアのお客様にとって、
はじめまして、フロントエンドエンジニアのこん(@k0n_karin)です🦊 2021年の12月に入社して早々に、Discordというアプリを社内のコミュニケーションツールとして試す提案をしました。 試験的に導入して半年ほど経ったので、弊社でどのように運用しているか、使ってみて良かった点などをまとめようと思います。 Discordとは? discord.com Discordは、コミュニティや友達と集う居場所をつくれる空間。 筆者の印象では、ゲームなどのボイスチャットでよく使われている(使ってる)ツールです。 ヤプリDiscordサーバーの様子 どこに誰がいるか、今誰が喋っている/喋れないか、などがひと目でわかるようなUIが特徴的です。 最近では、リモートワークやカンファレンスでも使われる事例があるようです👀 developers.microad.co.jp note.com engin
データサイエンティストの阿部です。妻に誘われて俳句を始めました。『プレバト!!』でお馴染みの夏井いつき先生が評価してくれるおウチde俳句クラブに加入して楽しんでます。 さて、明日から使いたくなるデータハンドリング術を紹介する "Sexy Tech for You" の第12話を配信しました。最近ヤプリでは、手動運用するスプレッドシートをBigQueryに連携してマスタとして活用するケースが増えてきました。そんなとき、ユニーク性を担保するのに便利なQUALIFY句を紹介しました。 動画中に記載したクエリや補足事項を本ブログに掲載しますので、少しでも皆様のお役に立てたら幸いです。 Youtube BigQuery クエリ QUALIFY句例 WITH dat AS ( SELECT "A" AS id, "部署1" AS group_name UNION ALL SELECT "B" AS i
サーバーサイドエンジニアの @shuymn です。 2022年5月現在Yappliではサービスのソースコードをサービス単位でリポジトリとして分割するmultirepo*1スタイルでソースコードを管理しています*2。 この記事では、複数ブランチを行き来しながら開発をするときに困ったことと、それに対処する方法として利用したgit-worktreeの紹介に加えてmultirepoでの活用例を紹介します。 実行環境について 本記事に記載しているGitコマンドは以下のバージョンで動作確認をしています。異なるバージョンの場合、動作が異なる可能性がありますので実行前に公式のリファレンスをご確認ください。 $ git --version git version 2.36.1 困ったこと Yappliのソフトウェアエンジニアは常にそのとき所属しているプロジェクトで担当しているタスクだけに取り組むのではなく、
ヤプリの望月です。 最近結婚10年を迎えましたが、スイートテンダイヤモンドという古来からある風習の圧力に屈していました。 話は変わりますが、先日2022-05-14,15に開催されたSRE NEXT 2022で、ヤプリのセキュリティの取り組みについて発表させていただきました。 speakerdeck.com 発表の概要 発表内容としては、これまでヤプリのSREが取り組んできたセキュリティの取り組みについてお話しさせていただいております。 現在ヤプリにはセキュリティエンジニアが在籍していません。 そういった状況のなか、SREに限らずIT(情シス)エンジニアやサーバーサイドエンジニアが、個々の強みを活かしながら会社全体としてセキュリティを推進しています。 open.talentio.com 振り返ってみると、セキュリティ対策が進んだきっかけの一つとして、2020-12の株式上場が挙げられます。
サーバーサイドエンジニアの田実です! Yappliでは各APIの通信にgRPC, Protobufを採用しています。 本記事ではYappliにおけるgRPC, Protobufの利用方法・運用方法についてご紹介します! 利用箇所 以下のAPI通信においてgRPCを利用しています。 用途 プロトコル クライアント サーバー ネイティブアプリ用API gRPC(gRPC-Gateway経由) アプリ Go Webフロントエンド用API gRPC-Web TypeScript Go サーバー間通信 gRPC Go Go gRPCだけではなくgRPC-Gateway, gRPC-WebとgRPC系をフル活用しています! 運用方法 全容はこんな感じになります。 それぞれのインターフェースを変更する場合は、開発者がprotoファイルを修正してprotoファイル用のリポジトリにpushします。 push
サーバーサイドエンジニアの田実です! Yappliのネイティブアプリ向けのAPIは一部gRPC-Gatewayで実装されています。 インターフェース仕様の共有・確認はprotoファイルやwiki*1、Slackを使って行っていましたが、protoファイルだとリクエスト・レスポンスの全容が一見して把握しづらく、wikiやSlackだと反映漏れや最新の仕様が追いづらい等の課題がありました。 本記事ではこれらの課題を解決するために、Swaggerを使ってgRPC-GatewayのAPIドキュメントを自動生成した話を紹介したいと思います! protocを使ってOpenAPIのドキュメントを自動生成 gRPC-Gatewayのprotoc-gen-openapiv2のプラグインを使うと、protoファイルからOpenAPIの定義ファイルを書き出せるようになります。 $ go get -u githu
サーバーサイドエンジニアの田実です! Yappliはノーコードでネイティブアプリを作れるプラットフォームで、システム構成としてマルチテナントアーキテクチャを採用しています。 一言にマルチテナントアーキテクチャと言っても様々な実装方式があり、各プラットフォームの要件に応じて適切にアーキテクチャを選択していくことが重要です。 本記事ではYappliにおけるマルチテナントアーキテクチャの実現方法をYappliが抱える課題や特性を踏まえてご紹介します。 前提: Yappliの機能要件 SQLite3によるマルチテナントアーキテクチャ SQLite3の運用における課題 データ集計の課題解決: ETL スケールアウト・冗長化の課題解決: マイクロサービス化とAmazon EFS 現行アーキテクチャの課題について まとめ 前提: Yappliの機能要件 Yappliには「再構築」と呼ばれる、下書きの状態
iOSエンジニアの三縞です。 ヤプリでは2週間に1度木曜日、普段なかなか手を付けられずにいる改善系のタスクに取り組む「Yappdate Day」を実施しています。 私は今日の Yappdate Day で Xcode 10.2 および Swift 5 への対応を行ったので、その内容を紹介しようと思います。 前提 移行前は Xcode 10.1, Swift 4.2 でした。 ライブラリ管理ツールにはCarthageを使用しています。CocoaPodsは使用していません。 行った手順 Xcode 10.2 をインストールして開く Preferences > Locations > Command Line Tools を「Xcode 10.2」に設定 Carthageのアップデート $ brew upgrade carthage Carthage管理のライブラリの再ビルド $ carthag
こんにちは、ヤプリの三縞です。 Xcode 11 からはiOSプロジェクトを新規作成すると AppDelegate と同時に SceneDelegate も自動生成されます。 この記事ではこの SceneDelegate について、その役割や AppDelegate との違いについて調べたことを残しておきます。 SceneDelegateの役割 SceneDelegate によって、1つのアプリに対して複数のUIのインスタンスを作れるようになります。 今秋にリリースされるiPadOSでは Slide Over / Split View 機能で1画面の中に同じアプリを2つ並べることができるようになりますが、これはこの「1つのアプリに対して複数のUIのインスタンスを作れるように」なることで実現可能となります。 Xcode 11 からはiOSプロジェクトの新規作成時に自動で SceneDeleg
こんにちは、ヤプリでAndroidエンジニアをしている白井です。 ARCoreを試してみる流れでOpenGLを触る機会があり、勉強も兼ねて動画と画像を合成してみましたので紹介したいと思います。 OpenGL ESとは OpenGL for Embedded Systems (OpenGL ES)とはKhronos Groupによって開発されたコンピュータグラフィックスAPIで、スマホなどの組み込みシステムで利用されています。 iOSやAndroidでも特にゲーム系アプリで多く使われています。 UnityやARCore Sceneformなどゲームエンジンやグラフィックエンジンの中で実装されており、開発者がこのAPIを直接叩く機会はそれほどないかもしれません。 OpenGL ESを直接利用するには学習コストも高く容易ではありませんが、それでも特殊な処理(例えばARCoreでトラッキングした座
このページを最初にブックマークしてみませんか?
『Yappli Tech Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く