サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
マンガ大賞候補作は
tech.unifa-e.com
随分も昔のとある開発現場にて、 「プロだったら普通に期間内に終わらすでしょ?」 「どうしてこんな普通の事わからないの?見てわかるよね?」 「そんな操作は普通の人はしない!」 「普通に使えるものを開発して欲しかった」 会議は普通という言葉が踊っていた 参加していたQAエンジニアは思う この現場の「普通」は狂ってる…っと… なんか導入が他の皆さんと毛色が違う感じになってしまいました。 とあるユニファのQAエンジニアでぐちです。 普通ってなんだろうね? 皆さん「普通」ってどういうイメージ持ってます? 当たり前、特に変わりがない、平均的、一般的… まぁ「そうあって当たり前」といった感じですよね? この当たり前と思わてる「普通」ですがQAにとっては非常に怖い存在でして、 「普通」踊らされるとQAはすごく苦しみます。 企画者の普通 デザイナーの普通 プログラマーの普通 ユーザーの普通 などなど… 物作
By Vyacheslav Vorona, iOS engineer at UniFa. You may have heard of Rust Language, said to be designed for "memory safety and speed". Being an iOS developer, I didn't pay much attention to Rust since we typically use Swift. It by design prevents unsafe behavior in terms of memory usage and is supposed to be, well... swift. However, some time ago I stumbled upon a blog post mentioning Rust as a way
ユニファの西川です、こんにちは。 今年の7月からプロダクトデベロップメント本部を離れ、別の新しいことをやってます(何やってるか興味ある方はぜひ面談ご応募お願いします)。 ユニファではCOMFORTABLE ZONEを自ら抜け出ることが大好きな人たちを大絶賛歓迎 & 募集中です。 unifa-e.com 今日は「ある条件に当てはまる時には一定期間無償でSaaSプロダクトを提供する」というありがちな割引やキャンペーン(以下、割引CP)について、 割引CPによってどれくらいCVRが上がるならばペイするのか 割引CPがペイするには無償期間を何ヶ月以内に収めなければならないのか …の2点を解析してみたいと思います。 前提 今回のブログでは、 「割引CP実施時の限界利益 > 非実施時の限界利益」 を「ペイする」と表現*1 対象として見る売上は月額料金のみ コストにおいても初期費や解約コストは考慮しない
こんにちは、はじめまして。 今年の4月からデザインチームにプロモーション担当としてジョインしているデザイナーの谷崎です。 私はいま、富山県からフルリモートで在宅勤務しているのですが、一回もオフィスに行ったりリアルでお会いしたことがないにも関わらず、首都圏在住のチームの皆さんとの距離はまったく感じません。ほぼパフォーマンスに差し支えない、と言っても過言ではないです。 「地方からフルリモート勤務」という働き方もじわじわ広がってきている昨今、リモート勤務に関わる皆さまの参考になればと思い、なぜ私がチームとの距離を感じず楽しく働けているのかをまとめてみます。 ※アイキャッチ中の写真は、お花見の時に撮った富山が誇る名峰、立山連峰の写真です。ちょっと足を伸ばせば、こんな景色が当たり前の環境で仕事させてもらえているのは、やっぱりいいなとしみじみ……。 1. 部署をまたいだ情報共有体制が整っている わから
こんにちは、データエンジニアリングチームの宮崎です。 最近、ユニファのデータを統合的に分析するための基盤開発に取り組んでおります。 そこで、本記事では開発の概要についてご紹介したいと思います。 開発のモチベーション これまで、ユニファでは日々のデータ分析にRedashを用い、直接サービス中のDBに対してクエリを投げて行ってきました。 しかし、サービスの成長とともにDBへの負荷が懸念されたり、複数のプロダクトやCRMのデータを組み合わせて統合的に分析したいという需要が高まってきました。 そこで、サービス中のDBから独立して実行可能で、よりリッチな分析を可能とするデータ分析基盤の開発に取り組み始めました。 データウェアハウスの選定 今回、データ分析基盤の中核となるデータウェアハウスとしてGCPのBigQueryを採用することにしました。 ユニファではメインのクラウドとしてAWSを活用しており、
この記事はユニファ開発者ブログ Advent Calendar 2021 の 7 日目の記事となります。 adventar.org こんにちは、プロダクトエンジニアリング部の田中です。 今回は、1on1 で約 2 年半使用している事前面談シートの振り返りをしてみます。 私が所属しているプロダクトエンジニアリング部では定期的に 1on1 が実施されています。 頻度と時間は各々で調整可能で、私は 2 週間に 1 回、30 分の間隔で上司にお願いしています。 元々は 1on1 を受けるにあたり特に用意も何もせず手ぶらで臨んでいたのですが、終了後に時折「あっこれ言い忘れた」ということがあり、良くないなと感じていました。 そんな折、以下のブログ記事を拝見し、それ以来こちらの事前面談シートを使わせていただきまして(ありがとうございます)、シートに記載し、上司に共有した上で 1on1 の時間を迎えるよう
あいわらず鍋ばかり食べているWebエンジニアの本間です。 ただ、鍋の種類はごま豆乳鍋から寄せ鍋に変わりました。 さて1ヶ月以上遅れになりますが、 Ruby 3.0 が無事リリースされました。 まずはリリースに携わった全ての皆さま、本当にありがとうございます。 また今回は念願のメジャーバージョンアップであり、Ruby 3x3の達成おめでとうございます! 速く、使いやすくなったRubyをこれからもバリバリと使わせいただこうと思っています。 そのRuby 3.0で並行処理関連の2つの機能が追加されました。 Ractor Fiber Scheduler これらを見て「そういえばRubyの並行処理って何があるんだろう?」という疑問が浮かびました。 また、過去にこのようなエントリを投稿していたこともあります。 tech.unifa-e.com 新しい機能が追加されたタイミングで過去の機能も含めて整理し
こんにちは、プロダクトマネージャーの田嶋です。 はじめにお断りしておきますが、本記事は、2021年7月にリリースした開発プロジェクト(以降「Rプロジェクト」)において、遅延なく開発を進められたことのプチ自慢です🎉 笑 週次で滞りなくバーンダウンが落ちていく様子を、チームで安心して見ることができました。スケジュールのストレスなく開発を進めることができたのは、チームの頑張りのほか、見積もりとスケジュール管理が良かったからだとも思っています! 開発プロジェクトにスケジュールが求められる理由は様々ですが、キャンペーン施策や営業資料の準備計画を立てるため、あるいは利用顧客へも告知責任があるから、などです。そのいずれの場合も、計画やそのための作業見積もりは欠かせません。 しかし多くの開発プロジェクトにおいて、実績は見積もりよりも上振れし、遅延してしまうことが多いのではないでしょうか。 本記事では、R
(2021-04-19追記)下記内容を追記しました。 ログの出力方法 注意点 人生初の某春のパン祭りに参加中のWebエンジニアの本間です。早くゴールしてご飯に戻りたい...。 さて、弊社のRailsアプリケーションの多くは、Amazon ECS + AWS Fargateの組み合わせで稼働しています。 過去はEC2上で動かしていたのですが、ECS + Fargateに移行したことで様々なメリットがありました。 しかし、ECS + Fargateに移行したことでデメリットもあります。 EC2でRailsを動かしていた時代では、作業用のEC2にsshで接続し、そこでrails consoleを動かして作業、ということが簡単にできていました。 ECS + Fargateに移行してからはこの方法が使えなくなってしまったため、データ修復やジョブリトライの作業を行うのが難しくなりました。 DBに直接接
研究開発部の浅野です。普段は画像やヘルスケアデータを扱うことが多いのですが、最近シフトスケジューリング問題に興味をもって学び始めたので、その内容を少しご紹介したいと思います。シフトスケジューリング問題とは、人員の配置基準や働く人の希望、能力、相性、業務負荷などを加味しながらある一定期間(1ヶ月など)の勤務シフト表を作成する問題です。看護師のナーススケジューリングが有名ですが、保育士のシフト作成も多くの園長先生が頭を悩ませていることの一つです。今回はこの問題を最適化問題としてモデル化・定式化して実際に解いてみたいと思います。 最適化問題は、制約条件を満たす解の中で、目的関数を最小(最大)にする解を求めるもので、次のように定義されます。 \begin{align} minimize \quad &f(x): &目的関数\\ subject \; to \\ &g(x)>= 0: &不等式制約条
こんにちは。人間中心設計(HCD)専門家のやまぐち(@hiro93n)です。 主にプロダクトマネージャーやQAエンジニアの部署でマネージャーをやっています。キャリア的にはデザインの部署のマネージャーのやりたさもあるのでデザイナーにかかる課題解決などにも首を突っ込んでいます。マネージャーばかりでゲシュタルト崩壊しそうですね。自分はしました。 そんなわけでこの記事はユニファAdvent Calender 2020、22日目の記事です。 いいマネージャーになりたい人ほどマネージャーをクビになる いい人をやめて、悪人になれ? でもやっぱり嫌われたくないあなたへ 三方よしへの近道はメンバーに好かれることじゃない いいマネージャーになりたい人ほどマネージャーをクビになる さて、社内では「我こそはマネージャー」みたいな顔をしていますが、ユニファに入社するまでこれまで少なくとも3度はマネージャー(この場合
こんにちは。スクラムマスターの渡部です。 最近出版された「心理的安全性のつくりかた*1」という本が、発売から2ヶ月経たずに4版決まった*2り、Tech系カンファレンスでも心理的安全性についてのセッションがあって*3かなり盛り上がったりと、心理的安全性機運の高まりを感じている昨今です。 当然(?)ながら僕も「心理的安全性のつくりかた」を読んで、短期的にも長期的にも今後のふるまいを見直す良いきっかけになりました。 ただ、いかんせん「心理的安全性ってわかりにくい言葉だなぁ」という感想は今でも変わっていないので、備忘的な意味で次の2つのことをブログに残したいと思います。 このブログで扱うこと そもそも、心理的安全性ってなに?どんな効果があるの? 心理的安全性を阻害するBadパターン このブログで扱わないこと 心理的安全性を構成する4つの因子の詳細 いかにして心理的安全性を高めていくか? これらは書
こんにちは、最近野菜が高いのでもやしばかり食べているWebエンジニアの本間です。 そろそろレタスが食べたい...。 さて、ここ1、2年、ユニファではAmazon ECS+AWS Fargateを使用して、Railsアプリケーションを本番運用することが増えてきました。 stagingでテストしたDockerイメージがそのまま本番で使えて安心だったり、オートスケールが簡単だったりとメリットが多く、大変便利だと感じています。 ただ、そのような環境を構築する中で、vCPU数やメモリ量、およびPumaの並行性に関するパラメーターをどうしようか毎回悩んでいたため、この辺で自分の中で整理しておこうと思います。 前提 下記を使用したWebアプリケーションを前提にします。 Amazon ECS AWS Fargate Puma Ruby on Rails MRI(CRuby) このようなシステム構成において
Webエンジニアのほんまです。 弊社ではインフラの管理コストを極力減らすため、AWSのマネージドサービスへの利用を推奨しています。(例:RDS -> Aurora) その中の一つに「バックグラウンドジョブに使うキューストアに Amazon SQS を使う」というものがあります。 SQSを使うことで急な負荷増減やデータ消失への対応といった悩ましい問題から解放されます。 Ruby on Rails で Amazon SQSをストアとするバックグラウンドジョブフレームワークだと Shoryuken がよく使われている印象です。 今回、Amazon SQS と Shoryuken でバッググラウンド処理を動かす方法、そして本番運用を見据えて検討が必要な事項を調査したのでシェアしたいと思います。 動かしてみる キューの作成 Railsアプリケーションの作成 ワーカープロセスの起動 エラー処理の確認
こんにちは、tjinjinです。9月からユニファでインフラエンジニアとして働いています。この記事はユニファアドベントカレンダーの2日目です。昨日は渡部さんのJIRAの便利Tipsでしたね、JIRA力を上げていきたい…! この記事では業務サポート用のslack appを作ったのでご紹介します。 作ったもの とあるサポート業務で特定の外部の方に対して、ファイルのダウンロードをさせたいという要件がありました。セキュリティ的に厳しくない(誰が使ったかを別の仕組みで検知できる)ため、今回はS3のpresigned URLを使って一時的にダウンロードが可能なリンクを生成することにしました。 また、サポートの方が毎回エンジニアに依頼する方式ではつらそうだったので、弊社だとSlackで業務のやりとりをすることが多いのでSlack Appで実装することにしました 業務フローとしては下記のイメージです。 環境
滑り込みで東京オリンピックの抽選申し込みを済ませました、Webエンジニアの本間です。 どの日でもよいので抽選に当たって欲しいのですが、全部当たると困ってしまう、なかなか悩ましい気持ちになりました。 さて弊社では、現在開発中のプロジェクトのフロントエンドの実装において Vue.js を使っています。 今回、Vue.jsを使った実装をしている中で、複数ページにまたがるフォームの実装で調査した内容を紹介しようと思います。 想定する画面 今回想定するのは、「入力画面1」←→「入力画面2」←→「確認画面」→「完了画面」のような遷移でフォームをsubmitする画面一覧です。 この手の画面、サーバーサイドのみで実装しようとすると大変だったのですが、モダンフロントエンドの機能を活用することでかなり楽に実装できるようになりました。 このような画面をVue.jsで実装することを考えます。 Vuexを使う場合
こんにちは、Webエンジニアの本間です。 今回、Railsアプリケーションを Amazon ECS、しかも AWS Fargate の上で運用する機会に恵まれました。 その中でログに関する話を書こうと思います。 というのも、これまでのEC2インスタンス上でのログと、ECSでのログでは扱いが大きく異なっており、色々と注意&工夫しないと障害調査等で苦労することがわかったためです。 従来から変更しないといけない点、それを見据えて工夫した点をばーっと書いていきたいと思います。 従来との変更点 実サーバーやEC2インスタンス上でRailsアプリケーションを運用した時との変更点です。 出力先 通常、Railsアプリケーションでは $RAILS_ROOT/logs 以下にファイルとして出力していくと思いますが、Dockerを使った環境ではこれはできません。 理由としては2点あります。 特に対策をしないと
こんにちは、iOSエンジニアのしだです。いつの間にかR&Dチームとして1年経ってしまいました。R&Dというと社内でも何をやっているか理解しづらい部署であり、いよいよ社内でもぼっち感がでてきました。 ここ最近は、顔認証(Face Recognition)ばかりやっていて、iOSからも同僚からもだいぶ離れてしまいさびしさも感じられる今日このごろです。 今回は、顔認証におけるディープラーニングで学習する際に用いられる損失関数についてどのような違いがあるか見てみたいと思います。 損失関数(Loss function) 顔認証は、この顔とあの顔が同一人物かどうか、顔の特徴量を使って同定することです。 この顔の特徴量は、ディープラーニングを用いて学習して、最終的に埋め込みベクトル化(Embeddings)することが多いです。 この顔の特徴ベクトルをうまく学習するための損失関数には、通常の分類タクスで用
おはこんばんにちは! ユニファのサービスインフラ担当のすずきです! 私の出身は京都なんですが、最近新宿で関西人の集まる酒場なるところを発見し潜入してみました! するとそこには、関西人もしらないB級グルメとか大阪の地ビールとか、サン◯リアのサングリアとか色んな商品があったので、 気になる方はぜひ探してみてくださいw どこかの回しもんみたいなことはこれくらいにして本題へ いつもAWSとかのことばっかりやってるので今回はsudoの設定ファイル sudoers を取り上げてみようと思います。 sudoについて 人によってはとりあえず sudo つけて実行すれば管理者権限で実行できるんでしょ?みたいに思われるかもしれませんが、それは sudoers にてそのユーザは sudo 利用時にこのユーザの権限で、このコマンドは実行しても良いですよと許可をもらっているだけなんです。 Amazon Linux
皆様こんにちは。ユニファの赤沼です。ユニファでは着々とメンバーが増え、できることも増えてきて嬉しい限りなのですが、反面オフィスが手狭になってきて、換気が不十分で空気の悪さが気になるようにもなってきました。二酸化炭素濃度が上がると生産性にも悪影響があるという事でチームラボさんも測定と改善に取り組まれているようです。 ch.nicovideo.jp そこで試しに空気品質センサを使って空気品質モニターを自作してみました。今回使ったセンサはスイッチサイエンスさんで販売されている、 CSS811 というセンサモジュールを使った SparkFun 製のブレークアウトボードです。 www.switch-science.com Hookup ブレークアウトボードのチュートリアルは SparkFun の下記サイトで公開されていますので、これを参考に回路を組んでいきます。 CCS811 Air Quality
はじめに iOS エンジニアのしだです。年始から喉が痛くずっとガラガラ声だったり左目が腫れたり2018年はなんだか嫌な予感がします。 最近、Kotlin を勉強しています。もう ことりん という響きだけでいとおしいく感じてます。 Kotlin 勉強しているときに以下の記事を見まして便利だなぁと思ったので、iOS の UserDefaults を同じように扱いたいなと思って書いてみました。 medium.com 今回は iOS の UserDefaults の小ネタです。 準備 Xcode 9.1 (Swift 4) UserDefaults iOS の UserDefaults は、アプリ内で使える Key-Value ストアで、値は Property List として保存されます。 Android でいうところの SharedPreferences です。 UserDefaults のみ
こんにちは、Webエンジニアの本間です。 最近、ランニングを始めまして、業務後に家の近くを走っています。 走り終わると頭の中のもやもやスッと抜けてて、とても爽快です。1人でできるスポーツですし、今後も続けていきたいなーと思っています。 さて話は変わりまして、弊社ではチケット管理にAtlassian社の JIRA を使っています。 チケットは、要望や機能追加、不具合修正などのコード修正を伴うものと、障害調査やエンジニア作業などコード修正を伴わないものがあり、後者を「運用作業」として区別して管理しています。 「運用作業」は新しい価値を生み出さない時間であるため、0かそれに近い値になっていることが望ましいです。 これを減らすためには色々な対策が必要になりますが、まずは「エンジニア自身がどれだけ運用作業に工数を使っているか、日々意識する」ことが大事なのではと考えました。 これを実現するため、毎週ど
こんにちは、夏に向けて腹筋強化中のWebエンジニア、本間です。 はじめに、この開発者ブログを開設してから、半年が経過しました🎉 気づけばエントリー数も20を超え、開発者ブログっぽくなってきなーと感じております。 この勢いを続けていけるよう、会社としても個人としてもこれからも頑張っていく所存です。 話は変わりまして、今回のブログでは「Rubyのスレッドで並列化するのに向いている処理」を簡単に調べたので、メモがわりに残しておこうと思います。 調査を実施した理由として、バックグラウンドジョブを動かすGemの1つに sidekiq という有名なGemがあります。 このsidekiqの特徴の1つに「マルチスレッドで動作する」というものがあります。 一方、MRI(CRuby)にはGVL(Global VM Lock)、またはGIL(Global Interpreter Lock)と呼ばれる排他制御の
おはこんばんちは。ユニファのインフラ担当すずきです。 今年一本目のブログなんですが… 途中で間違えてブログ消してしまって2回目書いてつらいです… 気を取り直して本題いきます!! 弊社ではサーバ等々の監視にprometheusを利用しようとしています。 prometheusでは多くの情報を取得するためにいろいろなexporterを利用するのですが、それら1個ずつ起動したり、起動確認するのは面倒だなと考えていました。 そこでECS+NLBを利用して各exporterの設定毎にDockerコンテナとして起動してしまえば楽じゃないかな?と思ったので今回はそのチャレンジしたことを記事にしています。 ECSクラスターとタスクを設定 とりあえずはじめにECSクラスターを作成します。 ECSコンソールに入ってもらって、簡単なECSクラスターを作成します。 リポジトリは不要なので一つ目の項目だけチェックしま
最近、引越しをしたWebエンジニアの本間です。 引越しの作業は大変面倒でしたが、新しい街に来た時のワクワク感がやっぱりいいなーと感じております。 さて、弊社のサービスである「写真サービス るくみー」では、毎日たくさんの写真をアップロードしていただいているのですが、中には内容がほとんど同じ写真が入ってしまうことがあります。 これらの写真がそのまま販売されてしまうと、写真を選ぶ際に邪魔になったり、間違って複数枚購入してしまうことがあるため、可能な限り避けたい事象です。 「同じ内容」の写真を自動で判別する方法がないか調査していたところ「Perceptual Hash」という手法を見つけました。 Pythonでの画像処理の勉強も兼ねて、今回この手法を紹介してみようと思います。 Perceptual Hashとは ハッシュ値は、「あるデータをハッシュ関数に入れて得られる値」で「同じデータからは常に同
みなさまこんにちは、ユニファCTOの赤沼です。先日やっと日本でも Google Home が発売されましたね。このブログを読んでいる方の中には買われた方もそれなりに多いのではないでしょうか。ユニファでも Google Home でどのぐらいのことができるのか検証してみるために、オフィス近くのビックカメラで購入してきました。普通に使っているだけでも天気やニュースを教えてくれたりと便利ではありますが、やはりエンジニアとしてはアプリを開発したり他のものと繋げてみたくなるものです。そこで今回は Google Home から使えるオリジナルのアプリを作ってみたいと思います。公式のドキュメントで紹介されているチュートリアルでは、バックエンドとして Firebase を使っていますが、それをそのままやっても面白くないので、今回は AWS Lambda でバックエンドの処理を実装してみたいと思います。 G
こんにちは、Webエンジニアの本間です。 先週、広島で RubyKaigi 2017 が開催されましたね。私は参加できなかったのですが、興味深い発表が多かったので、公開されているスライドは一通りチェックしたいなと思っています。 さて、今回のブログでは、少し乗り遅れた感がありますがRails 5.2で追加予定の ActiveStorage を使って見て、感想や気になる点などを書いていこうかなと思います。 ※注意:現在開発中のalphaバージョンのRails 5.2を使用しています。記事公開後の修正によってはサンプルコードが動作しなかったり、記載された内容と動作が異なる可能性があります。 概要 アプリケーションを開発していると、文書や画像などのファイルをデータベースのレコードと紐づけて保管したいケースがそれなりの頻度であります。 これまでRailsにはこのようなケースに対する統一的な実装方法が
こんにちは、システム開発部のちょうです。今回はあるエラーから1つ小さいなライブラリを作った話について共有したいと思います。 先月の開発でまれに「A copy of xxx has been removed from the module tree but is still active!」というエラーに遭遇しまして、一回あったらRailsアプリを再起動しないといけない状態になります。回数が少ないですが、開発の邪魔になるので、少し調べました。 ruby on rails - A copy of xxx has been removed from the module tree but is still active - Stack Overflow unloadableという不思議なメソッド - sugilogのブログ ここまでわかったのは、 解決策1つめ、Fooを::Fooに変更 本番環境
こんにちは、Webエンジニアの本間です。 最近、Railsアプリケーションのディレクトリ構成に関して考える機会があったので、そのことについて書いてみようと思います。 Railsに限らず「ディレクトリ構成をどうするか」という点は、設計初期の悩ましい問題の1つだと思います。 Railsでは標準のディレクトリ構成が決まっているため悩みは少ないのですが、多くの場合、標準外のディレクトリもある程度は追加していくと思います。 特に「app」以下のディレクトリ構成は、アプリケーション全体の設計に関わる部分であり、各メンバーの考えもあるため、なかなか決まらないケースもあると思います。 この問題に対する1つの参考情報として、著名なOSSのRailsアプリケーションが採用しているapp直下のディレクトリを調べてみようと思いました。 著名なOSSで採用されているのであればそれなりの理由があるはずだと思いますし、
次のページ
このページを最初にブックマークしてみませんか?
『tech.unifa-e.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く