Material Theme Builderの活用法(Figma)

本投稿は TECOTEC Advent Calendar 2025 の19日目の記事です。

こんにちは、システム開発第二事業部の飯髙です。
最近はFlutterアプリ開発に携わっています。
アプリ勉強の傍ら、Figmaを利用してデザインの勉強を進めております。

Material Theme Builderを知っていますか?
Figmaのプラグインで、カラーシステムを簡単に設定・導入できるものになります。
カラーシステムとは?利用できたら開発効率が上がるのか?
気になったため、今回はこちらを調査しました。

続きを読む

AIに対するUIデザイナーの不安

本投稿は TECOTEC Advent Calendar 2025 の18日目の記事です。

ソリューション本部の津田です。 普段はUIUXデザインを担当しております。

SNSを眺めていると、次のような投稿が目に留まりました。 「プロンプトを入力するだけで、それらしいUIが一瞬で生成される。UIデザイナーが不要な未来が見える」 「いい感じのプレゼン資料が簡単に作れた」 AIによるUI生成は日々進化しています。こうした情報に触れ、胸の奥が少し冷たくなるような感覚を覚えたUIデザイナーの方も、決して少なくないのではないでしょうか。

  • AIに対する不安
  • 消えていった職業
  • UIデザイナーの未来
  • おわりに
  • テコテックの採用活動について

AIに対する不安

続きを読む

未経験・新卒1年目エンジニアが直面した4つの失敗と学び

本投稿は TECOTEC Advent Calendar 2025 の17日目の記事です。

DX本部 システム開発第一事業部の吉本です。今年4月に未経験・新卒で入社しました。

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

この記事では、案件に配属されてから今までに私が直面した失敗と学びについてまとめました。

  • 本記事の対象
  • 失敗①:コードの可読性・保守性
    • 失敗事例「コードが読みづらい」
    • 読者へのメッセージ:思いやりのこころが大事!
  • 失敗②:タスク受取時のコミュニケーション
    • 失敗事例「確認してないけどいっか」
    • 読者へのメッセージ:タスクをもらったら必ずゴールを確認しよう!
  • 失敗③:レビューの反映
    • 失敗事例「言われたことをそのまま反映させる」
    • 読者へのメッセージ:自分の意見を持つ!
  • 失敗④:コードの最適化
    • 失敗事例「とにかく動けばいいだろう」
    • 読者へのメッセージ:考えることをやめないで!
  • まとめ
  • テコテックの採用活動について

本記事の対象

  • 新卒1年目
  • 就活生(特に未経験)

私の経験が、少しでも皆さんの助けになれば嬉しいです!

続きを読む

“作る”だけではAIは動かない。開発者が知らない現場実装のリアル

本投稿は TECOTEC Advent Calendar 2025 の16日目の記事です。

はじめに

こんにちは。BPR事業部の石田です。
2025年7月、事業譲渡に伴い、別会社から入社しました。
この記事では、BPR事業部で行われている生成AI導入支援の案件内容から生成AIを一般企業へ導入するうえで、BPR事業部の視点から見える生成AI導入の本質がお伝えできればと思います。

  • はじめに
  • BPR事業部の視点から見える、生成AI導入の本質
  • 1. 技術より難しいのは「現場が動く前提」を整えること
  • 2. 現場を動かすための“理解・意欲・習慣”という三つの壁
    • ① 理解の壁
    • ② 意欲の壁
    • ③ 習慣の壁
  • 3. BPR事業部として行った“現場実装のための設計”
    • ① 動画マニュアルによる“理解スピードの底上げ”
    • ② 社内掲示ポスターによる“意欲の壁”へのアプローチ
    • ③ 運用設計と業務プロセスの再構築
  • 4. 開発者に伝えたい“見えない部分”
  • 5. まとめ:AI導入の本質は、技術と現場の“どちらか”ではなく、両方をつなぐ設計にある
    • サービス精神は、開発とBPRをつなぐ共通の価値観
  • 結論:AI時代の競争力は、技術 × 運用 × サービス精神の連動で生まれる
  • テコテックの採用活動について

BPR事業部の視点から見える、生成AI導入の本質

生成AIが業務効率化や意思決定支援の領域で急速に広まる中、
「AIモデルを導入したのに、現場が使ってくれない」「PoCではうまくいったのに、実運用で価値が出ない」 といった課題は、今も多くの企業で起きています。

