OPTiM TECH BLOG
https://tech-blog.optim.co.jp/
オプティムの企業テックブログ。OPTiMのエンジニアが技術情報を発信。AIの最新動向からクラウドのアーキテクチャ、Web開発、モバイルアプリ開発まで多様な技術を紹介。AI・IoTプラットフォームや、農業、医療、建設向けサービスを実現しています。
フィード

プロダクト開発とOSS貢献を繋ぐ!オプティムでOSS Gateワークショップを開催
OPTiM TECH BLOG
2026年2月13日、オプティムのオフィスで「OSS Gateワークショップ」が開催された。OSS Gateは、OSS 開発に参加する最初の一歩をサポートする取り組みで、参加者は気になっている OSS に触れながら気づきの記録やIssue作成、必要に応じた改善提案などを実践する。開催のきっかけは Rails Tokyo での交流で、オプティムとしても日頃からOSSに支えられる立場として、貢献への心理的ハードルを下げたいという想いがあったためオフィス提供に至った。当日は社内外22名が参加し、実際にREADME改善のIssueが発行されるなど、具体的なアウトプットも生まれた。参加者からは「心理的ハードルが下がった」「今後は使っているOSSに貢献したい」といった声が多く、満足度も高い結果に。ワークショップを通じて「伝わる形で記録を残すことの重要性」も改めて再確認された。オプティムは今後もOSSに自然に触れられる環境づくりを続け、プロダクト開発とOSS貢献を一体として推進していく。
3日前

デザインと営業をどう繋ぐ?展示会出展を『点』で終わらせないための改善サイクル
OPTiM TECH BLOG
OPTiMプロモーション・デザインユニットは、2025年度に参加した複数の展示会を対象に、「見た目」ではなく「会話が生まれるまでの体験設計」 を軸とした改善サイクルを構築した取り組みを紹介している。展示会制作は属人的になりがちだが、目的整理・体験設計・ビジュアル制作・現場検証・振り返りを共通プロセスとして標準化し、再現性のある展示会運営を実現。DXPO夏/秋、AI-PAX、CSPIなどの事例を通じて、「視認性」「情報の引き算」「課題起点コピー」「属性別導線設計」「動画・ノベルティの活用」など効果の高い学びが整理されている。結果として、来場者導線の明確化、会話創出の増加、高確度リード比率の向上などの成果が得られ、次回に向けてコピー刷新・営業連携強化・サステナブル資材検討などの改善案も提示。展示会を“価値創出の投資先”として継続改善に取り組む姿勢を示す内容となっている。
10日前

オプティムにおけるPlatform Engineeringの現在地
OPTiM TECH BLOG
本記事では、オプティム社内で利用されている Kubernetes ベースのプラットフォーム「Cavor」について、2023〜2025年度の取り組みと今後の方向性が整理されています。Cavorは、2023年度の立ち上げ、2024年度のマルチテナント化、2025年度の利用促進という3段階を経て、社内プロダクトの標準基盤として利用が拡大してきました。特に2025年度は、Kubecost導入による精緻なコスト把握、監視基盤の強化、認証機能の提供、移行を進めるための機能拡張など、多方面で改善が進められています。一方で、テナント数の増加に伴い可用性やパフォーマンス面の課題も明確になり、後半はそれらの対応にも注力しました。利用の広がりとともに、2026年度はサービス開発統括本部プロダクトのCavor利用率100%を目指す方針が掲げられており、全社的な標準プラットフォーム化が進んでいます。加えて、今後はテナント品質の可視化や改善アシスト、ガードレール強化といった、品質向上をプラットフォーム側から支援する取り組みを進める計画です。さらに、セルフサービス性の向上やドキュメント・モニタリング環境の改善など、利用者からの要望に基づく改善も重要な課題として位置付けられています。AI活用の進展を受け、セルフホスト環境でどのようにAI支援機能を提供していくかといった新たなテーマにも取り組む必要があります。総じて、Cavorは「プロダクト固有ではない課題を吸収し、開発チームが本質に集中できる環境を提供する」ことを価値としており、今後もより使いやすく、高品質なプラットフォームを目指して改善を続けていく姿勢が示されています。
21日前

