【OpenSearch】ゼロから始める OpenSearch — Python で学ぶインデックス操作と全文検索

  • はじめに
  • OpenSearch とは
    • 全文検索とは
  • 主要な概念
  • 環境構築
    • Docker で OpenSearch を起動する
    • Python クライアントのインストール
    • クライアントの接続
  • インデックスの作成(マッピング定義)
    • text と keyword の違い
  • CRUD
    • ドキュメントの登録(Create)
    • ドキュメントの取得(Read)
    • ドキュメントの更新(Update)
    • ドキュメントの削除(Delete)
  • 検索(Search)
    • 全件取得
    • 全文検索(match)
    • 複数条件の組み合わせ(bool クエリ)
    • ソート
  • まとめ
  • 参考
  • テコテックの採用活動について

はじめに

システム開発第一事業部の大泉です。普段はエンジニアとして Python でバックエンドの開発を行っています。 この記事では、OpenSearch を知らない方向けに OpenSearch の概要と Python を使った CRUD 操作・検索について解説します。

OpenSearch とは

OpenSearch は分散型の検索・分析エンジンです。Elasticsearch のオープンソースのフォークとして開発されています。

aws.amazon.com

github.com

主な用途は次のとおりです。

  • 全文検索: EC サイトの商品検索、社内ドキュメント検索
  • ログ分析: アクセスログ・アプリケーションログのリアルタイム集計
  • 時系列データの可視化: アクセス数の推移やエラー率などをグラフ・チャートで可視化するダッシュボードを構築
続きを読む

Claude Codeを普段のエンジニアリング業務でどう活用しているか

  • はじめに
  • ワークフローの概要
  • フェーズ1:ログ分析
  • フェーズ2:原因特定
  • フェーズ3:改善案の提案
  • フェーズ4:実装・レビュー
  • フェーズ5:改善効果の検証
  • Claude Code 活用のポイント
    • プロンプトは短くてよい
    • 実装レビューは省略できない
    • 注意点
  • 同じように試す場合の進め方
  • まとめ
  • テコテックの採用活動について

はじめに

システム開発第一事業部の大泉です。普段はエンジニアとして Python でバックエンドの開発を行っています。

この記事では、普段のエンジニアリング業務での Claude Code の活用方法について、実際の調査から効果検証までの流れを例に紹介します。なお、具体的な調査内容や分析結果、コードなどは省略・簡略化しています。

以前、バッチ処理の実行時間が想定より長くなっていることに気づきました。そこでログファイルを Claude Code に渡し、分析、原因の特定、改善案の提示、実装、改善前後の比較まで行いました。

従来であれば、ログの分析にはスプレッドシートで数式や関数を組んだり、分析スクリプトを書いたりする必要があり、それだけで数十分から数時間かかる作業でした。原因を特定するにはコードを一から追う必要があり、修正まで含めると非常に時間のかかる作業でした。

Claude Code を使うことで、これまでログ分析に数時間かかっていた作業を数分で進められるようになりました。加えて、原因の特定から改善案の比較、実装、効果検証までを一連の流れとして進めることができ、各工程の時間を短縮しながら全体をスムーズに進行できるようになりました。

続きを読む

Rubyのclass入門(第2回): 継承・`include`/`extend`/`prepend`・メソッド探索順を整理する

はじめに

システム開発第一事業部の奥田です。普段はフルスタックエンジニアとしてWebアプリの開発を担当しています。

前回の記事では、class本体がその場で実行されること、selfが場面ごとに変わること、new -> allocate -> initializeの流れを整理しました。

今回はその続きとして、継承、include/extend/prepend、メソッド探索順を順番に見ていきます。

もともとは定数スコープ・可視性までを扱う予定だったのですが、結構ボリュームが多くなってしまったので分割することにしました。

続きを読む

【AWS】ECS マネージドインスタンス × Python で GPU 処理を実行する

  • はじめに
  • 構築手順
  • サンプルアプリケーション
    • ディレクトリ構成
    • Dockerfile
    • pyproject.toml
    • main.py
    • benchmark.py
    • 成功時のログとベンチマーク結果
  • まとめ
  • 参考
  • テコテックの採用活動について

はじめに

システム開発第一事業部の大泉です。普段はエンジニアとして Python でバックエンドの開発を行っています。

この記事では、ECS マネージドインスタンスを使って GPU タスクを実行する方法をご紹介します。

aws.amazon.com

ECS で GPU タスクを実行する方法はいくつかあります。セルフマネージドな ECS on EC2 構成では、オートスケーリンググループ、起動テンプレート、メンテナンスなどを自分で管理する必要があります。

一方、ECS マネージドインスタンスを使うと、EC2 インスタンスやオートスケーリングなどのインフラ管理を AWS に委譲しつつ、GPU インスタンスを使って ECS タスクを実行できます。