これは技術の問題ではありません。
むしろ “技術以外の要素こそが、AI導入の成否を決めている” と言えます。
私たちBPR事業部が、ある企業への生成AI導入を支援する中で実感したのは、
現場の行動・プロセス・理解度という「人と業務」の壁こそ、開発者からは見えにくい“本当のハードル”だということでした。 本記事では、開発者が見落としがちな現場実装のリアルと、
BPRとしてどのようにAIを“使われる仕組み”へ落とし込んだのかを紹介します。

続きを読む

FastMCPでSlack APIをGemini CLI に導入する

本投稿は TECOTEC Advent Calendar 2025 の15日目の記事です。

DX本部 システム開発第二事業部の陳です。 iOS、Androidの開発リーダーを務めています。

この記事では、FastMCPSlackアプリ開発向けライブラリのBolt を利用して、Gemini CLIでSlackを操作する方法を簡単に説明します。

将来的にはワークフローを生成AIで構築し、Gemini CLIを主体としてSlackを操作できればと考えています。

記事の大まかな流れは、以下となります。

  1. FastMCPでSlack APIを利用する際に必要なトークンと環境設定についての説明

  2. FastMCPの環境構築(pythonの環境構築)

  3. Slack APIを組み入れたFastMCPのソースコード

  4. Gemini CLIへFastMCPを導入および、MCPツールの実演

順を追って手順を見ていきましょう。

Slack APIの環境設定

今回は、Slack APIの使い方は主題ではないので、詳しい説明は割愛します。 初めての方は公式Documentの入門ガイドの閲覧をお願いします。

Bolt用のToken取得

FastMCPでBoltを利用するにあたり、3つのトークンを取得する必要があります。 Slack APIでは様々なトークンが設定されており混乱を招くので、下記に明示します。

サインシークレット(.env:SLACK_SIGN_SECRET)

Settings -> Basic Information -> Signing Secret

ボットトークン(.env:SLACK_BOT_TOKEN)

Settings -> Install App

アプリトークン(.env:SLACK_APP_TOKEN)

Settings -> Basic Information -> App-Level Tokens

その他設定

Socket Modeの有効化

Settings -> Socket Mode

Enable Socket Mode を有効化してください。

Event Subscriptionの有効化

Features -> Event Subscriptions

Enable Events を有効化してください。

Bot Token Scopesの設定

Features -> OAuth & Permissions

必要性に応じてスコープを追加してください。 今回は chat:write を利用します。

FastMCPの環境構築(Python環境の構築)

Python開発環境はuvを利用してください。 パッケージ管理と仮想環境構築を一元化するためにuvを利用していますが、使い方は主題ではないので、詳しい説明は割愛します。 初めての方は公式Documentもしくは、他サイトの入門ガイドの閲覧をお願いします。

プロジェクトを作成してください。

$ uv init -p 3.10 slack_mcp
$ cd slack_mcp

関連パッケージをインストールしてください。

$ uv add fastmcp python-dotenv aiohttp slack-bolt

起動を確認してください。

$ source .venv/bin/activate    
$ uv run main.py

FastMCPのソースコード

各処理の詳細はコメントを読んでください。

# main.py

import os
import logging
import asyncio
from dotenv import load_dotenv
from slack_bolt.async_app import AsyncApp
from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler
from fastmcp import FastMCP
from contextlib import asynccontextmanager

logging.basicConfig(level=logging.INFO)
load_dotenv()


slack_app = AsyncApp(token=os.getenv("SLACK_BOT_TOKEN"),
                     signing_secret=os.getenv("SLACK_SIGN_SECRET"))

"""メッセージイベントを格納します"""
msg_queue = asyncio.Queue(maxsize=50)


@slack_app.event("message")
async def handle_message_events(body, logger, ack):
    """
    Slackからメッセージイベントを監視し、メッセージ投稿があった場合、msg_queueに格納します。
    """
    await ack()
    logger.info(body)
    await msg_queue.put(body)
    pass


@asynccontextmanager
async def server_lifespan(server: FastMCP):
    """
    MCP始動時に、SlackのSocketに非同期で接続します。※非同期ではない場合、MCPに干渉します。
    """
    slack_handler = AsyncSocketModeHandler(
        slack_app, os.getenv("SLACK_APP_TOKEN"))
    asyncio.create_task(slack_handler.start_async())
    yield