React Tokyo ミートアップ #13 参加レポート - フロントエンド開発者のための「厄払い」
OPTiM TECH BLOG
2026年1月23日に開催された「React Tokyo ミートアップ #13」に参加し、オプティムからは高橋さんがメイントーク「フロントエンド開発者のための『厄払い』」で登壇しました。トークでは、Shai‑Hulud などのサプライチェーン攻撃、React Server Components の深刻な脆弱性、pnpm の依存問題など、近年多発するフロントエンド領域の重要セキュリティ課題を「厄」に見立てて解説。多層防御の重要性と、段階的に取り組む現実的な対策が紹介されました。イベントではほかにも、バグ経験を共有するグループディスカッションや、useEffectEvent、oxlint などをテーマにしたLTが行われ、コミュニティならではの学びと交流が広がりました。
1ヶ月前

Next.jsでのロールベースアクセス制御の苦難 - コンポーネント設計を崩さずに実装する権限管理
OPTiM TECH BLOG
本記事では、Next.js App Routerを採用したプロジェクトにおけるフロントエンドでのRBAC(ロールベースアクセス制御)実装について解説しています。RBACを選択した理由、フロントエンド権限管理の課題(Props地獄、API多重呼び出し、UX劣化など)、そしてそれらを解決するための設計パターンを紹介。具体的には、Guardコンポーネントによる責務分離、React.cacheとrevalidateTagを活用したキャッシュ戦略、Layout・Page・Guardによる明確な責務分離、さらにVisibilityBoundaryや将来的なActivity APIの活用可能性についても言及。最後に、ディレクトリ構成やテスト戦略(テーブル駆動テスト)を示し、保守性・テスト性を高める設計の重要性を強調しています。
1ヶ月前

給水アラートを作りました
OPTiM TECH BLOG
オプティム東京オフィスで発生していた「ウォーターサーバーの水切れ問題」をIoTで解決した事例です。新卒エンジニアがM5Stack AtomS3と重量センサーHX711を使い、残水量を計測し、Microsoft Teamsで給水担当者に通知するシステムを開発しました。初代はPower AutomateとExcelで構築しましたが、運用課題(通知過多・Excel性能低下・誤検知)を受け、Node.js+Hono+MySQL+Grafanaを用いたバックエンドサーバーに刷新。自動キャリブレーション機能も追加し、約1年半で18万件のデータを蓄積。給水切れの減少や運用改善に成功し、今後は故障予測への応用も検討中。本事例は「身近な課題をIoTで解決する」取り組みの参考となる内容です。
1ヶ月前

週1共有会で進める!Web制作・フロントエンド改善の6事例
OPTiM TECH BLOG
Web制作チームで始めた「共有会」で、コード運用やAI活用をどう改善したのかを紹介。Git運用やCI/CD、CSS統一など実践事例も!
2ヶ月前

AWS IoT Core + MQTT + Protocol Buffersで実現するメッセージング
OPTiM TECH BLOG
本記事では、オプティムの製品「Hardware My Portal」におけるIoT関連機能の実装事例を紹介しています。MQTT、AWS IoT Core、Protocol Buffersといった技術を採用し、セキュリティやスケーラビリティを確保しながら、データを型安全かつ効率的にやり取りする仕組みを構築しました。記事では、Go言語を用いたMQTTクライアントの実装やAWS IoT Coreの設定、S3へのデータ保存、ルールアクションによるメッセージ処理など、具体的なコード例と構成を詳しく解説しています。最後に、開発を通じて得られた知見や工夫点も共有しています。
2ヶ月前

今日からはじめる知識管理:頑張らないObsidian活用術
OPTiM TECH BLOG
「知識管理(PKM)」と Obsidian の活用法 について、実践例と思想の両面から詳しく紹介しています。前半では、情報と知識の違い、知識管理の必要性、意思決定やコンテキストの重要性など、PKM の本質的な背景を丁寧に解説。後半では、実際の Obsidian を用いたノート構成、推しポイント(ローカルベース・リンク中心の整理・プラグイン拡張)や、Templater / Dataview / Web Clipper / 自作プラグインなどの活用術まで、実践的な内容がまとめられています。さらに、記事内で紹介した Obsidian 構成テンプレートが GitHub で配布されており、今日から PKM を始めたい人にも嬉しい内容となっています。
2ヶ月前