さらに、ECS マネージドインスタンスで GPU インスタンスを使用すると、NVIDIA ドライバーと CUDA ツールキットがインスタンスに事前にインストールされます。そのため、セルフマネージド構成のように GPU 最適化 AMI(GPU-optimized AMI)や NVIDIA ドライバーを自分で管理する必要がありません。

GPU タスクでは簡単なデモを行い、コンテナ内の Python / PyTorch から GPU を利用できることを確認し、行列演算で CPU と GPU のベンチマークを行います。

続きを読む

「ノンデザイナーズ・デザインブック」輪読会レポート~AIワークで挑む!「読まずに参加」を支えた学習の工夫~

はじめに

こんにちは。DX本部 システム開発第一事業部の吉本です。

普段はフロントエンドエンジニアとして、主にWebアプリケーション開発を行っています。

今回は、社内の有志エンジニアで実施した書籍『ノンデザイナーズ・デザインブック(Robin Williams 著)の輪読会の様子をご紹介します。本書は、デザインの基本となる4つの原則(近接・整列・反復・コントラスト)を非デザイナー向けに分かりやすく解説した名著です。

続きを読む

Rubyのclass入門(前編): getter / setter・self・クラスメソッドの正体を突き止める

はじめに

システム開発第一事業部の奥田です。普段はフルスタックエンジニアとしてWebアプリの開発を担当しています。

直近でやっていた案件ではTypeScriptをゴリゴリに書いていたのですが、 案件が切り替わってRuby(Ruby on Rails)を使う案件に入ることになりました!

TypeScriptをやってみて思ったところは、やっぱりRubyって癖のある独自の世界観がありますね。

私の中のTypeScript脳をRuby脳に切り替えるついでに、せっかくならJavaScriptの非同期について記事にしたように、 Rubyに関しても何か記事を書けたらいいなと思い、今回は第1回として、Rubyのclassを整理していきます!

先ほども言いましたが、Rubyって一癖あるので初学者向けの言語として紹介されがちですが、 これまでの経験から言うとあんまり初学者向けじゃないようにも感じます。

なので、この独特な世界観を初学者が理解できる助け舟みたいなものを作りたいなと思ったのがきっかけです!

将来的にはclassだけではなくて、並列・並行処理についても書けたらいいなと思っています... (過去にJavaScriptの非同期についても書いたので)


RubyのclassはTypeScriptなどのclassと同じ感覚で読むと途中で引っかかります。

最初は「インスタンスを作るための設計図」と理解して進みがちです。 ただ、実務のコードを読み始めると、その説明だけでは足りない場面が出てきます。

特に引っかかりやすいのが、クラス定義の中で普通にメソッド呼び出しが出てくるところです。

Railsではモデルでよく見るhas_manyとかだけでなく、ActiveSupport::Concernを使ってインスタンスメソッドやクラスメソッド、 関連定義をあとから差し込む書き方も出てきます。

ここでclassの見え方が一気に難しくなります。

たとえば、Railsを見ているとこんなコードが出てきます。

class Author < ApplicationRecord
  has_many :books
end

Rubyではメソッド呼び出しの括弧を省略できます。

この前提を知らないと、次の1行がそもそもメソッド呼び出しに見えません。

「なぜクラス定義の中にいきなり:booksが出てくるのか」

「これは何をしている1行なのか」

と戸惑いやすくなります。

さらに「なぜクラス定義の中でメソッドを呼んでいるのか」という疑問も出ててくるかと思います。

ですが安心してください!

この疑問を言葉にできるようになると、Rubyらしい書き方がかなり読みやすくなります。

そのためにこの記事を書いたのですから!

というわけで、本記事のシリーズはは以下の3部構成で進めようかと思っています!

  • 第1回(今回):classの基本、クラス本体のselfinitialize、クラスメソッドの見方までを整理。
  • 第2回(予定): 継承、include/extend/prepend、メソッド探索順、定数スコープ、可視性を扱う。
  • 第3回(予定): その知識を使いながらRailsのhas_manyscope、コールバック、delegateActiveSupport::Concernと追い方を整理する。

途中で変わったりもするかもですのでご了承ください。

続きを読む

要件整理のヒント: 曖昧な要件を整理する

システム開発第二事業部の飯髙です。
普段はAndroid, Flutterによるアプリ開発を行っております。

「〜機能を作りたい、〜みたいなものを作りたい」
このような曖昧な要件をとりあえず渡されて、どうしようか困った経験、ありますよね?
以上のような質問を後輩から受けて、回答が割としっくりきていたようでしたので、備忘録としてこちらに起こそうと思います。
要件整理のヒントになれば幸いです。

  • 要件定義のゴール
  • 要件を整理してみる(例)
  • テコテックの採用活動について

要件定義のゴール

要件整理のゴールは、要件を渡した側・された側の合意がとれていることとします(渡した側は「甲」、渡された側は「乙」とでもしましょうか)。
合意を取るためには、最終的にお互いの疑問点が解消された状態になることが必要になるかと思います。 また、怠ると手戻りの原因になりがちです。
今回は乙の視点で整理していきます。

続きを読む