エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

目先のタスクに追われるプロダクトマネージャーが自問自答すべき2つの問い

こんにちは。エンジニアリンググループ プロダクト支援チームでプロダクトマネージャーをしている中村です。

突然ですが3月末というタイミングは、多くのプロダクトマネージャーの方が1年間の成果を振り返るタイミングかと思います。

私は昨年4月に育休から復帰してからというもの、育児と仕事に追われる日々を過ごしており、この1年間は光陰矢の如しでした。

振り返ってみると、目先のタスクに追われプロダクトマネージャーとして最も重要な未来を考えるということが十分に行えていなかったように思います。

そこで今回は、目先のタスクに忙殺されがちなプロダクトマネージャーが未来を考えるために工夫できること、というテーマでブログを書きます。

  • はじめに:小さな未来予測と大きな未来予測
  • 常に目的に立ち戻る
  • 2つの問い
  • 【1】シュートを打っているか?
  • 【2】自分が競合のプロダクトマネージャーだったら何をやるか?
  • おわりに
  • We are hiring!!
続きを読む

SQL一つで送る内容を決めるメール基盤を作った話

AI・機械学習チームの北川(@kitagry)です。 GoとVimとKubernetesが好きです。

前回書いたNeovimで手書き文字入力する記事が「発想が狂っている」・「頭がおかしい」などの反響をいただいたので、真面目なことをやっていることをアピールするためにこの記事を書くことにしました。

仕事中に手の上で寝る猫。(記事の内容とは全く関係ありません。ただの自慢です。)

続きを読む

高機能なZshプロンプトを自作する ーモダンなシェルプロンプトを構成する工夫ー

永山です。

普段から趣味PC、業務PCの双方で Zsh をログインシェルとして利用しています。 エムスリー社内には fish や、少数ながら Xonsh のユーザも存在していますが、多くのエンジニアがZshを使用しています *1

Zsh は fish 等に比べデフォルトで有効な機能が少なく、カスタマイズが必要である点でやや玄人志向といえます。 一方で自由度・拡張性が高くプラグイン等も潤沢である点と、このコンテナ時代では重要なPOSIX shとの高い互換性を背景に Zsh の人気は根強いものとなっています。 macOS Catalina 以降では Zsh がデフォルトのログインシェルに採用されたこともあり、今後も Zsh のユーザ数は増加していくでしょう。

ところで、Zsh の機能のうち最もよく目にするものは何でしょうか? 文字通り目視が可能な機能に限定するであれば、それは間違いなくシェルプロンプトでしょう。

しかし、Zsh のデフォルトのシェルプロンプトは非常に簡素であり、機能的にも貧弱です。

Zsh デフォルトのシェルプロンプト (非常に質素)

そこで、シェルプロンプトにより多くの情報を、よりグラフィカルに、より視認性高く表示できれば普段シェル上で行っている作業をより効率化できるのではないでしょうか。

以下、本記事では高機能なZshプロンプトを作成する方法とそれを支える種々の工夫について解説します。

題材として作成したZshプロンプトのプロジェクトは以下のリポジトリで公開しています。

作成したZshプロンプト

github.com

  • シェルプロンプトとは
  • 既存の高機能シェルプロンプト
    • agnoster.zsh-theme
    • starship
    • Powerlevel10k
  • 作成したシェルプロンプト
  • Zshプロンプトの作成方法
    • 基本
    • Nerd Fonts
    • 問題点1: 書き心地
    • 問題点2: 即応性
    • プロンプトの非同期描画
    • 2行以上の RPROMPT
  • まとめ
  • We are hiring!

*1:エンジニアに支給されるPCは基本的にmacOSであるため

続きを読む

ChatGPT Retrieval Pluginに任意のベクトル検索エンジンProviderを実装する

Overview

エムスリーエンジニアリンググループ AI・機械学習チームでソフトウェアエンジニアをしている中村(po3rin) です。検索とGoが好きです。

エムスリーではChatGPTの可能性にいち早く注目して活用を検討している段階ですが、本格的なデータ投入にはまだ懸念もあり、セキュリティチームと検討を進めている段階です。

そんな中で個人または組織のドキュメントのセマンティック検索と取得を可能にするChatGPTプラグイン「ChatGPT Retrieval Plugin」が登場しました。

github.com