脱React宣言!初心者のためのSvelte×daisyUI入門
OPTiM TECH BLOG
本記事では、モダンなフロントエンド開発を効率化するために、SvelteとdaisyUIを組み合わせる方法を解説します。Svelteは軽量で直感的なUI構築が可能なJavaScriptフレームワークで、ReactやVueと比較してコード量を削減できます。一方、daisyUIはTailwind CSSのプラグインで、豊富なコンポーネントとテーマを提供し、UI開発をシンプルにします。記事では、両者の特徴や利点を紹介し、SvelteKitとdaisyUIのセットアップ手順を詳しく説明。初心者でも簡単に始められる構成で、UI/UXを重視した開発体験を向上させるヒントを提供します。
2ヶ月前

adbコマンド覚えられなくても気にしない。自作MCPサーバーでAIにお任せ!
OPTiM TECH BLOG
本記事では、Android開発初心者の筆者が、AIにadbコマンドの実行を任せるためにMCPサーバーを自作した取り組みを紹介しています。MCPサーバーはAIに外部機能を提供する仕組みで、今回はGo製ライブラリ「mark3labs/mcp-go」を用いて、adbコマンドを実行するツールを実装しました。記事では、サーバー生成・ツール定義・実装・ビルド手順を詳しく解説し、Android StudioのGemini Code Assistとの連携方法も紹介。最後に、実運用に向けた課題(コマンド制御の必要性)や今後の改善方針について述べています。
2ヶ月前

GitLab CIで動くAIエージェント『CI-Agent』を爆速開発!Claude Codeで実現する非同期オペレーションの未来
OPTiM TECH BLOG
本記事では、OPTiM社内ハッカソンで開発された「CI-Agent」について紹介しています。CI-AgentはGitLab CI上で動作するCoding Agentで、issue対応やコード修正、MR作成などを自動化する仕組みを備えています。Claude CodeとAWS Bedrockを活用し、社内GitLab環境に適応した設計を採用。さらに、定型作業を効率化するためのWorkflowディレクトリやプロンプト安全性チェック機能も実装しました。目的は、サービス運用の明文化と非同期オペレーション化を進め、エンジニアの「暇」を創出し、より挑戦的な開発を可能にすることです。記事では、構成や設計思想、課題、今後の展望について詳しく解説しています。
2ヶ月前

常に画面がONになって欲しい瞬間のあるWebアプリへ贈る Screen Wake Lock API
OPTiM TECH BLOG
Webアプリケーションにおいて、画面のロックやスリープを抑制するための Screen Wake Lock API について、バッテリーや省電力モードなどの状況も踏まえた動作確認を行った内容を記事にまとめました
2ヶ月前

フロントエンド推進室の運営メンバーが選ぶフロントエンド小ネタ集
OPTiM TECH BLOG
本記事は OPTiM TECH BLOG Advent Calendar 2025 Day 20 のエントリーで、2025年10月に発足した「フロントエンド推進室」の活動と、運営メンバーによるフロントエンド技術の小ネタを紹介しています。フロントエンド推進室は、社内横断的にフロントエンド技術力を強化することを目的とし、雑談会やOSS活動、社外イベント登壇、同時視聴会などを継続的に実施しています。記事後半では、運営メンバー6名がそれぞれの知見を共有。npm auditやRenovateを活用した脆弱性対策、Storybookで類似コンポーネントを検索しやすくするタグ活用、AIやMCP Serverを使った効率的な学習法、スマホWebアプリでスクロール制御するCSS+JS実装、開発者ツールのネットワークタブを見やすくする設定など、実践的なTipsが満載です。
2ヶ月前

