開発ブログ|株式会社Nextat(ネクスタット)
https://nextat.co.jp/
京都を中心にシステム開発・Webサイト・ホームページ制作を行なっているシステム開発・Web制作会社Nextat(ネクスタット)の公式サイトです。Webサイトの開発から業務支援システムの開発まで幅広く手がけています。ホームページ製作は、SEOやCMS、更新・運用など、お客様に合わせた最適なサービスをご提案します。
フィード

Codex利用時のMCPサーバーの認可設定
 1
開発ブログ|株式会社Nextat(ネクスタット)
こんにちは、ナカエです。 前回の NextatでのAI活用状況 に引き続き、AI活用ブログ記事シリーズの第二弾です。MCP公式でも、認可の仕様の議論が行われています。参考: Authorization - Model Context Protocol本記事では、Codexの設定ファイル(~/.codex/config.toml)でMCPの認可を設定する方法を見ていきます。※ 以下はCodex CLI 0.50.0で検証した内容になります。Codex CLIのMCPの認可設定例1. ローカルMCPサーバー(認可なし)Serena を使う場合の設定が下記です。 Serenaは uv を使ってローカルで起動するのが一般的です。起動に時間がかかることがあるので、起動時のタイムアウトを設定しています。[mcp_servers.serena]command = "uvx"args = [ "--from", "git+https://github.com/oraios/serena", "serena", "start-mcp-server", "--context", "codex",]startup_timeout_sec = 302. リモートMCPサーバー(アクセストークンによる認可)2-1. プロキシー利用Codex 0.46.0より前のバージョンではCodexのMCPサーバー接続のトランスポートは標準入出力しかサポートされていなかったため、mcp-proxy などの標準入出力のトランスポートをHTTP+SSE(現在非推奨)やStreamable HTTPに変換してくれるプロキシーを利用する必要がありました。HTTPのAuthorizationヘッダーにGitHubのPersonal Access Token(以下PAT)をBearerトークンとして設定することで認可を行います。コーディングエージェントがMCPを使って読み書きする権限はPATの発行時に設定することになります。[mcp_servers.github]command = "mcp-proxy"args = [ "--transport", "streamablehttp", "-H", "Authorization", "Bearer {GitHubのPAT}", "https://api.githubc
7日前

NextatでのAI活用状況
開発ブログ|株式会社Nextat(ネクスタット)
1. はじめにこんにちは、Hです。2. NextatのAI活用状況Nextatでは業務内容に応じて最適なAIを使い分けています。(1) Gemini利用展開施策:GoogleのAIサービス「Gemini」の利用を展開しています目的:情報収集、文章作成、アイデア発想、簡単なデータ分析など、日常的な業務における生産性向上を目指します(2) 開発特化型AIの活用施策:一部のプロジェクトで、開発業務に特化したAIツールを導入しています具体的なツール:Codex CLI:コマンドラインインターフェース(CLI)ベースでの開発作業の効率化GitHub Copilot:コードの自動補完や提案機能により、コーディング時間を短縮3. AIツールの選定基準Gemini for Google Workspaceの採用:Google Workspace版のGeminiは、利用データがAIの学習に利用されないことが保証されています。これにより、機密情報が外部に漏れたり、学習データとして再利用されたりするリスクを軽減しています開発特化型AIの制限:プロジェクトごとにGitHub CopilotやCodex CLIが利用できるか判断開発特化型AIツールにおいても、社内コードが第三者に流出しないよう、利用設定やアクセス権限を厳格に管理4. 勉強会の実施Nextatでは、AIを最大限に活用するための勉強会も同時に行っています。実施内容: 週に一度、AI社内勉強会を開催目的:ナレッジの非属人化: 各社員が見つけたAIの「良い使い方」「効果的なプロンプトの設計手法」「業務効率が劇的に上がった具体的な事例」といったグッドプラクティスの共有リテラシーの平準化: 組織全体でAIリテラシーを高め、活用レベルの底上げ応用力の強化: 共有された事例を参考に、社員一人ひとりが自身の業務への応用を考え、実践するサイクルを生む5. 今後のAI活用予定今後もより高い効果を目指し、新しいAIツールの検証および研究を継続的に行っています。他AIツールの実験的導入と比較: コーディング能力に強みを持つAnthropic社の「Claude Code」を実験的に導入予定 新しい開発手法の研究: 今までのやり方にとらわれず、要件定義・設計からテストケース作成までよりAIを有効活用できる開発手法の研究6. まとめNextatは、AIを
13日前

【Unity】URPを使用したプロジェクト作成時の不具合の修正【Ubuntu】
開発ブログ|株式会社Nextat(ネクスタット)
みなさんこんにちは。背景遭遇した現象環境Ubuntu 24.04.02 LTSUnity 6(6000.0.29f1)原因さいごに参考資料URP red squares in the editor tab problem in Unity 2022.3.2f1 LTSバージョンは違いますが、おそらく同じ原因で起こっている不具合です。
6ヶ月前

【Unity】VContainerで依存性注入やってみた
開発ブログ|株式会社Nextat(ネクスタット)
みなさんこんにちは。ホンジョウです。Zenjectで行っていましたが、最終リリースが2020年ということで、だいぶ枯れてきたように思います。VContainerに乗り換えてみようということで、少し触ってみました。開発環境Mac OS Sequoia 15.3.1Unity 6(6000.0.29f1)VContainer 1.16.8R3 1.3.0UniTask 2.5.10公式ドキュメントがわかりやすいです。R3をUnityNuGetとOpenUPMで楽々インストールUniTaskの導入作成するものFadeView.cs の作成FadeModel.cs の作成 Alpha => alpha; private readonly ReactiveProperty alpha = new (0); public async UniTask FadeInAsync(CancellationToken token) { alpha.Value = 1; while (alpha.Value > 0) { alpha.Value -= Time.deltaTime; await UniTask.Yield(token); } alpha.Value = 0; } public async UniTask FadeOutAsync(CancellationToken token) { alpha.Value = 0; while (alpha.Value < 1) { alpha.Value += Time.deltaTime; await UniTask.Yield(token); } alpha.Value = 1; }}FadeController.cs の作成RootLifetimeScopeの作成問題点おわりにこちらのページでも紹介されています。作者も日本の方で、質問やフィードバックのハードルが低いと感じました。VContainerのますますの発展をお祈りしております。
8ヶ月前

