開発ブログ|株式会社Nextat(ネクスタット)

https://nextat.co.jp/

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

フィード

記事のアイキャッチ画像
Cloud Native Buildpacksとheroku/builder:22でLaravelアプリのコンテナイメージを作成する
開発ブログ|株式会社Nextat(ネクスタット)
こんにちは、ナカエです。桜の開花とともに初夏のような暖かさがやってきましたね。弊社ではAWS App Runnerで動かしている社内用のLaravelアプリケーションがあります。そちらで利用するコンテナイメージのビルドにはCloud Native Buildpacksを用いているのですが、先日ビルダーイメージとして用いていた heroku/buildpacks:20 のサポートが終了している ことに気づきました。新しいビルダーイメージ heroku/builder:22 を利用する場合は以前の設定を少し変更する必要があり、本記事の内容はそちらの覚書になります。検証環境とソフトウェアのバージョンOS: macOS 14.4.1 (Sonoma)CPU: Apple M1 Maxzsh 5.9pack 0.33.2PHP 8.3.4(ホストマシン)8.2.2(ビルドするコンテナ)Node.js 20.12.2 (ホストマシン・コンテナ双方)Laravel 11.0.6Laravelアプリを作成下記コマンドで新規Laravelアプリを作成します。composer create-project laravel/laravel laravel-heroku-builder-22手元ではLaravel 11.0.6で作成されました。Cloud Native Buildpacks向けのイメージビルド設定作成・変更するファイルは 以前のApp Runner + Cloud Native Buildpacksの記事 と同じですが、一部内容が異なります。ProcfilePHP実行環境の起動について指定するProcfileは変更なしです。nginx + PHP-FPM 構成で動かします。web: heroku-php-nginx -C nginx.conf publicnginx.conflocationの設定は同じですが、一時ファイルを保存するのにデフォルトの設定だとApp Runnerのコンテナ起動時にエラーが出たので、/tmp以下に変更しています。location / { try_files $uri @rewriteapp;}location @rewriteapp { rewrite ^(.*)$ /index.php$1 last;}client_body_temp_path
25日前
記事のアイキャッチ画像
Gitでよく使用するコマンド
開発ブログ|株式会社Nextat(ネクスタット)
こんにちは、かっちゃんです。 本日は普段の業務でよく使用するGitでよく使用するコマンドの紹介とコマンドの説明を簡単にしていこうかと思います。コマンド一覧commitされていない修正ファイルの表示$ git status修正ファイルの追加$ git add {ファイルのパス} // ファイルを単独で追加$ git add {ディレクトリのパス} // ファイルをディレクトリ単位で追加$ git add . // ファイルを全て追加コミットを追加する$ git commit -m "{コミットの説明}" // コミットを追加する$ git commit —amend -m "{コミットの説明}" // commitの説明の修正$ git commit —allow-empty "{コミットの説明}" // 空コミットの作成ブランチの確認$ git branch // 既存のブランチの確認$ git branch | grep {指定したい文字} // ブランチ名をあいまい指定して確認ブランチの削除$ git branch -d {ブランチ名} // 既に親ブランチにマージ済みのブランチ削除$ git branch -D {ブランチ名} // 親ブランチにマージされていないブランチ削除$ git branch | grep {指定したい文字} | xargs git branch -d // 既に親ブランチにマージ済みのブランチ名をあいまい指定して削除$ git branch | grep {指定したい文字} | xargs git branch -D // 親ブランチにマージされていないブランチ名をあいまい指定して削除ブランチ名を変更する$ git branch -m {ブランチ名} // ブランチ名を変更するブランチを切り替える$ git checkout {ブランチ名} // 指定のブランチに切り替える$ git checkout -b {ブランチ名} // ブランチを作成して切り替える$ git checkout -b {ブランチ名} {新しいブランチの開始点} // 新しいブランチの開始点からブランチを切れる$ git switch {ブランチ名} // 指定のブランチに切り替える リモートリポジトリのブランチの状態をローカルに反映$ git fetch //
1ヶ月前
記事のアイキャッチ画像
【Laravel】キャッシュドライバをDynamoDBに変更した際にある問題に遭遇した話
開発ブログ|株式会社Nextat(ネクスタット)
こんにちは、モリです。 今回は、Laravelで利用していたキャッシュドライバ(キャッシュのストア)をRedisからDynamoDBに変更した際に遭遇した問題について取り上げたいと思います。環境PHP: 8.1Laravel Framework: 9.44.0問題の背景と原因まずキャッシュドライバの切り替えから問題が起こるまでの状況を説明します。 RedisからDynamoDBへの変更はいたって簡単です。use Illuminate\Cache\Repository;/** @var Repository $repository */$repository = Cache::store('dynamodb');store()によってキャッシュドライバを切り替えることができます。DynamoDBに切り替えた中に、0始まりを含むランダムな数字の並びを保存していた箇所も含まれていました。 例えば下記のようなコードによって生成される値を保存していました。$number = random_int(0, 9999999);$sevenDigitsCode = sprintf('%07d', $number); // ex.0358432しかしRedisでは問題なく保存されていた値が、DynamoDBに保存されると問題が発生することに気づきました。// Redis$repository = Cache::store('redis');$repository->put('key', '0000123', 60);$repository->get('key'); // 0000123// DynamoDB$repository = Cache::store('dynamodb');$repository->put('key', '0000123', 60);$repository->get('key'); // 1230始まりの値の場合、0が除かれて保存されてしまっています。 この問題の原因を突き止めるために、保存処理をみてみたいと思います。Cache::store('dynamodb')で生成されたインスタンスは、 Illuminate\Cache\DynamoDbStoreクラスのインスタンスがコンストラクタインジェクションによって注入されており、保存や取得などの実際の処理はこの
1ヶ月前
記事のアイキャッチ画像
自動PR作成CIをHubコマンドからGitHub CLIへ変更
開発ブログ|株式会社Nextat(ネクスタット)
こんにちは。こちらのIssueにある通りGitHub CLIを使うことが推奨されています。以前のソースコードGitHub CLIに書き換えたコード説明こちらを参照してください。まとめHubコマンドが使えなくなったので、GitHub CLIに書き換えました。GitHub CLIはHubコマンドとほぼ同じように使えるので、書き換えは簡単です。Hubコマンドを使っている方は、GitHub CLIに書き換えてみてください。
2ヶ月前
記事のアイキャッチ画像
Laravel 11でのconfig周りの変更
開発ブログ|株式会社Nextat(ネクスタット)
Laravel 11はスケルトンのスリム化を一つの目標に掲げていたようで、configファイルの扱いも変更されています。 Kernel周りの大幅な変更などに比べると目立たないですが、後方互換性が気になったので調査しました。環境macOS 13.6.3 (Ventura)PHP 8.3.4Laravel 10.48.3Laravel 11.0.7設定ファイルの値のマージconfigディレクトリ以下の設定ファイルが、Laravelデフォルトの設定ファイルとマージされるという挙動が1つ目のポイントです。before: Laravel 10Laravel 10での挙動をおさらいします。 試しに初期状態のconfig/database.phpのconnectionsの配列からmysql以外のキーを削除します。 // 略 'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], ], // 略Tinkerでconfigの値を確認します。$ php artisan tinkerPsy Shell
2ヶ月前
記事のアイキャッチ画像
【Laravel】Numberクラスで数値をフォーマット
開発ブログ|株式会社Nextat(ネクスタット)
こんにちは、おさむちゃんです。環境Number::format()use Illuminate\Support\Number;echo Number::format(1234567); // 1,234,567// 小数点以下の指定echo Number::format(1234.5678, 2); // 1,234.57Number::spell()echo Number::spell(123); // one hundred twenty-threeecho Number::spell(123, 'ja_JP'); // 百二十三Number::ordinal()echo Number::ordinal(1); // 1stecho Number::ordinal(2); // 2ndecho Number::ordinal(12); // 12thecho Number::ordinal(1, 'ja_JP'); // 第1Number::percentage()echo Number::percentage(12); // 12%// 小数点以下の指定echo Number::percentage(12, 2); // 12.00%echo Number::percentage(12.34, 1); // 12.3%Number::currency()echo Number::currency(123456); // $123,456.00echo Number::currency(123456, 'JPY'); // ¥123,456Number::fileSize()echo Number::fileSize(1024); // 1 KB// 小数点以下の指定echo Number::fileSize(1234567, 2); // 1.18 MBNumber::abbreviate()echo Number::abbreviate(123456); // 123K// 小数点以下の指定echo Number::abbreviate(123456789, 1); // 123.5MNumber::clamp()echo Number::clamp(5, 0, 10); // 5echo Number::clamp(-5, 0, 10); // 0echo
2ヶ月前
記事のアイキャッチ画像
DenoでTypeScriptのDecoratorに入門してみる
開発ブログ|株式会社Nextat(ネクスタット)
はじめにこんにちは、ヨシです。最近楽しみなこととして、今年の 5 月に東京で TypeScript の一大イベントである TSKaigi が開催されます。TypeScript 好きの自分としては参加するしかないということで、現在はプロポーザル資料を誠意作成中です。ということで今日の記事の内容になりますが、最近入ったプロジェクトでは、Vuex というライブラリを TypeScript で利用するために vuex-module-decorators というライブラリを合わせて使用しています。このライブラリでは Vuex のモジュールをクラスで記載し、mutation や action などを Decorator を付与したメソッドの形式で記述することができます。Decorator は TypeScript を使っていても特定のライブラリなどを使わない限りはなかなか使用しない機能です。今回の記事では、Decorator つながりということで、Deno の v1.40 以降で使えるようになった TypeScript の Decorator について紹介したいと思います。Decorator とはDecorator は TC39 で stage3 の段階にあるプロポーザルではありますが、様々なライブラリですでに利用されている機能です。TypeScript は v5.0 から --experimentalDecorators のコンパイラオプションのフラグが不要になり、stage 3 の Decorator が利用できるようになりました。TS のライブラリでこれまで利用されてきたデコレータは stage 2 のものらしく、それらの間に互換性はないため注意が必要です。Decorator 機能とは、簡単に言えば、既存のクラスのメソッドなどに対して前後で追加したい処理を関数の形で記述し、メソッドに対して @additionalMethod のような形でデコレーションすることで再利用可能な形でまとめつつ追加することができるという機能です。stage3 の Decorator は以下のような形になっています。function methodDecorator( target: Function, context: ClassMethodDecoratorContext) { // ...}第
3ヶ月前
記事のアイキャッチ画像
LaravelのCollectionのfilter()に翻弄された話
開発ブログ|株式会社Nextat(ネクスタット)
環境本題$collection = collect(['a', 'b', 'c']);$newCollection = $collection->filter(function ($item) {return $item !== 'b';});dump($newCollection); // {[0 => 'a', 2 => 'c']}$collection = collect(['a', 'b', 'c']);$newCollection = $collection->filter(function ($item) {return $item !== 'b';})->values();dump($newCollection);// {[0 => 'a', 1 => 'c']}今回はLaravelのCollectionについての小ネタを紹介させて頂きました。同じような問題に遭遇された方は是非参考にしてみてください。
3ヶ月前
記事のアイキャッチ画像
【Unity】MagicOnion + MemoryPackで System.IO.IOException: The request stream was aborted.
開発ブログ|株式会社Nextat(ネクスタット)
環境本題[MemoryPackable]をつけ忘れた引数型を含むサーバーメソッドをコールすると、サーバー側で「System.IO.IOException: The request stream was aborted.」が発生することがありました。本来[MemoryPackable]をつけ忘れた場合はコールした時点でクライアント側で「MemoryPack.MemoryPackSerializationException : XXX is not registered in this provider」が発生しますが、この時はなぜか発生しませんでした。100%再現するわけではありませんが、一度再現すると[MemoryPackable]をつけるまで100%再現していました。TestRunnerでの単発コールでも再現したので、他の通信が切れただけというのも考えにくいです。記事作成時点では再現しなくなったので詳しく検証できませんでしたが、同じ現象を踏んだ人の参考になれば......
3ヶ月前
記事のアイキャッチ画像
【Rust】RustプロジェクトをDockerコンテナに移行してみる
開発ブログ|株式会社Nextat(ネクスタット)
こんにちは。生まれも育ちも、今住んでいる場所も北海道ですが、永遠に北海道の冬に慣れる気がしないホンジョウです。前回の記事はこちら開発環境MacOS 13.4 VenturaDocker 4.6.1Rust 1.75.0 (Docker内で立ち上げ)ディレクトリ構成blog-web-api├── backend│ ├── Cargo.lock│ ├── Cargo.toml│ └── src│ ├── controller│ │ ├── mod.rs│ │ └── users.rs│ └── main.rs└── infrastructure ├── docker │ └── rust │ └── Dockerfile └── compose.ymlcompose.ymlの記述Dockerfileの記述Cargo.tomlの修正main.rsの修正コンテナの立ち上げRustプロジェクトの実行これで localhost:8083/users にアクセスしてみましょう。前回の記事と同じJSONが表示されれば成功です。最後に参考資料dockerでrust環境構築してhello worldaxumのexamplesが現行版でそのまま参考にできない話(2023/07/03時点)
4ヶ月前