remark/rehypeでMarkdownがHTMLになるまで:構文木の旅
OPTiM TECH BLOG
本記事では、MarkdownをHTMLに変換する際に利用される remark/rehype の内部処理を深掘りしています。remarkはMarkdownとmdast(Markdown構文木)、rehypeはHTMLとhast(HTML構文木)の相互変換を担い、両者はunifiedパッケージ群に属します。Markdown → mdast → hast → HTMLという変換プロセスを実際のサンプルを用いて解説し、構文木の構造やposition情報の意味を詳しく紹介。また、カスタマイズ機能を追加した場合のmdast/hastの変化についても触れています。MarkdownやHTMLを木構造で扱う仕組みを理解することで、プレビュー機能や拡張機能の実装に役立つ知見が得られます。
2ヶ月前

【Kotlin/Spring Boot】LLM×外部ツール連携をSpring AIで実現!MCP実装のガイド
OPTiM TECH BLOG
本記事では、Anthropicが提唱する MCP(Model Context Protocol) を Kotlin で実装する方法を紹介しています。MCPはLLMアプリケーションと外部ツール・データソースを接続するための標準プロトコルで、JSON-RPCを用いた通信を特徴とします。記事では Spring AI を利用し、Spring BootベースでMCPサーバーとクライアントを構築する手順を解説。サーバー側では@Toolアノテーションを使ったツール定義、クライアント側ではOpenAI APIとの連携を実装し、ツール呼び出しの流れやSpring AI内部の仕組みも詳しく説明しています。最後に、Spring AIの利点と現状の課題についてまとめ、LLMとMCPを活用した開発の可能性を示しています。
2ヶ月前

MarkdownとAIで実現する、効率的なマニュアル作成術
OPTiM TECH BLOG
本記事では、病院向け製品「OPTiM AIホスピタル」のマニュアル作成における課題と、その解決策としてMarkdownとAIを組み合わせた方法を紹介しています。従来のWordやNotionでの作成では、画像配置やフォーマット統一、バージョン管理など多くの手動修正が必要でした。そこでMarkdownを採用し、Gitによる差分管理やMkdocs・Pandoc・WeasyPrintを活用することで、Web版とPDF版の両方を効率的に生成。さらに、AIによる自動生成・修正が容易になり、工数削減と品質向上を実現しました。
2ヶ月前

開発環境の再現性100%へ!Nixで実現する失敗しないオンボーディング
OPTiM TECH BLOG
本記事では、開発環境の再現性を高めるためのパッケージマネージャー「Nix」について、UbuntuとmacOSでの導入・活用方法を紹介します。Nixの特徴である宣言的・再現性・信頼性を軸に、home-managerやnix-darwinを使ったホームディレクトリやOS設定の管理、devShellによる開発環境の均一化について解説。さらに、導入時の注意点や実際に使ってみた感想も共有します。日本語情報が少ない中での学びや、Nixの魅力を伝える入門記事です。
3ヶ月前

AIがSlackをRedmineチケットに変換!モダンなIaCとクリーンアーキテクチャで構築した開発効率化ツール
OPTiM TECH BLOG
本記事では、Slackでの議論を簡単にRedmineチケット化する仕組みを紹介します。特定のスタンプを押すだけで、Slack投稿をAWS Step Functions経由で処理し、AWS Bedrockで要約・整形した後、Redmine APIを使って自動的にチケットを作成します。構成にはSlack公式機能「Reacji Channeler」、AWS Lambda、S3、Secrets Managerなどを活用し、セキュリティや保守性にも配慮。開発はAIをフル活用し、わずか1日で実現しました。チケット化の手間を大幅に削減し、業務効率を向上させる実践的な事例です。
3ヶ月前

VLMでどこまで画像解析ができる?
OPTiM TECH BLOG
本記事では、2025年に急速に進化した Vision Language Model (VLM) の動向を紹介します。画像をテキストとして理解するだけでなく、物体検出やOCR、セグメンテーションなど、従来は専用モデルが必要だったタスクが Qwen2.5-VL、Gemini 2.5/3.0、Qwen3-VL などの汎用モデルで可能になりつつあります。記事では各モデルの特徴や実際の利用例、精度・速度の課題、そして今後の展望について解説しています。
3ヶ月前