mcp = FastMCP("Slack Mcp Demo", lifespan=server_lifespan)


@mcp.tool()
async def read_slack_messages():
    """
    キューに溜まっている、Slackのイベントを全て取り出します。
    """
    messages = []
    while not msg_queue.empty():
        msg = await msg_queue.get()
        messages.append(msg)
        msg_queue.task_done()
    if not messages:
        return [{"status": "新着メッセージはありません"}]
    return messages


@mcp.tool()
async def slack_message(
    channel_id: str,
    text: str
):
    """
    Slackにメッセージを送信します。
    """
    try:
        await slack_app.client.chat_postMessage(
            channel=channel_id, text=text
        )
        return f"Message Send"
    except Exception as e:
        raise f"Message Send"

if __name__ == "__main__":
    mcp.run()

Gemini CLIへのFastMCP導入

FastMCPで、Gemini CLIの設定(.gemini/setting.json)を作成してください。

$ fastmcp install gemini-cli main.py   

FastMCPを実行したフォルダ階層で、Gemini CLIを起動してください。

$ gemini

プロンプトでMCPのツールを確認してください。

確認が終わりましたら、早速試してみましょう。

Slackを起動し、Slack APIを導入したチャンネルにメッセージを投稿してください。

Gemini CLIに戻り、メッセージ取得のプロンプトを入力してください。

> slackから受信した最新メッセージを表示してください

Socketで受信したイベント情報とともに、Slackのメッセージが返信されます。

Gemini CLIからSlackに返信してもらいましょう。

> channelにGemini CLIからの挨拶を返信してください

Slackに戻り、Gemini CLIから返信されていることを確認してください。

Gemini CLIから投稿されているはずです。 簡単ですが、以上になります。

まとめ

Slackに返信する簡単なサービスでも、サーバー構築からデータ加工など非常に手間が必要となりますが、 生成AIと組み合わせることで、一部実装が省略され、より柔軟に対応できるようになります。

Gemini CLIにはターミナルを操作する機能があり、従来対応できなかった高度な作業を無料(ローカル環境)できるなど様々な活用が考えられます。

今後の開発において、専門性とともに手段を問わない構想力(AI活用)が重要だと考えております。 使われる(AIと競う)技術者ではなく、使う方の技術者として意識してキャリアアップしていくことが課題と考えています。

テコテックの採用活動について

テコテックでは新卒採用、中途採用共に積極的に募集をしています。
採用サイトにて会社の雰囲気や福利厚生、募集内容をご確認いただけます。
ご興味を持っていただけましたら是非ご覧ください。 tecotec.co.jp

【AWS】未経験エンジニアが直面した「運用監視の異常」とその対応フロー

本投稿は TECOTEC Advent Calendar 2025 の14日目の記事です。

SRE推進室の豊田です。今年4月に新卒で入社しました。
普段はインフラエンジニアとしてAWSの保守運用業務を主に行っています。

本記事では未経験でインフラエンジニアになった私がよく直面した運用監視上の異常について、その原因と対応フローをご紹介します。

目次

  • 想定するAWSの構成について
  • 異常①:ALBのヘルスチェック失敗について
    • ヘルスチェックが失敗する原因
    • ヘルスチェック失敗時の原因の確認と対応
  • 異常②:Auroraのメトリクスが途切れる
    • Auroraのメトリクスが途切れた原因
    • Auroraのメトリクスが途切れた原因の確認と対応
  • まとめ
  • テコテックの採用活動について
続きを読む

Better English, Better Code: なぜ英語は開発者にとって重要なのか

本投稿は TECOTEC Advent Calendar 2025 の13日目の記事です。

こんにちは!DX本部システム開発第二事業部のたつやです。
普段は主にiOSアプリの開発を担当しています。

プログラミングと英語。どちらも「難しそう」と感じる方が多いですが、実はこの2つは切っても切り離せない関係にあります。
この記事では、

  • なぜ英語力がコードの品質に直結するのか?
  • 英語ができると、どんなメリットがあるのか?
  • 開発者として英語力を伸ばすための具体的な方法

について、詳しく解説していきます。

続きを読む