【Unity】Input Systemを使ってみた
開発ブログ|株式会社Nextat(ネクスタット)
こんにちは、ホンジョウです。開発環境Mac OS Sequoia 15.3.1Unity 6 (6000.0.29f1)プロジェクトの立ち上げプレイヤー用Scriptの作成OnMove()は、あとでPlayerオブジェクトに追加する「Player Input」というコンポーネントが読み取るために、publicにしておきます。Playerオブジェクトの設定Character ControllerPlayer(Script)Player InputUIからの操作ゲームパッドの対応こちらのページによると、MacではXBox、PS4/5、Switchコントローラーにそれぞれ対応しているようなので、試しに家にあったPS5コントローラーをUSB経由で接続してみたところ、とくに修正もなく、上記の移動処理がPS5コントローラーで動作していることを確認できました。すごいぞInput System。さいごに参考資料Unity公式ドキュメント Input SystemUnity公式ドキュメント Player Inputに関しての解説Unity公式ドキュメント On-Screen Buttonに関しての解説
8ヶ月前

ZellijでDocker開発環境をちょっと自動化してみた
開発ブログ|株式会社Nextat(ネクスタット)
はじめにこんにちは、ヨシです。最近は大分暖かくなってきて気持ちよいの季節になってきましたね。その一方であれが到来しています。そう、花粉です。現在は京都に住んでいるのですが、この間しばらく東京に行く機会がありまして、その際に花粉症が発症してしまいました。目薬や漢方が必須となりそうなので、そろそろ処方してもらおうかと思います。さて、本日は Zellij というターミナルマルチプレクサのツールとそれを使った開発環境のオートメーションについての記事を書いていきたいと思います。Zellijとはまず、Zellij(ゼリッジ)とは、tmux などに代表されるターミナルマルチプレクサ(Terminal Multiplexer)ツールの一種で、ターミナルエミュレータ内でセッション、タブ、ペインといった単位で画面を分割して、その中で仮想ターミナルを起動させることができます。https://zellij.dev https://zellij.dev/tutorials/basic-functionality/ より引用Zellij は Rust 言語で開発されており、tmux に比べてモダンで、プラグインなどを導入しなくても最初から様々な機能が利用できる(batteries included)なものとして利用できます。特徴的なのは初学者にとって非常にわかりやすく、ユーザーフレンドリーな UI になっている点です。こういったツールで大変なのはキーバインドを覚えるということですが、Zellij の場合には status-bar という画面下部の領域(下記画像の③の領域)に主なキーバインドを表示してくれて、モード変更に基づいてどのようなアクションが可能かを表示してくれます。実際、このキーバインドの表示によって簡単に Zellij の操作を覚えることができました。https://zellij.dev/documentation/overview より引用status-bar は後から非表示にすることもできますが、このような初学者に非常に優しい作りとなっているため、これからターミナルマルチプレクサを使いたいという方は tmux よりも Zellij を使う方がおすすめです。もちろん、tmux の方が歴史があるため、tmux でしか使えないような機能が多々あったりしますが、初学者にとっては使わないよ
8ヶ月前