Electron ForgeでビルドしたAppXファイルにハードウェアトークンによるコード署名を行う方法
OPTiM TECH BLOG
本記事では、Electron ForgeでビルドしたAppX形式のファイルに対して、ハードウェアトークンを用いたコード署名を行う方法を解説します。Electron Forgeは標準で.pfx証明書による署名を前提としており、ハードウェアトークン署名はサポートされていません。そのため、postMakeフックを利用して署名処理を上書きする必要があります。記事では、署名の仕組み、Electron Forgeの落とし穴、そしてハードウェアトークン署名を実現するためのサンプルコードを紹介します。
3ヶ月前

AI駆動で学びながら、iOSアプリとGo製BFFを初めて開発した話
OPTiM TECH BLOG
この記事では、24卒エンジニアが個人開発でiOSアプリとGo製BFFをゼロから構築した経験を紹介しています。テーマは「AI駆動開発」。AIを単なるコード生成ツールではなく、開発パートナーとして活用し、SwiftによるiOSアプリ開発、Goによるバックエンド構築、Terraformを用いたインフラ構築までを短期間で習得したプロセスを詳細に解説。散歩好きの著者が作った「お散歩SNSアプリ」を題材に、MVP開発、アーキテクチャ選定、AIとの対話による学習効率化、そしてAI時代のエンジニアに求められるスキルについて考察しています。
3ヶ月前

今更ながらPOMLでプロンプト管理を試してみる
OPTiM TECH BLOG
本記事では、LLMアプリケーション開発におけるプロンプト管理のための構造化言語「POML」について調査しました。POMLは、テンプレートエンジンによる柔軟な記述、画像入力対応、Tool呼び出しなど強力な機能を備えています。しかし、Structured Outputsのサポート不足や複雑な制御構文による管理コストの高さなど、実プロダクトでの採用には課題も見えました。本記事では、POMLの記述方法、画像入力の仕組み、Structured Outputs対応状況を整理し、実用性を評価します。今後のアップデートでマルチモーダルやJSON Schema対応が進めば、より有力な選択肢になるでしょう。
3ヶ月前

LLMバッチ処理の安定稼働を実現!AWS Lambdaにおける最適なリトライ戦略とアーキテクチャ比較
OPTiM TECH BLOG
本記事では、AWS LambdaでLLMのバッチ処理を安定運用するためのリトライ戦略について解説しています。まず、レート制限エラー(429)、Lambdaの実行時間制限、状態管理の複雑さ、コスト効率といった典型的な課題を整理し、その解決策として指数バックオフ+ジッターを用いたリトライ戦略の重要性を紹介します。続いて、4つのアプローチを比較します。Lambda + SQS:シンプルで低コストだが、リトライ制御や可視性に制約ありAWS Step Functions:宣言的なリトライ設定と可視化が可能で、エンタープライズ用途に適するMastra:TypeScriptベースのAIエージェントフレームワークで柔軟性は高いが、リトライ戦略は簡易的Lambda Durable Functions:2025年12月に登場した新機能で、待機中課金なし・状態管理自動化が特徴(東京リージョンは未対応)最後に、要件別の比較表と選定指針を提示し、現時点ではStep Functionsが安定運用に最適であり、今後はDurable Functionsが有力候補になると結論づけています。
3ヶ月前

OpenAPIの思想を応用!YAMLとGo言語でテスト仕様書をGit管理し、開発効率を劇的に向上させる方法
OPTiM TECH BLOG
本記事では、OPTiM Collaboration Portalの開発チームが、従来Excelで管理していたテスト仕様書をYAML形式で管理する仕組みに移行した取り組みを紹介しています。OpenAPIの構造を参考に、機能ごとにYAMLファイルを分割し、$refでインクルードする設計を採用。YAMLからExcelへの変換はGo言語でCLIツールを実装し、Excel/CSV生成やHTMLビューワー機能を提供。さらにGitLab CI/CDでバージョン管理を行い、生成物をArtifactsとして保存する運用を構築しました。これにより、変更差分の追跡性や記述効率が向上し、今後はAI活用によるさらなる改善を目指しています。
3ヶ月前