情報検索好きとしては黙っていられず、外部公開用のエムスリーAI・機械学習チームのメンバー紹介ドキュメントを使ってローカルで試してみました。

# 用意したドキュメント

中村弘武は東京都在住で、エムスリーという企業で働いでいます。
エムスリーの検索基盤を主に担当しています。また、書籍推薦システム開発なども行っています。

農見俊明は前職では自然言語処理をタンパク質解析に応用するモデルの開発に従事
エムスリーでは推薦アルゴリズム・システムの構築とREST API開発を担当

浮田純平は医学部出身 (MD)・医学博士 (PhD)。学部時より約8年間、機械学習 (特に深層学習) を用いた生体データの解析や深層学習の研究を行った。
大学院では自身の研究のほか、計算機サーバーの立ち上げや学部生の研究指導にも従事した。

質問

# (省略: コードは後ほど紹介します)..

response = index.query("エムスリーAIチームに所属する医学部出身のエンジニアを“名前:特徴“のフォーマットで一人教えてください")
print(response)

結果

名前: 浮田純平 特徴: 医学部出身 (MD)・医学博士 (PhD)であり、機械学習 (特に深層学習) を用いた生体データの解析や深層学習の研究を約8年間行ってきた。また、大学院では自身の研究のほか、計算機サーバーの立ち上げや学部生の研究指導にも従事している。さらに、エムスリーでは検索基盤を主に担当し、書籍推薦システム...

なんか僕のプロフィールをしれっと最後に混ざて嘘を言っていますが(笑)、それらしい回答は得られました。これでChatGPTの情報源を拡張できることを確認できました。

動かすだけだとつまらないので、今回はChatGPT Retrieval Pluginがサポートしているベクトル検索エンジンではなく、AWSで利用できるOpenSearch のProviderを実装して、ChatGPTにOpenSearchのベクトル検索を提供する方法を試してみました。

このブログを読むことで、ChatGPT Retrieval Pluginの動作の理解と、皆さんが日頃使っている慣れ親しんだベクトル検索エンジンをChatGPT Retrieval Pluginに対応させる知見を獲得できます。

続きを読む

波紋で広がるボトムアップブランディング

はじめまして、エムスリーデザイングループBXデザイナーの花井です。

エムスリーのデザイン組織には、BX支援チームというちょっと変わったチームがあります。 所属しているメンバーは、モーションデザイナーやクリエイティブディレクター、エディトリアルデザイナーなど多種多様! 複数の事業を横断しながら、それぞれの得意とするスキルを活かして活躍しています。

続きを読む

cruft実践入門 ~cookiecutter templateの変更に追従する~

Overview

エムスリーエンジニアリンググループ AI・機械学習チームでソフトウェアエンジニアをしている中村(po3rin) です。検索とGoが好きです。

AI・機械学習チームでは開発の効率化のため、プロジェクトの雛形を自動的に生成するcookiecutterのプロジェクトtemplateを利用しています。下記はAPI開発で利用しているcookiecutterプロジェクトtemplateについての記事です。

www.m3tech.blog

しかし、templateから作成したプロジェクトはtemplateが新しくなった場合に、その変更に追従するのが困難になります。そこで、今回はcruftというツールを導入して、最新cookiecutter templateへの追従を楽にできるようにしました。今回はcruftの紹介と、それをどのように導入したかをお話しします。

続きを読む

人間にUnicode正規化は難しい

【AI・機械学習チーム ブログリレー2日目】

AI・機械学習チームの池嶋 (@mski_iksm) です。

私達のチームでは、機械学習バッチの実行方法やインターンを含む新配属者のPC初期セットアップ手順など多くのドキュメントがGitLab上で管理されています。Gitでドキュメントを管理するのは、Wiki等と比較して更新時のピアレビューがしやすかったり、CIによる自動チェックがやりやすかったりなどのメリットから採用されています。

CIの自動チェックの1つとしてリンクチェッカーがあります。これは切れているリンクがないかを更新時にチェックするものです。

ある日、ファイルはあるように「見える」のに、なぜかリンクチェッカーのCIが落ちているという事象が発生しました。

タイトルでネタバレしているのですが、原因はUnicodeの正規化でした。 この記事では、何が起きていたのか?どのようなケースで起こりうるのか?どう回避すればいいのか?に加え、macのファイルシステムや各アプリケーションのUnicodeの対応を紹介します。

続きを読む