Laravel + Inertia.jsのForm Helperを使った際のエラーハンドリングをより実践的に
開発ブログ|株式会社Nextat(ネクスタット)
弊社では最近Laravelと Inertia.js によるMPAを選択するプロジェクトが増えて知見を溜めつつあり、当ブログでも紹介していければと考えています。Inertia.jsを使う場合のフォームの実装には、Form Helper を使うのが手軽です。本日はこのForm Helperを使った際のエラーハンドリングについて、ドキュメントから一歩先に進んで検討した例を紹介します。環境バックエンドPHP 8.4.4Laravel 11.31inertiajs/inertia-laravel 2.01フロントエンド今回はサンプルをVueとしていますが、ReactやSvelteを使う場合もほぼ同様の実装が可能です。Node 22.5.1@inertiajs/vue3 2.0.3Vue 3.5.13ziggy-js 2.5.1今回のサンプルとなるフォームイベントを新規登録する簡単なフォームを考えます。イベントのタイトルと開始日時を登録するものとします。エラー発生時に期待される挙動は下記のとおりです。フォーム送信先のエンドポイントでバリデーションエラーが起こった際はリダイレクトバックし、バリデーションエラーメッセージはフォームの入力項目それぞれの下に表示するその他の例外が発生した場合もリダイレクトバックし、例外のメッセージをフォームの上部に表示するバリデーションエラー発生時その他の例外発生時デフォルトのエラーハンドリングまずは、何も設定していない状態の確認です。 Controllerなどでバリデーションエラー以外の例外を投げた場合は、Inertia.jsの用意しているモーダルの中にLaravelデフォルトのエラー画面が表示されてしまいます。この系統の挙動は一般的には事例が少なく、多くの場合はそのままでは好ましくありません。Inertia.js公式で紹介されている本番向けの設定Inertia.jsのドキュメントのエラーハンドリング には、本番環境向けの設定方法が紹介されています。ステータスコードが403,404,500,503のいずれかとなる例外発生時はフロントエンドのエラー用のページコンポーネントでエラー画面を表示するXSRFトークンのミスマッチが起こりステータスコードが419となった場合はリダイレクトバックしてセッションにメッセージを入れるuse Illuminate\Htt
8ヶ月前

