ブログ

  • MineCraftでAIとコンピュータを作成する

    まえがき

    私はかつてMineCraftで想像的な遊びを行うのはなかなか難しいと考えていました。

    YouTubeでAIのbotを使用している人やレッドストーンコンピュータを作成している人の動画を見て興奮したのを覚えています。

    これこそが自分にとって興味を湧き立てられるトピックであると感じました。

    YouTubeへ投稿した動画

    私は、これまでのAIツール作成のノウハウを活用してMineCraft上で想像的な遊びをもっとできることに気がついてしまいました。

    画面録画して、簡単な編集を行い、その様子をYouTubeにアップしています。

    AIボット同士が会話を行い、自律的に行動しています。初めてこの光景を見た時は、かなりの衝撃を受けました。

    GitHubのリンクからmodをダウンロードすることができます。

    modの設定方法に関するYouTube動画はこちらです。

    modのカスタマイズ性

    modは自由にカスタマイズが可能です。ソースコードを開くとAIモデルやボットを調整可能であることがわかりました。

    私が驚いたことは、このソースコードはついこの間までに作成していたAIのアプリケーションにそっくりだということです。

    AIがどのモデルを使うのか、エラーハンドリングの方法など。基本的な部分は簡単に理解することができました。

    まだ技術的に厳しい高度な内容だと、記憶管理やタスク管理といった機能があります。modに搭載されている優秀な機能によってAIの自律的な行動が可能になっています。

    これらを理解し、応用すればアプリケーションもより高度になります!

    ClaudeCodeを活用する

    さて、これだけの機能を兼ね備えたmodはどのように修正していくことが望ましいでしょうか?

    私は以前のアプリケーション開発で単発の依頼に限界を感じていました。調査・設計・コーディングは非常に重要なステップであり、高い効果を実感しています。

    ClaudeCodeは優秀な機能ですが、ClaudeCodeを活用してコーディングまでのステップを意識することでこのmodをさらに進化させることができます。自分でゲームをカスタマイズでき、AIを高度に扱えることは非常に素晴らしい経験です。

    • 音声モデルのカスタマイズ
    • エージェント機能の実装

    これらのアプリ開発で得た知見やソースコードを元にClaudeCodeで指示出しを行いました。

    現在はバグはまだあるものの、非常に優秀な機能を搭載させることができています。

  • Claude4の登場(2025/05/23)

    Claude4の登場(2025/05/23)

    Claude4シリーズ

    Anthoropic社の発表により、Claude4シリーズの発表がありました。前回から約3ヶ月ぶりの新モデル発表となりました。

    AIのモデルの進化スピードは加速してきているので、早速キャッチアップしていきたいと思います。

    発表動画のまとめ

    今回の発表に関連する動画をまとめておこうと思います。

    モデル

    • Claude Opus4
    • Claude Sonnet 4

    Claude Code

    ClaudeCodeは VsCodeとGitHubと連携ができるようになりました。

    Cursorと統合することで、普段と同じように開発を続けることが可能です。

  • WordPressテーマ「my-openai」

    WordPressテーマ「my-openai」

    自作テーマ

    普段、Wordpressテーマ「swell」を使用してブログ運営をしていましたが自作テーマに切り替えることにしました。

    もっとOpenAIのウェブサイトのような美しいデザインにしたいという願望があり、テーマを自作することで実現しようという試みです。

    my-openai

    Swellの開発者の方はエンジニア向けにテーマを無料公開されており、Swellの基本部分を実装したArcheを作成されています。
    こちらをカスタマイズして、my-openaiを作成しました。

  • sample

    OPENAIのお気に入りの動画をピックアップします。

    デザイン関連の動画はかなり洗練されていて、見応えがあります。

  • IT LIFE -AI Agent-

    IT LIFE -AI Agent-

    イントロダクション

    2025年からAIの技術に興味を持ち、APIを使ったアプリケーションを作成したいと考えていました。ChatGPTやGeminiなどの複数のアプリケーションを使用していましたが、1つの場所で複数のモデルを使用したいと思うようになりました。そこで、興味本位から自己学習の一環としてChatGPTを模倣したアプリケーションを作成しました。

    ソースコードは今後GitHub上に公開する予定です。

    まだまだ未完成の機能が多いですが、たくさんのAIモデルに対応しているため、AIのWrapperとしてはかなり面白いのではないかと思います。

    プロジェクトの概要

    このサイトは、ChatGPT、Gemini、Claudeなど複数のAIモデルに対応し、ユーザーが自由にモデルを選択して対話できるウェブアプリです。ReactとNode.jsをベースに構築し、APIを介して各AIモデルと連携するアーキテクチャを採用しています。ストリーム出力・推論モデルの思考過程の出力(一部モデル)に対応しています。

    開発の過程では、AIの生成したコードやAIのフィードバックを受けながらコーディングを進めました。

    各種APIやAIモデルを使用するにあたり、公式ドキュメントは徹底して読み込むことにし、作業を進めました。

    主要機能の紹介

    使用するAIのモデルを選択する

    デフォルトで選択可能なAIモデルは、左上のモデル名の下矢印を押すことで選択が可能になります。

    ChatGPT,Gemini,Grok,Claude,DeepSeekの様々なモデルを使用することが可能です。

    2025年4月13日時点では、以下のモデルに対応しています。

    OpenAIGPT-4o(ChatGPTで使用されているモデル)
    GPT-4o-mini
    O1-mini
    O3-mini
    GPT-4.5 (プレビュー版)
    GeminiGemini-2.5-pro
    Gemini-2.0-flash
    Gemini-2.0-falsh-thinkng
    ClaudeClaude-3.7-sonnet
    Claude-3.7-sonnet-thinking
    GrokGrok3
    Grok3-fast
    Grok3-mini
    Grok3-mini-fast
    DeepSeekDeepSeek-V3
    DeepSeeek-R1

    ウェブ検索機能

    OpenAIの「web-search-tools」を使用することで、ウェブ検索が可能になりました。この機能はResponseAPIを使用しています。
    検索を実行した際に、検索のソースが画面に表示されます。

    こちらの機能は動作の安定化のために、今後調整を行なっていきます。

    ResponseAPIについては、こちらの記事で紹介をしています。

    ストリーム出力

    ストリーム出力に対応しているモデルに関しては、どのモデルを選択した場合でも、ストリーム出力されるようにしています。DeepSeek-R1の推論モデルのストリーミング出力にはかなりこだっています。

    音声の出力

    実装済みですが、非公開にしている機能に「音声」機能があります。出力されるテキストを読み上げてくれます。

    OpenAIの「TTS-1 HD」モデルを使用した、最新の高品質な音声モデルを採用しながら、音声の波形を表示させることで再生箇所を選びやすくしています。

    DeepResearch

    唯一、LangGraphを使用した機能になっています。以下のステップで高品質な文章生成を目指して作成しました。

    • 検索クエリ作成
    • ウェブ検索・再検索
    • 下書き
    • 記事の作成


    それぞれ別のモデルを使うようにしてみました。まだ完成度が低いため、非公開にしています。

    技術的な学びや成果

    元々、技術的にはHTML,CSS,Javascriptの基本的知識程度しかなかったのでプロダクトを作成できるとは思っていませんでした。AIを活用することで、そこからたくさんの学びを得ることができました。

    エンドポイントやAPIの利用、Reactの使い方など、今まで触れることのなかった領域の知識を得ることができました。

    LangGraphを使ってエージェント機能を実装していますが、ノードの設定を行うだけで並列実行させられる部分はメンテナンスが楽になることから大変面白い発見でした。

    何より、新しいモデルが発表されるたびに自分のアプリケーション上で使用できるようになることは非常に楽しみとなっています。

    今後の展望

    今後は、単に複数のモデルを使用できるだけではAIを使いこなせずに終わってしまいます。エージェント機能の開発に注力し、AIが相互に連携してより高精度なアウトプットを出力できる方向を目指していきたいと考えています。

    • プロンプト管理機能
    • メモリー機能
    • MCP接続機能

    実装難易度が硬い機能がたくさん未実装なのですが、少しずつアプリケーションのエージェント化に向けて進めていきたいです。

  • OpenAI Agent SDKでアプリを構築する

    OpenAI Agent SDKでアプリを構築する

    まえがき

    OpenAIから開発者向けにAgent SDKが発表されたました。これを機にpythonとReactでゼロからアプリ構築をしていきたいと思います。今回は、シンプルなチャットアプリを構築していきます。

    ファイル作成

    フロントエンドファイルの作成

    ルートディレクトリでコマンドを入力します。

    npx create-react-app frontend

    インストール完了後、以下のコマンドを入力してクライアントを起動します。

    cd frontend
    npm start

    バックエンドファイルの作成

    cd ..
    mkdir backend
    cd backend
    touch main.py

    main.pyファイルを作成したら以下のソースコードを貼り付けます。

    from agents import Agent, Runner
    
    agent = Agent(name="Assistant", instructions="You are a helpful assistant")
    
    result = Runner.run_sync(agent, "Write a haiku about recursion in programming.")
    print(result.final_output)
    
    # Code within the code,
    # Functions calling themselves,
    # Infinite loop's dance.

    次に、agent SDKをインストールしていきます。

    pip install openai-agents

    インストールが完了したら、OpenAIのAPIキーをターミナル上にExportします。

    export OPENAI_API_KEY=your_api_key

    最後に、以下のコマンドでバックエンドの実行を確認します。

    python main.py

    Runner Agent

    Runnerクラスでエージェントの実行を行います。

    from agents import Agent, Runner
    
    async def main():
        agent = Agent(name="Assistant", instructions="You are a helpful assistant")
    
        result = await Runner.run(agent, "Write a haiku about recursion in programming.")
        print(result.final_output)
        # Code within the code,
        # Functions calling themselves,
        # Infinite loop's dance.

    ストリーミング出力を行っている場合は、 RunResultStreamingがエージェントの実行結果に含まれています。

    以下のコードが呼び出し方法の参考になります。

    import asyncio
    from openai.types.responses import ResponseTextDeltaEvent
    from agents import Agent, Runner
    
    async def main():
        agent = Agent(
            name="Joker",
            instructions="You are a helpful assistant.",
        )
    
        result = Runner.run_streamed(agent, input="Please tell me 5 jokes.")
        async for event in result.stream_events():
            if event.type == "raw_response_event" and isinstance(event.data, ResponseTextDeltaEvent):
                print(event.data.delta, end="", flush=True)
    
    
    if __name__ == "__main__":
        asyncio.run(main())

    Response API (Web Search Tool)

    ResponseAPIを使って検索機能を実装します。

    import openai from OpenAI
    
    client = OpenAI (
        api_key = "XXXXXX"
    )
    
    response = client.response.create(
        model="gpt-4o",
        tools=[{"type": "web_search_preview"}],
        input="2025年3月14日の政治の事件は?",
    )
    #APIの結果全てを取得する場合
    print(response)
    #テキストのみ取得する場合
    print(response.output_text)
    Response(id='XXXXXXXXXXX', created_at=1742000929.0, error=None, incomplete_details=None, instructions=None, metadata={}, model='gpt-4o-2024-08-06', object='response', output=[ResponseFunctionWebSearch(id='ws_67d4d32239fc8192b80a8ff92c37cdd0027548a8deef9e5f', status='completed', type='web_search_call'), ResponseOutputMessage(id='YYYYYYYYYYYYYYY', content=[ResponseOutputText(annotations=[AnnotationURLCitation(end_index=192, start_index=102, title='シリア暫定憲法を承認\u3000正式な政権移行に5年\u3000表現の自由や女性の権利も盛り込まれる (2025年3月14日掲載) - ライブドアニュース', type='url_citation', url='https://news.livedoor.com/topics/detail/28341151/?utm_source=openai'), AnnotationURLCitation(end_index=331, start_index=251, title='2025年3月14日のヘッドラインニュース - GIGAZINE', type='url_citation', url='https://gigazine.net/news/20250314-headline/?utm_source=openai'), AnnotationURLCitation(end_index=522, start_index=432, title='トランプ政権、「出生地主義」制限で最高裁に申し立て (2025年3月14日掲載) - ライブドアニュース', type='url_citation', url='https://news.livedoor.com/topics/detail/28341057/?utm_source=openai'), AnnotationURLCitation(end_index=715, start_index=625, title='北朝鮮が自民党の改憲推進に警告\u3000韓米日安保協力を非難 (2025年3月14日掲載) - ライブドアニュース', type='url_citation', url='https://news.livedoor.com/topics/detail/28341246/?utm_source=openai'), AnnotationURLCitation(end_index=899, start_index=788, title='石破首相、改めて「違法性はない」~商品券配布問題(2025年3月14日掲載)|日テレNEWS NNN', type='url_citation', url='https://news.ntv.co.jp/category/politics/08c6b04760d444e88c165308d4952c5b?utm_source=openai')], text='2025年3月14日には、以下の政治的な出来事が報じられました。\n\n**シリアの暫定憲法承認**\n\nシリアのシャラア暫定大統領は、正式な政権への移行期間を5年と定める暫定憲法草案に署名し、承認しました。 ([news.livedoor.com](https://news.livedoor.com/topics/detail/28341151/?utm_source=openai))\n\n**日本の政治家襲撃事件**\n\nNHK党の立花孝志党首が、財務省前でナタを持った男に襲われる事件が発生しました。 ([gigazine.net](https://gigazine.net/news/20250314-headline/?utm_source=openai))\n\n**米国の出生地主義制限に関する最高裁への申し立て**\n\nトランプ米政権は、米国で生まれればほぼ無条件で米国籍を得られる「出生地主義」を大幅に制限する大統領令を認めるよう、最高裁に申し立てました。 ([news.livedoor.com](https://news.livedoor.com/topics/detail/28341057/?utm_source=openai))\n\n**北朝鮮による日本の改憲推進への警告**\n\n北朝鮮の朝鮮中央通信は、日本の自民党が戦力保有と交戦権を認めない「平和憲法」の改正を推進しようとしていることを指摘し、韓米日の安全保障協力を非難しました。 ([news.livedoor.com](https://news.livedoor.com/topics/detail/28341246/?utm_source=openai))\n\n**石破首相の商品券配布問題**\n\n石破首相が自民党新人議員に10万円相当の商品券を配っていた問題で、首相は「違法性はない」と強調しました。 ([news.ntv.co.jp](https://news.ntv.co.jp/category/politics/08c6b04760d444e88c165308d4952c5b?utm_source=openai))\n\nこれらの出来事が、2025年3月14日に報じられた主な政治的なニュースです。 ', type='output_text')], role='assistant', status='completed', type='message')], parallel_tool_calls=True, temperature=1.0, tool_choice='auto', tools=[WebSearchTool(type='web_search_preview', search_context_size='medium', user_location=UserLocation(type='approximate', city=None, country='US', region=None, timezone=None))], top_p=1.0, max_output_tokens=None, previous_response_id=None, reasoning=Reasoning(effort=None, generate_summary=None), status='completed', text=ResponseTextConfig(format=ResponseFormatText(type='text')), truncation='disabled', usage=ResponseUsage(input_tokens=331, output_tokens=536, output_tokens_details=OutputTokensDetails(reasoning_tokens=0), total_tokens=867, input_tokens_details={'cached_tokens': 0}), user=None, store=True

  • BrowserUseを実行するためのセットアップ方法

    BrowserUseを実行するためのセットアップ方法

    以下では、Gemini API (google-generativeai, langchain-google-genai) と browser-use を組み合わせて活用するための手順や実行方法をご紹介します。仮想環境の作成からサンプルコードの実行例までを網羅した内容になっていますので、ぜひ参考にしてください。

    はじめに

    今回の目的は、Google Generative AI (Gemini) と LangChain の連携に加えて、ブラウザ自動操作エージェントである browser_use を利用する方法を解説することです。
    以下の内容は Python の仮想環境(venv もしくは virtualenv)を使用することを前提としています。仮想環境を使うことで、プロジェクトごとにパッケージ管理を分離でき、環境汚染を防ぐことができます。

    my_project/
    ├── .env                   # APIキーなどの環境変数を設定
    ├── run_agent.py           # 実行コード (例のスクリプトを配置)
    ├── requirements.txt       # インストールが必要なライブラリ一覧(任意)
    ├── myenv/                 # venv または virtualenv で作成した仮想環境のディレクトリ
    │   ├── bin/               # (macOS/Linux)実行ファイルが入る
    │   ├── Scripts/           # (Windows)実行ファイルが入る
    │   ├── include/           
    │   ├── lib/
    │   └── ...
    └── ...

    仮想環境の準備

    venv の場合(Python 3.3以降)

    Python が標準で備えている venv モジュールを使う手順です。

    python3 -m venv myenv

    コマンド実行後、フォルダ構成として myenv ディレクトリが作成されます。
    myenv の部分は任意の名前に変更できます。

    virtualenv の場合

    あらかじめ virtualenv のインストールが必要です。

    pip install virtualenv
    virtualenv myenv

    こちらも myenv は任意のディレクトリ名に置き換えて構いません。

    仮想環境のアクティベート(有効化)

    macOS / Linux の場合

    source myenv/bin/activate

    Windows の場合

    myenv\Scripts\activate

    アクティベートに成功すると、ターミナルやコマンドプロンプトの先頭に (myenv) のような表示が追加されます。

    必要なライブラリのインストール

    仮想環境が有効になっている状態で、以下のコマンドを実行します。

    pip install -U google-generativeai langchain-google-genai browser-use python-dotenv
    playwright install

    各ライブラリの役割

    • google-generativeai: Google の Gemini API を利用するためのライブラリ。
    • langchain-google-genai: LangChain フレームワークから Gemini API を呼び出すための拡張ライブラリ。
    • browser-use: ブラウザ操作を自動化するエージェント機能を提供するライブラリ。
    • python-dotenv: .env ファイルから環境変数を読み込むために利用。

    browser-use をインストールすると、依存しているライブラリ(aiohttp, beautifulsoup4, pyppeteer など)も自動的にインストールされます。また、langchain-google-genai には langchain が含まれるため、個別に langchain をインストールする必要はありません。

    Python コード例

    以下のサンプルコードは、引数で受け取ったタスクを Google Generative AI (Gemini) に投げかけ、結果を出力すると同時に、browser-use エージェントによるブラウザ操作が組み合わされたタスクを実行できます。

    import argparse
    import asyncio
    from browser_use import Agent
    from langchain_google_genai import ChatGoogleGenerativeAI
    import os
    from dotenv import load_dotenv  # .env ファイルを読み込むため
    
    # .env ファイルを読み込む
    load_dotenv()
    
    # 環境変数 GOOGLE_API_KEY が設定されているか確認
    if not os.environ.get("GOOGLE_API_KEY"):
        raise ValueError("環境変数 GOOGLE_API_KEY が設定されていません。")
    
    
    def parse_args():
        parser = argparse.ArgumentParser(description="Run AI agent with a custom task.")
        parser.add_argument("--task", type=str, required=True, help="Task for the AI agent.")
        return parser.parse_args()
    
    
    async def main():
        args = parse_args()
    
        agent = Agent(
            task=args.task,
            llm=ChatGoogleGenerativeAI(
                model="gemini-1.5-pro",
                convert_system_message_to_human=True,
                temperature=0,  # 出力多様性(創造性)の調整
            ),
        )
        result = await agent.run()
        print(result)
    
    
    if __name__ == "__main__":
        asyncio.run(main())

    .envファイルについて

    上記のコードでは、.env ファイルに GOOGLE_API_KEY を設定し、python-dotenv を使って読み込む想定です。
    .env ファイルはプロジェクト直下などに作成し、以下のように API キーを記述してください。

    GOOGLE_API_KEY=YOUR_GOOGLE_API_KEY

    YOUR_GOOGLE_API_KEY はご自身のキーに置き換えてください。

    実行方法

    仮想環境をアクティブにした状態で、上記コードを run_agent.py というファイル名で保存している場合、以下のように実行できます。

    python run_agent.py --task "ChatGPTのモデルの情報を調べてください。"

    実行例では、"ChatGPTのモデルの情報を調べてください。" というタスクを渡しています。
    結果として、バックエンドでは Gemini API を用いた応答が実行され、ターミナル上に結果が表示されます。

    仮想環境から抜ける方法

    作業が終了したら、次のコマンドで仮想環境から抜けられます。

    deactivate

    まとめ

    これで、Gemini API と browser_use の環境構築から実行までが完了します。LangChain をはじめとした関連ライブラリは自動的にインストールされるため、追加のインストールは不要です。ぜひこれをベースにさまざまなタスクを自動化・エージェント化してみてください。

    OpenAIのAPIを使ったシンプルな実装方法はこちらのサイトを確認してください。

    GitHubで詳細を確認することも可能です。

  • APIウェブアプリケーションの作り方

    APIウェブアプリケーションの作り方


    概要

    今回、ウェブアプリケーションを作成する上で使用するAPIはGoogleが提供するGemini 1.5 Proです。


    Gemini 1.5 Pro は次世代の大規模言語モデル(LLM)で、優れた自然言語生成能力を持っています。この記事では、Gemini 1.5 Pro APIを利用したシンプルなウェブアプリケーションを構築する手順を解説します。

    この記事で学べること
    • Gemini 1.5 Pro API を使うための設定方法
    • 簡単なバックエンド(Node.js + Express)とフロントエンドの実装
    • APIリクエスト・レスポンスを通じてAIとやり取りする仕組みの構築

    Gemini 1.5 Pro API の準備

    Gemini API のアクセスを取得

    1. Gemini 1.5 Pro を提供する公式プラットフォーム(例: Google Cloud Platform や独自のAPIポータル)にサインアップします。
    2. アクセス権を取得し、APIキーまたは認証情報(JSON形式のサービスアカウントなど)を発行します。
    3. 管理画面で使用制限やレートリミットを確認しておきます。

    OPEN AIやDeep Seekなど、他社のAPIでもほとんど同じようにアプリケーションを実装できます。

    API ドキュメントの確認

    Gemini 1.5 Pro API のエンドポイントや利用方法を確認します。

    たとえば、以下のようなエンドポイントがあるかもしれません:

    • POST /v1/models/gemini-1.5-pro/completions (テキスト生成用)

    • POST /v1/models/gemini-1.5-pro/chat (チャット用)

    開発環境の準備

    STEP
    プロジェクトディレクトリの作成
    mkdir my-gemini-app
    cd my-gemini-app
    STEP
    Node.jsプロジェクトの初期化
    npm init -y
    STEP
    必要なパッケージのインストール
    npm install express axios dotenv
    • express: シンプルなWebサーバーフレームワーク
    • axios: HTTPリクエストを送るためのライブラリ
    • dotenv: .env ファイルに環境変数を管理するためのライブラリ

    サーバーサイドの実装


    index.js ファイルを作成し、以下のコードを記述します。

    require('dotenv').config(); // .env ファイルから環境変数を読み込む
    const express = require('express');
    const axios = require('axios');
    
    const app = express();
    const port = 3000;
    
    // 環境変数から API キーを取得
    const GEMINI_API_KEY = process.env.GEMINI_API_KEY;
    const GEMINI_API_URL = 'https://api.gemini-platform.com/v1/models/gemini-1.5-pro/completions'; // 仮のURL
    
    // JSON リクエストボディのパース
    app.use(express.json());
    
    // フロントエンド用の静的ファイルを配信
    app.use(express.static('public'));
    
    // 動作確認用エンドポイント
    app.get('/', (req, res) => {
      res.send('Hello from Gemini 1.5 Pro app!');
    });
    
    // 質問を受け付けて Gemini API に送信するエンドポイント
    app.post('/ask', async (req, res) => {
      try {
        const userQuestion = req.body.question;
    
        if (!userQuestion) {
          return res.status(400).json({ error: 'No question provided' });
        }
    
        // Gemini 1.5 Pro API 呼び出し
        const response = await axios.post(
          GEMINI_API_URL,
          {
            prompt: userQuestion,
            max_tokens: 100,
            temperature: 0.7,
          },
          {
            headers: {
              'Authorization': `Bearer ${GEMINI_API_KEY}`,
              'Content-Type': 'application/json',
            },
          }
        );
    
        const answer = response.data.choices[0].text.trim();
        res.json({ answer });
      } catch (error) {
        console.error('--- Gemini API Error ---');
        if (error.response) {
          console.error('Status:', error.response.status);
          console.error('Data:', error.response.data);
        } else {
          console.error('Message:', error.message);
        }
        res.status(500).json({ error: 'エラーが発生しました' });
      }
    });
    
    // サーバー起動
    app.listen(port, () => {
      console.log(`Server is running on http://localhost:${port}`);
    });

    フロントエンドの実装

    public/index.html の作成

    フロントエンドでGemini 1.5 Proに質問を送信する簡単なフォームを用意します。

    <!DOCTYPE html>
    <html lang="ja">
    <head>
      <meta charset="UTF-8">
      <title>Gemini 1.5 Pro Chat App</title>
    </head>
    <body>
      <h1>Gemini 1.5 Pro Chat App</h1>
      <form id="questionForm">
        <input type="text" id="questionInput" placeholder="質問を入力してください">
        <button type="submit">送信</button>
      </form>
      <div id="answer"></div>
    
      <script>
        document.getElementById('questionForm').addEventListener('submit', async (e) => {
          e.preventDefault();
          const question = document.getElementById('questionInput').value;
    
          const response = await fetch('/ask', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ question }),
          });
    
          const data = await response.json();
          document.getElementById('answer').innerText = data.answer || data.error;
        });
      </script>
    </body>
    </html>

    必要な環境変数の設定


    .env ファイルを作成し、以下のように記述します。

    GEMINI_API_KEY=your-gemini-api-key


    取得した Gemini APIキー をここに記載します。

    サーバーの起動と動作確認

    STEP
    サーバーの起動
    node index.js
    STEP

    ブラウザで http://localhost:3000 にアクセス。

    STEP
    フォームに質問を入力して送信ボタンを押す

    Gemini 1.5からAPI経由で回答が表示されます。

    まとめ

    node.jsとExpressを使い、APIを使用したシンプルなアプリケーションを作成できました。

    私はChatGPTやGeminiに質問しながら作成したので、かなり短時間で学習できました。

    この機能をベースにしてさらに機能を追加することもできるので、ぜひチャレンジしてみてください。

  • 若手社員による「新人現場指導」の5ステップ

    若手社員による「新人現場指導」の5ステップ

    近年、多くの企業が人材不足や競争激化にさらされるなか、新人の早期戦力化と離職率の低減はますます重要度を増しています。
    しかし、既存のプロジェクトや人員配置の都合上、新人教育をベテランではなく若手社員が担うケースが増えているのも事実です。「2年目や3年目の社員自身も、まだ学びたいことが多い中で、どうやって新人を育成すればいいのか?」と迷う方も多いでしょう。

    本記事では、厚生労働省の離職率データやGoogleの「プロジェクトアリストテレス」、そして「褒める」文化の研究結果などのファクトを取り入れながら、新人を現場で指導するための5ステップを分かりやすく解説します。若手社員ならではの強みを活かし、心理的安全性や褒める文化を大切にしながら、新人をスムーズに育成するヒントをぜひ持ち帰ってください。

    新人現場指導が求められる背景

    新卒離職率と企業の課題

    厚生労働省の調査によると、大卒の新卒社員の3年以内離職率は3割前後と高い水準にあります。令和3年3月卒業の新規大卒就職者の離職率は34.9%と、依然として早期離職が大きな課題です。
    主な離職理由としては、仕事内容や待遇への不満、上司・同僚との関係性、企業文化とのミスマッチ、成長機会の不足などが挙げられます。こうした要因を早期に解消できないまま放置すると、採用コスト・育成コストがムダになるだけでなく、組織の士気低下につながりかねません。

    一方、新人教育に力を入れている企業(たとえばトヨタ自動車や伊藤忠商事、大王製紙など)では、集合研修とOJTを組み合わせたり、現場への実地研修を重視したりすることで、定着率の向上を実現しているケースが多々見られます。

    若手社員が担うOJTのメリット・デメリット

    メリット

    • 心理的ハードルの低さ:年齢やキャリアが近い若手が教えるほうが、新人にとって質問しやすい
    • 自分自身の成長:教えるために業務知識を再整理したり、リーダーシップを身につけられる

    デメリット

    • 負担の増大:教育者役と自身の業務を両立するため、時間管理が難しくなる
    • 未熟さによる不安:若手自身が「自分の指導で合ってるのか?」と迷いが生じやすい

    ステップ1:事前準備と心理的安全性の確保

    心理的安全性がもたらす効果

    Googleの「プロジェクトアリストテレス」によると、チームのパフォーマンスを高める最も重要な要因は心理的安全性でした。心理的安全性が高いチームでは、

    • 失敗や疑問を素直に共有できる
    • 離職率が低下する
    • 新しいアイデアや改善策が生まれやすい

    など、個人の成長だけでなく組織全体の生産性向上につながると報告されています。

    現場における心構えと雑談の役割

    新人が不安なく業務に取り組める雰囲気を作るために、まずは以下を意識しましょう。

    • 声かけ・雑談:お互いの趣味や前職・大学時代の話など、仕事外の情報交換を通じて距離を縮める
    • ミスを責めない:失敗が起きても、責任追及より「どう改善できるか」を共に考える

    この段階で新人が「ここは自分の意見を言えるんだ」と感じられるようになると、後の教育プロセスがスムーズに進みます。

    ステップ2:実務の指導と補足知識の説明

    企業事例(トヨタ、伊藤忠など)に見るOJTのポイント

    • トヨタ自動車:1年間の集合研修後、配属先で先輩社員がマンツーマン指導。
    • 伊藤忠商事:グループワークやディスカッション中心の研修で主体性を養成。
    • 大王製紙:現場での実習を重視し、製造や販売プロセスを実体験させる。

    いずれも共通するのは「実務の中で学ばせる」点です。仕事を丸ごと任せる前に、一連の流れや意義を示しつつ、小さなタスクから順にチャレンジしてもらうのが効果的です。

    ゴール設定と全体像の提示

    実務をいきなり部分的に教えても、新人は「これが何に役立つのか?」と理解しづらい場合があります。最初に、

    1. プロジェクトのゴール(何を、いつまでに達成するのか)
    2. 業務フローの全体像(どのようなステップを踏むか)
    3. 新人に期待する役割(その中で何を担当してもらうか)

    をざっくりと説明することで、学習意欲やモチベーションを高められます。

    ステップ3:進捗管理とカリキュラム設計

    新人教育における効果測定の重要性

    新人教育の効果測定をしないまま感覚的に教えていると、いつの間にか新人が成長を実感できず、モチベーションが下がってしまうことがあります。厚生労働省のレポートによると、定期的に新人の習熟度を把握し、必要に応じてフォローアップする企業ほど、早期離職率の低下につながる可能性が高いとされています。

    具体的には、

    • アンケートや面談:理解度や満足度を調査し、現場の課題を早期発見
    • 筆記試験・実技試験:業務に必要な専門知識やスキルが身についているかを客観的にチェック
    • 行動観察:実務における行動パターンを先輩社員が観察し、適宜フィードバック

    小さなタスク → 中期的なスキル伸長の流れ

    新人が最初から大きな案件を担当するのはリスクが高いため、段階的に任せる範囲を広げる方が現実的です。

    1. 小さなタスク(例:データ入力、資料整理など)
      • 指導者がレビューしながら、コミュニケーションパターンを把握
    2. 中規模タスク(例:レポート作成、簡単な交渉など)
      • 新人の得意・不得意を見極めつつ、補足知識を追加
    3. 中期的なカリキュラム
      • 本人の意向やキャリアビジョンを踏まえ、スキルアップの道筋を提示

    ステップ4:質問対応・フィードバックと褒める文化

    「褒める」ことがもたらすモチベーション

    多くの研究で、「褒める」行為が個人のやる気や自己肯定感を高め、離職率の低下につながる効果が示唆されています。特に、上司や先輩からの具体的なフィードバックは、モチベーションを著しく向上させる要因です。

    • 過程を褒める:成果だけでなく、コツコツ準備してきた点や改善策を考えた姿勢などを評価する
    • 第三者を交えた称賛:ミーティングや雑談の中で「○○さんが頑張ってくれて助かったよ」などと周囲にも伝える

    効果的な質問対応・レビュー・面談の進め方

    • すぐに答えを与えすぎない
      • 質問されたら、まず「君はどう思う?」と相手の考えを引き出す。思考力を育てる機会に。
    • タイミングを逃さないレビュー
      • 完成物を溜め込むのではなく、小さな進捗ごとにチェックし、こまめにフィードバックする。
    • 個人面談の活用
      • 雑談からキャリアの悩みまで、プライベートも含めて信頼関係を深める機会を定期的に作る。

    ステップ5:効果検証と次のステップへの誘導

    アンケート、チェックリスト、行動観察の活用

    新人教育が進むにつれ、計画と実績のギャップが生じるのは当然です。そこで、以下のツールを活用して改善サイクルを回しましょう。

    • チェックリスト:業務の習熟度を「できる/できない」で可視化
    • アンケート:新人が抱える不安や、指導方法への意見を吸い上げる
    • 行動観察・フィールドノート:日々の業務で気づいたことを担当者が簡単に記録し、次の面談などで振り返る

    新人・若手双方が成長する仕組みづくり

    若手社員が新人を指導するメリットの一つに、「教える側」のスキルアップが挙げられます。教えるために業務内容を整理し、相手に合わせて説明する力が身につくと、結果的に自身の仕事の質も高まりやすいです。

    • 次のステップ提案:「そろそろ中級者向けのプロジェクトに挑戦してみない?」と、新人の可能性を広げる
    • リレー方式:新人がさらに後輩を教えられるようになれば、組織全体でOJTが循環しやすくなる

    まとめ:若手社員の指導が組織にもたらす波及効果

    新人にとっては、キャリアの最初期にどのような指導を受けるかが、離職率やスキル習得速度に大きく影響します。心理的安全性を大切にし、褒める文化を取り入れたOJTを実践することで、新人の適応力や成長意欲が高まり、会社への帰属意識も向上するでしょう。

    さらに、若手社員が新人を教えるメリットは、新人だけでなく指導する若手自身にも及びます。教える過程で、論理的思考・コミュニケーション力・リーダーシップなどが培われるため、結果的にチーム全体の活性化を促す好循環が生まれます。

    自分の業務と新人指導を両立するのは確かに大変ですが、その先には組織やチームへの貢献と、自身のキャリアアップという大きな報酬が待っています。ぜひ、本稿で紹介した5ステップを参考に、現場での新人育成に挑戦してみてください。きっと、あなた自身の成長にもつながるはずです。

  • ChatGPTのO1 proを活用して目標設定を行う手順

    ChatGPTのO1 proを活用して目標設定を行う手順

    目標を達成するためには、具体的な計画と正しい手順が必要です。しかし、「何から始めたらいいかわからない」と迷う方も多いのではないでしょうか?
    そこで今回は、ChatGPTのO1 proを活用して、自己分析からキャリアプランの設計、目標設定までを効率的に行う方法を徹底解説します。
    本記事を読めば、AIを活用して目標設定を成功に導くための具体的な手順がわかります!

    ChatGPTのO1 proとは

    ChatGPT O1 proの特長と活用のメリット

    ChatGPT O1 proは、OpenAIが提供する高度なAIツールで、ビジネスや学習、目標達成に向けた多岐にわたるサポートが可能です。

    主な特徴

    高度な分析力: 複雑な課題も深掘りして具体的な提案を提供。

    時間効率の向上: 自分で情報を集めたり整理する手間を省ける。

    柔軟なカスタマイズ: プロンプト次第でさまざまなアウトプットが得られる。

    特に目標設定やキャリア形成においては、自己分析や行動計画の策定において大きな効果を発揮します。

    自己分析:目標設定の出発点

    「自分を知らずして、目標は立てられない」とよく言われます。自己分析は、目標達成の土台を築くために最も重要なステップです。

    自己分析のメリット

    • 強みの発見: 自分の得意分野を知ることで、活躍の場を見極められる。
    • 弱みの認識: 克服すべき課題を明確にし、成長に繋げられる。
    • 価値観の整理: 目標や行動計画がブレにくくなる。

    O1 proを活用した自己分析の手順

    【プロンプト】  
    私はITエンジニアとして3年の経験があります。これまでのキャリアで評価されてきた点と、改善が必要な課題を整理し、今後の成長に向けた具体的なアドバイスをください。
    

    得られる結果

    • 強み: 技術スキルやコミュニケーション力などの明確化。
    • 弱み: 伸ばすべきポイントの具体的な提示。
    • アクションプラン: 今後取り組むべき学習やスキル向上の提案。

    質問を具体的にすることで、O1 proからより的確な回答が得られます。

    キャリアプランの設計:理想の未来を具体化する

    自己分析を基に、中長期的なキャリアプランを設計することで、目標設定がより現実的になります。

    キャリアプランを設計するステップ

    STEP
    理想像を描く

    5年後にプロジェクトマネージャーとして活躍する。

    STEP
    必要なスキルを明確化

    リーダーシップ、プロジェクト管理スキルなど。

    STEP
    行動計画を立てる

    学習計画や実践機会を設定。

    プロンプトでキャリアプランを具体化する

    【プロンプト】  
    5年後にプロジェクトマネージャーになりたいと考えています。目標達成のために必要なスキルセットや学習計画、実践方法を提案してください。
    

    得られる結果

    • 必要なスキルや資格のリストアップ。
    • 学習リソース(オンライン講座、書籍など)の提案。
    • 実際の仕事で役立つトレーニングのアイデア。

    目標設定:SMART基準で行動計画を明確に

    SMARTとは?

    SMART基準は、実現可能で具体的な目標を設定するためのフレームワークです。

    • Specific(具体的): 明確でわかりやすい。
    • Measurable(測定可能): 成果を数値化できる。
    • Achievable(達成可能): 現実的な範囲内である。
    • Relevant(関連性): 自分の目的や価値観に沿っている。
    • Time-bound(期限がある): 時間枠が設定されている。

    O1 proでSMART目標を最適化する

    【プロンプト】  
    半年以内に○○の資格を取得し、キャリアアップを目指しています。この目標をSMART基準で具体化し、行動計画を作成してください。
    

    ChatGPT O1 proを使いこなすプロンプト設計のコツ

    良いプロンプトの作り方

    • 具体的で明確な質問をする: 例「資格取得に必要な時間の見積もりを出してください。」
    • 背景情報を共有する: 自分の状況や制約を伝える。
    • 段階的に深掘りする: 例「この計画をさらに効率化する方法はありますか?」

    ダメなプロンプト例と改善例

    • ダメな例: 「キャリアアドバイスください。」
    • 良い例: 「現在ITエンジニアで、5年後にプロジェクトマネージャーを目指したいです。必要なスキルと学習方法を教えてください。」

    実践例:O1 proを活用した目標設定プロセス

    STEP
    自己分析

    「自分の強み・弱みは何か?」

    STEP
    キャリアプラン設計

    「どのようなスキルが必要か?」

    STEP
    SMART目標設定

    「具体的な目標をどう設計するか?」

    STEP
    プロンプトで深掘り

    「追加のアドバイスや改善策をもらう。」

    AIを味方につけて目標を達成する

    ChatGPTのO1 proを活用することで、上記のステップを効率的に進められます。

    今すぐChatGPT O1 proを試して、目標設定を始めてみましょう!AIを味方につけて、理想の未来を掴み取る第一歩を踏み出してください。