大規模Ruby on Rails開発における、10万ケース単体テストの高速化とAI活用
OPTiM TECH BLOG
本記事では、15年の歴史を持つモノリシックな Ruby on Rails サービス「OPTiM Biz」における 10万超の単体テスト運用の工夫を紹介しています。テスト総実行時間は約17時間に及び、全テストを毎回実行するのは非現実的。そのため、以下の取り組みを実施:50並列実行:GitLab CI の parallel 機能を活用し、実行時間を約1時間まで短縮。Launchableによるテスト選択:AIを用いて関連性の高いテストを優先実行し、CIリソースを約77%削減。さらに、今後はセットアップ時間短縮や並列数の最適化、テスト改善(長時間テストや失敗しないテストの見直し)を進める予定です。テストは「書くだけでなく運用設計が重要」であり、AI活用は開発者体験と品質向上の両立に有効な手段と結論づけています。
3ヶ月前

LiveKitのAgent Builder は10分あれば音声AIエージェントを構築できる
OPTiM TECH BLOG
本記事では、LiveKit DevDay 2025で発表された「Agent Builder」について紹介しています。Agent Builderは、ブラウザ上でコード不要で音声AIエージェントを構築できるツールで、システムプロンプトやモデル選択を行うだけで数分でエージェントを作成可能です。HTTPツールによる外部API連携やプレビュー・デプロイ機能も備え、LiveKit Cloudで簡単に本番環境へ展開できます。実際に「天気予報を教えるエージェント」を構築した事例を通じて、操作手順や感想を共有。日本語対応の課題はあるものの、開発体験を大幅に向上させる可能性を秘めたサービスであることを解説しています。
3ヶ月前

Go の JSON 処理が変わる!encoding/json/v2 のテストコードから学ぶ 15 の新常識
OPTiM TECH BLOG
本記事では、Go 1.25で実験的に追加され、1.26で正式導入が期待されるencoding/json/v2の変更点を解説しています。公式テストコードv2_diff_test.goを参考に、v1との違いを15項目にわたり紹介。主な変更点は以下の通りです:JSONタグの大文字小文字の扱い:v2では区別がデフォルト。omitemptyの定義変更:Goの空値からJSONの空値基準へ。stringオプションの適用範囲:数値のみ、複合型にも再帰的適用。nilスライス・マップの出力:nullから[]や{}へ。固定長配列の長さチェック:不一致時はエラー。[N]byteのエンコード:Base64形式に統一。HTMLエスケープ廃止:RFC 8785準拠。無効なUTF-8はエラー:データ破損防止。これらの変更は、JSONの一貫性やパフォーマンス向上を目的としています。詳細は公式テストコードを活用しながら理解を深めましょう。
3ヶ月前

プロダクト不具合がOSS貢献に繋がるまで:Fiberとスレッドローカル変数の落とし穴を乗り越えた技術奮闘記
OPTiM TECH BLOG
本記事では、OPTiM BizのRailsバージョンアップ作業中に発覚した「英語環境でCSVインポートが失敗する」という不具合の原因究明から、OSSへのコントリビュートに至るまでの過程を紹介しています。調査の結果、問題はCSV gemではなく、i18n gemのスレッドローカル変数の扱いに起因していることが判明。FiberとThread.currentの挙動の違いが原因で、英語環境でI18n.localeが意図せずdefault_localeに戻ってしまう現象が発生していました。最終的に、Thread#thread_variable_getを利用する修正を提案し、i18n gemへのPull Requestがマージされました。記事では、技術的な学び、英語でのOSSコミュニケーション、メンター制度の重要性、OSS貢献の価値についても振り返っています。
3ヶ月前

TanStack Start ことはじめ
OPTiM TECH BLOG
本記事では、React + Vite構成のSPAで利用しているTanStack Routerを基盤とした新しいフルスタックフレームワーク TanStack Start を紹介しています。TanStack Startは型安全で開発者体験を重視し、クライアントサイドファーストの設計思想を持つ点が特徴です。SSRやServer Functionsなどのサーバーサイド機能を備え、Next.jsに近い機能を提供しつつ、既存のTanStack Routerユーザーにとって移行しやすい構成になっています。記事では、ルーティング、実行モデル、Server Functionsの使い方を具体例とともに解説し、実際に触ってみた所感を共有しています。SPAから段階的にサーバーサイド機能を取り入れたいケースに有力な選択肢となることを示唆しています。
3ヶ月前