LaravelのロックのDynamoDBドライバで高負荷時にロックが解除されない不具合
開発ブログ|株式会社Nextat(ネクスタット)
本日の記事は、とあるプロジェクトでLaravelのロックのDynamoDBドライバの実装に起因するバグに苦しめられたので、その備忘録です。環境Laravel 9.34背景・症状当該プロジェクトでは、アプリケーションにおけるロックのドライバとして、Redis(AWS上ではElastiCache for Redis)の代わりにスケールの容易なDynamoDBに移行していました。高負荷時のパフォーマンスチューニングのため負荷試験を行なっており、RDSでプリペアドステートメントに関係する特定のエラーが出た直後にロック待ちのタイムアウトが頻発するようになることが多いDynamoDBのテーブルの中身を確認したところ、ロック用のアイテム(DynamoDBのレコード相当)が残っているある程度ログを仕込んだりしたがあまり目ぼしい情報がなく手づまり気味という情報を負荷試験チームから共有され、調査を開始しました。LaravelのDynamoDBドライバ周りのコードを読んでも特に問題があるように思えず、実行時間タイムアウトなどの致命的なエラーやPHP-FPMのセグメンテーションフォルトでfinally節でのロック解除をすり抜けた説コンテナがグレースフルシャットダウンしていない説DynamoDBのスロットリング が起こっていた説などの仮説を立てていましたが、ログから得られる情報とはいまいち合致しません。原因の解明より詳細な情報を得るために、Illuminate\Cache\DynamoDbLock・Illuminate\DynamoDbStoreを継承して拡張し、さらに詳細なロギングを仕込んで調査を行おうと再度コードを深掘りしていました。DynamoDbLock::release()の実装はロックのアイテムに設定したownerの値が合致しなければfalseを返して失敗します。Illuminate\Cache\Lock(DynamoDbLockの基底となる抽象クラス) /** * Release the lock. * * @return bool */ public function release() { if ($this->isOwnedByCurrentProcess()) { return $this->dynamo->forget($this->name); } return f
9ヶ月前

Cloudflare Zero Trustを導入中 〜 リモートアクセスVPNの代替と固定IPアドレスによる通信の維持
開発ブログ|株式会社Nextat(ネクスタット)
本日のお題はWeb系ではなく、珍しくセキュリティとネットワークに関連する記事です。弊社では、社外(主としてリモートワーク環境)からの社内LAN内の機器へのアクセス接続元のIPアドレス制限を行っているサービスへの社外からのアクセス業務端末を社外のWi-Fiに接続した時の保護などを目的としてリモートアクセスVPNを自前運用しています。事務所内に設置しているルーターをVPNサーバーとしてリモートアクセスVPNを実現していたのですが、同時接続数の増加に伴う速度低下や接続の不安定さが目立つようになりました。 当初はルーターを入れ替えようという話になったのですが、同時接続数の上限が低く、一度頓挫しました。昨今、VPN機器の脆弱性を突かれるセキュリティインシデントをよく見かけることもあり、ネットワークの設計自体を見直す丁度良い機会であると考えてVPNに限定せず選択肢を調査しました。Tailscale と Cloudflare Zero Trust を候補に考えていたのですが、50ユーザーまで無料のプランがあり社での試験導入も気軽にできそうなことなどからCloudflare Zero Trustを採用することにしました。ゼロトラスト・セキュリティやCloudflare Zero Trustの存在は以前から認識していたものの、接続元IPアドレス制限はゼロトラストの理念とはむしろ逆のものであり、両立するのは困難だろうと考えていたのが今まで手を出さなかった理由でした。そのような偏見があったのですが、調査の結果むしろVPN利用よりリモートアクセスの負荷が下がる構成を実現できそうなことがわかったため、昨年末ごろから試験導入を行っています。今回の記事は、Cloudflare Zero Trustを利用して固定IPアドレスによる特定のWebサイトへのアクセスを実現した方法についてが主となります。ゼロトラスト・セキュリティ/ゼロトラスト・ネットワークいかなるネットワークにも信頼を置かず、利用するアプリケーションやサービスそれぞれで常にユーザーの検証(認証認可)を行うセキュリティ/ネットワークのモデルのことをゼロトラスト・セキュリティ/ネットワークと呼びます。従来のネットワーク設計では信用してきた社内LANやVPN経由のアクセスなども信用すべきでないものとして扱われるのが特徴です。 このモデルが台頭
9ヶ月前

【Compose Multiplatform】Resourcesライブラリを用いたリソース取得のマルチプラットフォーム対応
開発ブログ|株式会社Nextat(ネクスタット)
みなさんこんにちは。今回はCompose Multiplatform記事の8回目になります。Compose Multiplatform入門(環境構築編)Compose Multiplatform入門(プロジェクト作成編)Compose Multiplatform入門(画面遷移編)Compose Multiplatform入門(ロギング編)KMPAuthを使用したFirebaseソーシャルログイン(Android編)KMPAuthを使用したFirebaseソーシャルログイン(iOS編)Ktorを使用したHTTP通信とRepositoryの実装マルチプラットフォーム対応のリソース取得処理Resourcesライブラリを使用します。 今回はResourcesライブラリを用いて、画像表示処理を行います。導入build.gradle.ktsの更新使用する画像のインポートPNGJPGBMPWEBPXML形式のベクター画像画像の表示HomeScreen.kt の更新実行テキストリソースの取得strings.xml呼び出し方さいごに今回でCompose Multiplatformの記事連載は一旦終了になります。Compose Multiplatformを扱うすべての方の一助になれば幸いです。これからもバージョンアップなどで気になる機能が出てきた場合には記事を更新しようかと思いますので、よろしくお願いいたします。
1年前